數(shù)據(jù)庫(kù)系列文章:
關(guān)系型數(shù)據(jù)庫(kù):
- MySQL —— 基礎(chǔ)語(yǔ)法大全
- MySQL —— 進(jìn)階
非關(guān)系型數(shù)據(jù)庫(kù):
- Redis 的安裝與配置
- Redis 基本命令(上)
- Redis 基本命令(下)
一、Redis 概述
1.1 Redis 簡(jiǎn)介
Redis Remote Dictionary Server ,遠(yuǎn)程字典服務(wù), 由意大利人 Salvatore Sanfilippo (又名 Antirez 開(kāi)發(fā), 是一個(gè)使用 ANSI C 語(yǔ)言 編寫(xiě)、支持網(wǎng)絡(luò)、可基于 內(nèi)存 亦可 持久化 的 日志型、 NoSQL 開(kāi)源內(nèi)存數(shù)據(jù)庫(kù) ,其提供多種語(yǔ)言的 API 。從 2010 年 3 月 15 日起, Redis 的開(kāi)發(fā)工作由 VMware 主持。從2013 年 5 月開(kāi)始, Redis 的開(kāi)發(fā)由 Pivotal 贊助。
2008 年時(shí) Salvatore Sanfilippo 自己開(kāi)發(fā)一個(gè)叫 LLOOGG 的網(wǎng)站。
Redis 之所以稱(chēng)之為 字典服務(wù),是因?yàn)?Redis 是一個(gè) key-value
存儲(chǔ)系統(tǒng) 。支持存儲(chǔ)的 value
類(lèi)型 有很多,包括 String
(字符串) 、 List
(鏈表) 、 Set
(集合) 、 Zset
(sorted set
有序集合) 和 Hash
(哈希類(lèi)型) 等 。
Redis 的國(guó)際知名用戶(hù)有, Twitter 、 GitHub 、 Facebook 等,國(guó)內(nèi)知名用戶(hù)有,阿里巴巴、騰訊、百度、搜狐、優(yōu)酷、美團(tuán)、小米等。熟練使用和運(yùn)維 Redis 已經(jīng)成為開(kāi)發(fā)運(yùn)維人員的一個(gè)必備技能。
?? NoSQL
-
NoSQL(“
non relational
”, “Not Only SQL
”),泛指 非關(guān)系型的數(shù)據(jù)庫(kù)。隨著互聯(lián)網(wǎng) web2.0網(wǎng)站的興起,傳統(tǒng)的關(guān)系數(shù)據(jù)庫(kù)在處理 web2.0 網(wǎng)站,特別是 超大規(guī)模 和 高并發(fā) 的SNS
(社交) 類(lèi)型的 web2. 0 純動(dòng)態(tài)網(wǎng)站 已經(jīng)顯得力不從心,出現(xiàn)了很多難以克服的問(wèn)題,而非關(guān)系型的數(shù)據(jù)庫(kù)則由于其本身的特點(diǎn)得到了非常迅速的發(fā)展。 NoSQL 數(shù)據(jù)庫(kù)的產(chǎn)生就是為了解決 大規(guī)模數(shù)據(jù)集合 多重?cái)?shù)據(jù)種類(lèi) 帶來(lái)的挑戰(zhàn),特別是大數(shù)據(jù)應(yīng)用難題。
(1) 鍵值存儲(chǔ)數(shù)據(jù)庫(kù)
- 就像
Map
一樣的key-value
對(duì)。典型代表就是 Redis 。
(2) 列存儲(chǔ)數(shù)據(jù)庫(kù)
-
關(guān)系型數(shù)據(jù)庫(kù) 是典型的 行存儲(chǔ)數(shù)據(jù)庫(kù)。
- 其存在的問(wèn)題是,按行存儲(chǔ)的數(shù)據(jù)在 物理層面 占用的是 連續(xù)存儲(chǔ)空間,不適合海量數(shù)據(jù)存儲(chǔ)。
- 而按 列存儲(chǔ) 則可實(shí)現(xiàn) 分布式存儲(chǔ),適合海量存儲(chǔ)。典型代表是 HBase 。
(3) 文檔型數(shù)據(jù)庫(kù)
- 其是 NoSQL 與 關(guān)系型數(shù)據(jù) 的結(jié)合,最像關(guān)系型數(shù)據(jù)庫(kù) 的 NoSQL。典型代表是MongoDB。
- 該類(lèi)型的數(shù)據(jù)模型是版本化的文檔,半結(jié)構(gòu)化的文檔以特定的格式存儲(chǔ),比如
JSON
。
- 該類(lèi)型的數(shù)據(jù)模型是版本化的文檔,半結(jié)構(gòu)化的文檔以特定的格式存儲(chǔ),比如
(4) 圖形(Graph)數(shù)據(jù)庫(kù)
- 用于存放一個(gè) 節(jié)點(diǎn)關(guān)系 的數(shù)據(jù)庫(kù),例如描述不同人間的關(guān)系。典型代表是Neo4J。
1.2 Redis 的用途
Redis 在生產(chǎn)中使用最多的場(chǎng)景就是 做數(shù)據(jù)緩存 。即客戶(hù)端從 DBMS 中查詢(xún)出的數(shù)據(jù)首先寫(xiě)入到 Redis 中,后續(xù)無(wú)論哪個(gè)客戶(hù)端再需要訪(fǎng)問(wèn)該數(shù)據(jù),直接讀取 Redis 中的即可,不僅減小了 RT ,而且降低了 DBMS 的壓力。
根據(jù) Redis 緩存的數(shù)據(jù)與 DBMS 中數(shù)據(jù)的同步性劃分,緩存一般可劃分為兩類(lèi): 實(shí)時(shí)同步緩存 與 階段性同步緩存 。
- 實(shí)時(shí)同步緩存 是指,DBMS 中 數(shù)據(jù)更新 后, Redis 緩存中的存放的相關(guān)數(shù)據(jù)會(huì)被 立即清除,以促使再有對(duì)該數(shù)據(jù)的訪(fǎng)問(wèn)請(qǐng)求到來(lái)時(shí),必須先從 DBMS 中查詢(xún)獲取到最新數(shù)據(jù),然后再寫(xiě)入到 Redis 。
-
階段性同步緩存 是指,Redis 緩存中的數(shù)據(jù)允許在一段時(shí)間 (
生存時(shí)長(zhǎng)
) 內(nèi)與 DBMS 中的數(shù)據(jù)不完全一致。而這個(gè)時(shí)間段就是這個(gè)緩存數(shù)據(jù)的 過(guò)期時(shí)間。
1.3 Redis 特性
能夠做緩存的技術(shù)、中間件很多,例如,MyBatis
自帶的二級(jí)緩存、 Memched
等。只所以在生產(chǎn)中做緩存的產(chǎn)品幾乎無(wú)一例外的會(huì)選擇 Redis ,是因?yàn)樗泻芏嗥渌a(chǎn)品所不具備的特性。
-
性能極高: Redis 讀的速度可以達(dá)到
11w次/s
,寫(xiě)的速度可以達(dá)到8w次/s
。只所以具有這么高的性能,因?yàn)橐韵聨c(diǎn)原因:-
- Redis 的所有操作都是在內(nèi)存中發(fā)生的。
-
- Redis 是用 C 語(yǔ)言 開(kāi)發(fā)的。
-
- Redis 源碼非常精細(xì)(集性能與優(yōu)雅于一身)。
-
- 簡(jiǎn)單穩(wěn)定: Redis 源碼很少。早期版本只有 2w 行左右。從 3.0 版本開(kāi)始,增加了集群功能,代碼變?yōu)榱?5w 行左右。
-
持久化: Redis 內(nèi)存中的數(shù)據(jù)可以進(jìn)行持久化,其有兩種方式:
RDB
與AOF
。 - 高可用集群: Redis 提供了高可用的主從集群功能,可以確保系統(tǒng)的安全性。
-
豐富的數(shù)據(jù)類(lèi)型: Redis 是一個(gè)
key-value
存儲(chǔ)系統(tǒng) 。支持存儲(chǔ)的value
類(lèi)型很多,包括String
(字符串) 、List
(鏈表) 、Set
(集合) 、Zset
(sorted set
有序集合) 和Hash
(哈希類(lèi)型)等,還有BitMap
、HyperLogLog
、Geospatial
類(lèi)型。-
BitMap
:一般用于 大數(shù)據(jù)量 的 二值性統(tǒng)計(jì) 。 -
HyperLogLog
:其是Hyperlog Log
,用于對(duì)數(shù)據(jù)量超級(jí)龐大的日志做 去重統(tǒng)計(jì)。 -
Geospatial
:地理空間,其主要用于地理位置相關(guān)的計(jì)算。
-
-
強(qiáng)大的功能: Redis 提供了數(shù)據(jù)過(guò)期功能、發(fā)布/訂閱功能、簡(jiǎn)單事務(wù)功能,還支持
Lua
腳本擴(kuò)展功能。 - 客戶(hù)端語(yǔ)言廣泛: Redis 提供了簡(jiǎn)單的 TCP 通信協(xié)議,編程語(yǔ)言可以方便地的接入 Redis 。所以,有很多的開(kāi)源社區(qū)、大公司等開(kāi)發(fā)出了很多語(yǔ)言的 Redis 客戶(hù)端。
- 支持 ACL 權(quán)限控制: 之前的權(quán)限控制非常笨拙。從 Redis6 開(kāi)始引入了 ACL 模塊,可以為不同用戶(hù)定制不同的用戶(hù)權(quán)限。
ACL,Access Control List ,訪(fǎng)問(wèn)控制列表,是一種 細(xì)粒度 的權(quán)限管理策略,可以針對(duì) 任意用戶(hù)與組 進(jìn)行權(quán)限控制。
- 目前大多數(shù) Unix 系統(tǒng)與 Linux 2.6 版本已經(jīng)支持 ACL 了。
- Zookeeper 早已支持 ACL 了。
- Unix與 Linux 系統(tǒng)默認(rèn)使用是 UGO (User 、Group 、Other) 權(quán)限控制策略 ,其是一種 粗粒度 的權(quán)限管理策略。
- 支持多線(xiàn)程 IO 模型: Redis 之前版本采用的是單線(xiàn)程模型,從 6.0 版本開(kāi)始 支持 了多線(xiàn)程模型。
1.4 Redis 的IO模型
Redis 客戶(hù)端提交的各種請(qǐng)求是如何最終被 Redis 處理的?
- Redis 處理客戶(hù)端請(qǐng)求所采用的 處理架構(gòu),稱(chēng)為 Redis 的 IO 模型。
- 不同版本的 Redis 采用的 IO 模型 是不同的。
?? 1)、單線(xiàn)程模型
- 對(duì)于 Redis 3.0 及其以前版本, Redis 的 IO 模型采用的是 純粹的單線(xiàn)程模型 。即所有客戶(hù)端的請(qǐng)求全部由一個(gè)線(xiàn)程處理。
- Redis 的單線(xiàn)程模型采用了 多路復(fù)用技術(shù) 。
對(duì)于多路復(fù)用器的 多路復(fù)用技術(shù) 常見(jiàn)的有三種:
select
模型(數(shù)組)、poll
模型(鏈表)、epoll
模型。
select
模型底層是數(shù)組,性能較低,不常見(jiàn)。poll
模型的選擇算法:采用的是輪詢(xún)算法。該模型對(duì)客戶(hù)端的就緒處理是 有延遲的 。epoll
模型的選擇算法:采用的是回調(diào)方式。 根據(jù)就緒事件發(fā)生后的處理方式的不同,又可分為LT
模型與ET
模型。
- 每個(gè)客戶(hù)端 若 要向 Redis 提交請(qǐng)求,都需要與 Redis 建立一個(gè)
socket
連接,并向 事件分發(fā)器 注冊(cè)一個(gè)事件。一旦該事件發(fā)生就表明該連接已經(jīng)就緒。而一旦連接就緒,事件分發(fā)器就會(huì)感知到,然后獲取客戶(hù)端通過(guò)該連接發(fā)送的請(qǐng)求,并將由該事件分發(fā)器所綁定的這個(gè) 唯一的線(xiàn)程 來(lái)處理。如果該線(xiàn)程還在處理多個(gè)任務(wù),則將該任務(wù)寫(xiě)入到任務(wù)隊(duì)列等待線(xiàn)程處理。 - 只所以稱(chēng)為事件分發(fā)器,是因?yàn)樗鼤?huì)根據(jù)不同的就緒事件,將任務(wù)交由不同的事件處理器去處理。
?? 2)、混合線(xiàn)程模型
- 從Redis 4.0 版本開(kāi)始, Redis 中就開(kāi)始加入了 多線(xiàn)程 元素 。處理客戶(hù)端請(qǐng)求的仍是單線(xiàn)程模型,但對(duì)于一些 比較耗時(shí)但又不影響對(duì)客戶(hù)端的響應(yīng)的操作,就由后臺(tái)其它線(xiàn)程來(lái)處理。
- 例如,持久化、 對(duì) AOF 的
rewrite
、對(duì)失效連接的清理等。
- 例如,持久化、 對(duì) AOF 的
?? 3)、多線(xiàn)程模型
- Redis 6.0版本,才是真正意義上的多線(xiàn)程模型。因?yàn)槠鋵?duì)于客戶(hù)端請(qǐng)求的處理采用的是多線(xiàn)程模型。
- 多線(xiàn)程 IO 模型中的 “多線(xiàn)程” 僅用于接受、解析客戶(hù)端的請(qǐng)求,然后將解析出的請(qǐng)求寫(xiě)入到任務(wù)隊(duì)列。而對(duì)具體任務(wù)(命令)的處理,仍是由主線(xiàn)程處理。
- 這樣做 使得用戶(hù) 無(wú)需考慮 線(xiàn)程安全問(wèn)題,無(wú)需考慮 事務(wù)控制, 無(wú)需考慮像 LPUSH/LPOP 等 命令的執(zhí)行順序問(wèn)題 。
?? 4)、優(yōu)缺點(diǎn)總結(jié) (面試)
(1) 單線(xiàn)程模型
- 優(yōu)點(diǎn):可維護(hù)性高,性能高。不存在并發(fā)讀寫(xiě) 情況,所以也就 不存在執(zhí)行順序的不確定性,不存在線(xiàn)程切換開(kāi)銷(xiāo),不存在死鎖問(wèn)題,不存在 為了數(shù)據(jù)安全而進(jìn)行的 加鎖/解鎖開(kāi)銷(xiāo)。
- 缺點(diǎn):性能會(huì)受到影響,且由于單線(xiàn)程 只能使用一個(gè)處理器(現(xiàn)在都是多處理器),所以會(huì)形成 處理器浪費(fèi)。
內(nèi)存的響應(yīng)時(shí)長(zhǎng)(RT): 100 n s 100ns 100ns
Redis 每秒處理的讀寫(xiě)請(qǐng)求數(shù)量應(yīng)該可以達(dá)到 1 s / 100 n s = 1 0 9 n s / 100 n s = 1 0 7 = 1 k w 1s/100ns = 10^9ns/100ns = 10^7 = 1kw 1s/100ns=109ns/100ns=107=1kw
實(shí)際情況是,Redis 每秒可以處理 8 w ? 11 w 8w - 11w 8w?11w 的讀寫(xiě)請(qǐng)求
(2) 多線(xiàn)程模型
- 優(yōu)點(diǎn):其結(jié)合了 多線(xiàn)程 與 單線(xiàn)程 的優(yōu)點(diǎn),避開(kāi)了它們的所有不足。
- 缺點(diǎn):該模型沒(méi)有顯示不足。如果非要找其不足的話(huà)就是,其并非是一個(gè)真正意義上的 ”多線(xiàn)程”,因?yàn)?真正處理任務(wù)的線(xiàn)程 仍是單線(xiàn)程。所以,其對(duì)性能也是有些影響的。
二、Redis 的安裝與配置
這里是要將 Redis 安裝到 Linux 系統(tǒng)中。
我的是 CentOS7,已經(jīng)關(guān)閉防火墻,安裝好了jdk,以及常用的命令工具。
2.1 Redis 的安裝
?? (2.1.1)、安裝前的準(zhǔn)備工作
1)、安裝 gcc
- 由于 Redis 是由 C/C++ 語(yǔ)言編寫(xiě)的, 而從官網(wǎng)下載的 Redis 安裝包是需要 編譯后 才可安裝的, 所以對(duì)其進(jìn)行編譯就必須要使用相關(guān)編譯器。對(duì)于 C/C++ 語(yǔ)言的編譯器,使用最多的是
gcc
與gcc-c++
,而這兩款編譯器在 CentOS 7 中是沒(méi)有安裝的,所以首先要安裝這兩款編譯器。 -
GCC,
GNU Compiler Collection
, GNU 編譯器集合。
yum -y install gcc gcc-c++
2)、下載 Redis
- Redis 的官網(wǎng)為: http://redis.io
3)、上傳到 Linux
- 將下載好的壓縮包上傳到 Linux 的
/opt/tools
目錄中 。
?? (2.1.2)、安裝 Redis
1)、解壓 Redis
- 將 Redis 解壓到
/opt/apps
目錄中。
tar -zxvf redis-7.2.1.tar.gz -C /opt/apps/
- 進(jìn)入到
/opt/apps
目錄中 再將 Redis 解壓包目錄更名為redis
(不更名也無(wú)所謂,改名是為了簡(jiǎn)化目錄名)。
mv redis-7.2.1/ redis
2)、編譯
- 編譯過(guò)程是根據(jù) Makefile 文件進(jìn)行的,而 Redis 解壓包中已經(jīng)存在該文件了。所以可以直接進(jìn)行編譯 了 。
- 在解壓目錄下,執(zhí)行編譯命令
make
進(jìn)行編譯。
如果沒(méi)有準(zhǔn)備好C語(yǔ)言編譯環(huán)境,make 會(huì)報(bào)錯(cuò) —
Jemalloc/jemalloc.h
:沒(méi)有那個(gè)文件
解決辦法:
- 首先看:
gcc
是否安裝成功,成功后- 運(yùn)行
make distclean
, 將編譯文件清除掉,然后再在 redis 目錄下再次執(zhí)行make
命令(只是編譯好)
- 當(dāng)看到如下提示時(shí),表示編譯成功。
3)、安裝
- 在 Linux 中對(duì)于編譯過(guò)的安裝包執(zhí)行
make install
進(jìn)行安裝。
- 可以看到,共安裝了三個(gè)組件:
redis 服務(wù)器
、客戶(hù)端
與 一個(gè)性能測(cè)試工具benchmark
。
4)、查看 bin 目錄
- 安裝完成后,打開(kāi)
/usr/local/bin
目錄,可以看到出現(xiàn)了很多的文件。
- 通過(guò)
echo $PATH
可以看到,/usr/local/bin
目錄是存在于該 系統(tǒng)變量 中的, 這樣這些命令就可以在任意目錄中執(zhí)行了。
?? (2.1.3)、Redis 啟動(dòng)與停止
1)、前臺(tái)啟動(dòng)
- 在任意目錄執(zhí)行
redis-server
命令即可啟動(dòng) Redis 。 這種啟動(dòng)方式會(huì) 占用當(dāng)前命令行窗口。
- 再開(kāi)啟 一個(gè)會(huì)話(huà)窗口,可以查看到當(dāng)前的 Redis 進(jìn)程,默認(rèn)端口號(hào)為
6379
。
ps aux | grep redis
- 通過(guò) Ctrl + C 命令可以停止 Redis 。
2)、命令式后臺(tái)啟動(dòng)
- 使用
nohup
命令,最后再添加一個(gè)&
符,可以使要啟動(dòng)的程序在后臺(tái)以守護(hù)進(jìn)程方式運(yùn)行。
nohup redis-server &
- 這樣的好處是,進(jìn)程啟動(dòng)后不會(huì)占用一個(gè)會(huì)話(huà)窗口,且其還會(huì)在當(dāng)前目錄,即運(yùn)行啟動(dòng)命令的當(dāng)前目錄中創(chuàng)建一個(gè)
nohup.out
文件用于記錄 Redis 的操作日志。
3)、Redis 的停止
- 通過(guò)
redis-cli shutdown
命令可以停止 Redis 。
4)、配置式后臺(tái)啟動(dòng)
- 使用
nohup
命令可以使 Redis 后臺(tái)啟動(dòng),但每次都要鍵入nohup
與&
符,比較麻煩。 - 可以通過(guò)修改 Linux 中 Redis 的核心配置文件
redis.conf
達(dá)到后臺(tái)啟動(dòng)的目的。 -
redis.conf
文件在 Redis 的安裝目錄根下。
- 將
daemonize
屬性值由no
改為yes
,使 Redis 進(jìn)程以守護(hù)進(jìn)程方式運(yùn)行。
vim redis.conf
:set nu #顯示行號(hào)
/daemonize #搜索daemonize
修改后再啟動(dòng) Redis ,就無(wú)需再鍵入
nohup
與 符&
了,但必須要指定啟動(dòng)所使用的 Redis配置文件。 這是為什么呢?
- 使用
nohup redis-server &
命令啟動(dòng) Redis 時(shí),啟動(dòng)項(xiàng)中已經(jīng)設(shè)置好了 Redis 各個(gè)參數(shù)的默認(rèn)值, Redis 會(huì)按照這些設(shè)置的參數(shù)進(jìn)行啟動(dòng)。但這些參數(shù)是可以在配置文件中進(jìn)行修改的,修改后,需要在啟動(dòng)命令中指定要加載的配置文件,這樣,配置文件中的參數(shù)值將覆蓋原默認(rèn)值。- Redis 已經(jīng)給我們提供好了配置文件模板,是 Redis 安裝目錄的根目錄下的
redis.conf
文件。由于剛剛對(duì)redis.conf
配置文件做了修改,所以在開(kāi)啟 Redis 時(shí)需要顯示指出要加載的配置文件。配置文件應(yīng)緊跟在redis-server
的后面。
redis-server /opt/apps/redis/redis.conf
ps aux | grep redis
2.2 連接前的配置
- Redis 是一個(gè)內(nèi)存數(shù)據(jù)庫(kù)服務(wù)器,就像 MySQL 一樣,對(duì)其操作也需要通過(guò) 客戶(hù)端 進(jìn)行。
- 若要使 遠(yuǎn)程主機(jī)上的客戶(hù)端 能夠連接并訪(fǎng)問(wèn)到 服務(wù)端的 Redis ,則服務(wù)端首先要做如下配置。
?? (2.2.1)、綁定客戶(hù)端 IP
- Redis 可以通過(guò)修改配置文件來(lái)限定可以訪(fǎng)問(wèn)自己的 客戶(hù)端 IP 。
- 以上設(shè)置后,只允許當(dāng)前主機(jī)訪(fǎng)問(wèn)當(dāng)前的 Redis ,其它主機(jī)均不可訪(fǎng)問(wèn)。 所以,如果不想限定訪(fǎng)問(wèn)的客戶(hù)端,只需要將該行 注釋掉 即可。
?? (2.2.2)、關(guān)閉保護(hù)模式
- 默認(rèn)保護(hù)模式是開(kāi)啟的。 其只允許本機(jī)的客戶(hù)端訪(fǎng)問(wèn), 即只允許自己訪(fǎng)問(wèn)自己。但生產(chǎn)中應(yīng)該關(guān)閉, 以確保其它客戶(hù)端可以連接 Redis 。
#命令模式下輸入
:noh #去掉搜索出來(lái)的黃標(biāo)
?? (2.2.3)、設(shè)置訪(fǎng)問(wèn)密碼
- 為 Redis 設(shè)置訪(fǎng)問(wèn)密碼,可以對(duì)要讀 寫(xiě) Redis 的用戶(hù)進(jìn)行身份驗(yàn)證。沒(méi)有密碼的用戶(hù)可以登錄 Redis ,但無(wú)法訪(fǎng)問(wèn)。
1)、密碼設(shè)置
- 訪(fǎng)問(wèn)密碼的設(shè)置位置在
redis.conf
配置文件中。默認(rèn)是被注釋掉的,沒(méi)有密碼。
- 沒(méi)有通過(guò)密碼登錄的用戶(hù),無(wú)法讀/寫(xiě)Redis 。
2)、使用密碼
- 對(duì)于密碼的使用,有兩種方式:登錄時(shí)未使用密碼,則訪(fǎng)問(wèn)時(shí)先輸入密碼;登錄時(shí)直接使用密碼登錄,訪(fǎng)問(wèn)時(shí)無(wú)需再輸入密碼。
-
- A、 登錄時(shí)未使用密碼
-
- B、 登錄時(shí)使用密碼
-
- C、 退出時(shí)使用密碼
3)、注意
- 為了方便后面的學(xué)習(xí),我們這里就 不設(shè)置訪(fǎng)問(wèn)密碼了,直接將其 注釋掉 即可。
?? (2.2.4)、禁止 / 重命名命令
- 后面要學(xué)習(xí)兩個(gè)非常危險(xiǎn)的命令:
flushal
與flushdb
。- 它們都是用于直接刪除整個(gè) Redis 數(shù)據(jù)庫(kù)的。若讓用戶(hù)可以隨便使用它們,可能會(huì)危及數(shù)據(jù)安全。
- Redis 可以通過(guò)修改配置文件來(lái)禁止使用這些命令,或重命名這些命令。
- 以下配置 ,禁用了
flushall 與 flushdb
命令。
當(dāng)然,在學(xué)習(xí)過(guò)程中暫時(shí)不禁用它們。
?? (2.2.5)、啟動(dòng) Redis
- 當(dāng)然,若要使客戶(hù)端能夠連接 Redis,則必須開(kāi)啟服務(wù)端的 Redis 。
redis-server /opt/apps/redis/redis.conf
2.3 Redis 客戶(hù)端分類(lèi)
Redis 客戶(hù)端也像 MySQL 客戶(hù)端一樣有多種類(lèi)型:命令行
客戶(hù)端、圖形界面
客戶(hù)端、 Java代碼
客戶(hù)端。
?? (2.3.1)、命令行客戶(hù)端
- Redis 提供了基本的命令行客戶(hù)端。打開(kāi)命令行客戶(hù)端的命令為
redis-cli
。
-
-h
:指定要連接的 Redis 服務(wù)器的 IP 。 -
-p
:指定要連接的 Redis 的 端口號(hào)。
若連接的是本機(jī)Redis ,且端口號(hào)沒(méi)有改變,保持默認(rèn)的 6379
,則 -h
與 -p
選項(xiàng)可以省略不寫(xiě)。
?? (2.3.2)、圖形界面客戶(hù)端
1)、Redis Desktop Manager(下面演示使用該客戶(hù)端)
- Redis 的圖形界面客戶(hù)端很多, 其中較出名的是 Redis Desktop Manager 的客戶(hù)端。 不過(guò),該軟件原來(lái)是免費(fèi)軟件, 從 0.8.8 版本 后變?yōu)榱松虡I(yè)化收費(fèi)軟件。
- 官網(wǎng)為: https://resp.app/(原來(lái)是 http://redisdesktop.com )。
百度網(wǎng)盤(pán)鏈接( 0.8.8版本):https://pan.baidu.com/s/1xnmm4TMuNd8eqslJ0rRm9A?pwd=e316
提取碼:e316
2)、RedisPlus
- RedisPlus 是為 Redis 可視化管理開(kāi)發(fā)的一款開(kāi)源免費(fèi)的桌面客戶(hù)端軟件,支持 Windows 、Linux 、 Mac 三大系統(tǒng)平臺(tái), RedisPlus 提供更加高效、方便、快捷的使用體驗(yàn),有著更加現(xiàn)代化的用戶(hù)界面風(fēng)格。
- RedisPlus的官網(wǎng)地址為 https://gitee.com/MaxBill/RedisPlus 。
?? (2.3.3)、Java 代碼客戶(hù)端
- 所謂 Java 代碼客戶(hù)端就是一套操作 Redis 的 API ,其作用就像 JDBC 一樣,所以 Java 代碼客戶(hù)端其實(shí)就是一個(gè)或多個(gè) Jar 包,提供了對(duì) Redis 的操作接口。
- 對(duì) Redis 操作的 API 很多 ,例如
jdbc-redis
、jredis
等 ,但最常用也是最有名的是Jedis
。
2.4 Redis 配置文件詳解
- Redis 的核心配置文件
redis.conf
在安裝根目錄下,默認(rèn)包含 2000 多行。 這些內(nèi)容根據(jù)功能被劃分為了很多部分。下面將一些 重要部分 進(jìn)行介紹。
學(xué)習(xí)的過(guò)程有問(wèn)題可以:1、查閱官方文檔;2、讀英文注釋?zhuān)?、看源碼
?? (2.4.1)、基礎(chǔ)說(shuō)明
這部分主要是給出一些說(shuō)明,包含三部分意思:
- 第 1-6 行用于說(shuō)明,如果要 啟動(dòng) Redis ,需要指出 配置文件的路徑。
- 第 8-16 行用于說(shuō)明當(dāng)前配置文件中可以使用的的 容量單位 及 意義。
- 第 18 行用于說(shuō)明這些 容量單位 沒(méi)有大小寫(xiě)之分。
?? (2.4.2)、includes
指定要在當(dāng)前配置文件中包含的配置文件。 這樣做的目的主要是便于 配置信息管理:
- 可以將 不同場(chǎng)景 的配置都進(jìn)行 單獨(dú)定義,
- 然后在當(dāng)前 核心配置文件 中根據(jù) 不同場(chǎng)景 選擇包含進(jìn)不同的配置文件。
?? (2.4.3)、modules
- Redis 配置文件中可以通過(guò) 加載 不同的第三方模塊,來(lái)增強(qiáng)、擴(kuò)展 Redis 的功能。
?? (2.4.4)、network
Network 配置模塊是 比較重要的部分,主要進(jìn)行網(wǎng)絡(luò)相關(guān)的配置。其中較重要的有:
- 1)、bind
指定可以訪(fǎng)問(wèn)當(dāng)前 Redis 服務(wù)的客戶(hù)端 IP ,默認(rèn)只允許本地訪(fǎng)問(wèn),即當(dāng)前 Redis 自己訪(fǎng)問(wèn)自己。
為了使所有其它客戶(hù)端都可訪(fǎng)問(wèn),一般要將其注釋掉。
- 2)、protected-mode
默認(rèn)保護(hù)模式是開(kāi)啟的。 其只允許本機(jī)的客戶(hù)端訪(fǎng)問(wèn),即只允許自己訪(fǎng)問(wèn)自己。
但生產(chǎn)中應(yīng)該關(guān)閉,以確保其它客戶(hù)端可以連接 Redis 。
- 3)、port
Redis 監(jiān)聽(tīng)的連接端口號(hào),默認(rèn) 6379 。
- 4)、tcp-backlog
tcp-backlog
是一個(gè) TCP 連接的隊(duì)列,其主要用于解決 高并發(fā) 場(chǎng)景下客戶(hù)端 慢連接 問(wèn)題。
- 這里設(shè)置的值就是這個(gè)隊(duì)列的長(zhǎng)度。該隊(duì)列與 TCP 連接的 三次握手 有關(guān)。
- 不同的 Linux 內(nèi)核,
backlog
隊(duì)列中存放的元素(客戶(hù)端連接)類(lèi)型是不同的。
- Linux 內(nèi)核 2.2 版本之前 ,該隊(duì)列中存放的是已完成了第一次握手的所有客戶(hù)端連接,其中就包含已完成三次握手的客戶(hù)端連接。當(dāng)然,此時(shí)的
backlog
隊(duì)列中的連接也具有兩種狀態(tài):未完成三次握手的連接狀態(tài)為SYN_RECEIVED
,已完成三次握手的連接狀態(tài)為ESTABLISHED
。只有ESTABLISHED
狀態(tài)的連接才會(huì)被 Redis 處理。- Linux 內(nèi)核 2.2 版本之后 TCP 系統(tǒng)中維護(hù)了兩個(gè)隊(duì)列:
SYN_RECEIVED
隊(duì)列與ESTABLISHED
隊(duì)列。SYN_RECEIVED
隊(duì)列中存放的是未完成三次握手的連接,ESTABLISHED
隊(duì)列中存放的是已完成三次握手的連接。此時(shí)的backlog
就是ESTABLISHED
隊(duì)列。
- 查看 Linux 內(nèi)核版本:
uname -a
# 或
cat /proc/version
TCP 中的
backlog
隊(duì)列的長(zhǎng)度在 Linux 中由內(nèi)核參數(shù)somaxconn
來(lái)決定。所以,在 Redis中該隊(duì)列的長(zhǎng)度由Redis 配置文件設(shè)置 與somaxconn
來(lái)共同決定:取它們中的最小值。
- 查看當(dāng)前 Linux 內(nèi)核中
somaxconn
的值。
cat /proc/sys/net/core/somaxconn
生產(chǎn)環(huán)境下(特別是高并發(fā)場(chǎng)景下),
backlog
的值最好要大一些,否則可能會(huì)影響系統(tǒng)性能。
- 修改
/etc/sysctl.conf
文件,在文件最后添加如下內(nèi)容:net.core.somaxconn=2048
- 修改過(guò)后可以重啟虛擬機(jī),也可以通過(guò)執(zhí)行如下命令來(lái)使新的修改生效。
sysctl -p # 內(nèi)核在運(yùn)行時(shí),動(dòng)態(tài)修改內(nèi)核的運(yùn)行參數(shù)
- 5)、timeout
空閑超時(shí)。當(dāng)客戶(hù)端與 Redis 間的 空閑時(shí)間 超過(guò)該時(shí)長(zhǎng)后,連接自動(dòng)斷開(kāi)。單位秒。默認(rèn)值為 0,表示永遠(yuǎn)不超時(shí) 。
- 6)、tcp-keepalive
該配置主要用于設(shè)置Redis 檢測(cè) 與 其連接的 所有客戶(hù)端 的 存活性時(shí)間間隔,單位秒。一般是在空閑超時(shí)
timeout
設(shè)置為 0 時(shí)進(jìn)行配置。(該方式會(huì)降低服務(wù)端的性能,還待商榷!)
如果連續(xù)檢測(cè) 兩次 都不在,則連接斷開(kāi)。
?? (2.4.5)、general
- 1)、daemonize
該配置可以控制 Redis 啟動(dòng)是否采用守護(hù)進(jìn)程方式,即是否是后臺(tái)啟動(dòng)。
yes
是采用后臺(tái)啟動(dòng)。
- 2)、pidfile
該配置用于指定 Redis 運(yùn)行時(shí)
pid
寫(xiě)入的文件,無(wú)論 Redis 是否采用守護(hù)進(jìn)程方式啟動(dòng),pid
都會(huì)寫(xiě)入到該配置的文件。
注意,如果沒(méi)有配置pid
文件,不同的啟動(dòng)方式,pid
文件的產(chǎn)生效果是不同的:
- 采用 守護(hù)進(jìn)程 方式啟動(dòng)(后臺(tái)啟動(dòng),
daemonize
為yes
):pid
文件為/var/run/redis.pid
。- 采用 前臺(tái)啟動(dòng)(
daemonize
為no
):不生產(chǎn)pid
文件
- 3)、loglevel
配置日志的級(jí)別。 Redis 中共有四個(gè)級(jí)別,由低到高 依次是:
debug
:可以獲取到很多的信息,一般在 開(kāi)發(fā) 和 測(cè)試 時(shí)使用。verbose
:可以獲取到很多不太有用的信息,但不像debug
級(jí)別那么多。notice
:可以獲取到在生產(chǎn)中想獲取到的 適當(dāng)多的信息,默認(rèn)級(jí)別。warning
:只記錄 非常重要 / 關(guān)鍵 的信息。
- 4)、logfile
指定日志文件。如果設(shè)置為空串,則強(qiáng)制將日志記錄到 標(biāo)準(zhǔn)輸出設(shè)備(顯示器)。
如果使用的是 守護(hù)進(jìn)程 啟動(dòng)方式,設(shè)置為空串,則意味著會(huì)將日志發(fā)送到設(shè)備/dev/null
(空設(shè)備)。
- 5)、databases
設(shè)置數(shù)據(jù)庫(kù)的數(shù)量。默認(rèn)數(shù)據(jù)庫(kù)是 0 號(hào)數(shù)據(jù)庫(kù)。
可以使用select dbid
在每個(gè)連接的基礎(chǔ)上選擇一個(gè)不同的數(shù)據(jù)庫(kù),其中dbid
是介于0
和'databases'-1
之間的數(shù)字 。
?? (2.4.6)、security
- 用戶(hù)設(shè)置 ACL 權(quán)限、 Redis 訪(fǎng)問(wèn)密碼 相關(guān)配置。該模塊中最常用的就是
requirepass
屬性。
- 設(shè)置客戶(hù)端訪(fǎng)問(wèn)密碼。注釋掉后則沒(méi)有密碼。
?? (2.4.7)、clients
- 該模塊用于設(shè)置與客戶(hù)端相關(guān)的屬性,其中僅包含一個(gè)屬性
maxclients
。-
maxclients
用于設(shè)置 Redis 可 并發(fā)處理 的客戶(hù)端連接數(shù)量, 默認(rèn)值為 10000 。如果達(dá)到了該最大連接數(shù),則會(huì)拒絕再來(lái)的新連接,并返回一個(gè)異常信息:已達(dá)到最大連接數(shù)。
-
注意,該值不能超過(guò) Linux 系統(tǒng)支持的可打開(kāi)的文件描述符最大數(shù)量閾值。查看該閾值的方式如下。修改該值,可以通過(guò)修改
/etc/secutiry/limits.conf
文件(自己查)。
ulimit -n
?? (2.4.8)、memory management
該配置可以控制 最大可用內(nèi)存 及 相關(guān)內(nèi)容移除 問(wèn)題。
- 1)、maxmemory
將內(nèi)存使用限制設(shè)置為指定的字節(jié)數(shù)。當(dāng)達(dá)到內(nèi)存限制時(shí), Redis 將根據(jù)選擇的逐出策略
maxmemory-policy
嘗試刪除符合條件的key
。
如果不能按照逐出策略移除key
,則會(huì)給寫(xiě)操作命令返回error
,但對(duì)于只讀的命令是沒(méi)有影響的 。
- 2)、maxmamory-policy
該屬性用于設(shè)置,當(dāng)達(dá)到
maxmemory
時(shí), Redis 將如何選擇要移除的內(nèi)容。 當(dāng)然,如果沒(méi)有符合相應(yīng)策略的內(nèi)容要?jiǎng)h除,則在執(zhí)行寫(xiě)入命令時(shí)會(huì)給出errors
的響應(yīng)。 Redis 中共支持 8 種移除策略:
volatile-lru
: 使用近似 LRU (最近最少使用) 算法移除 ,僅適用于設(shè)置了 過(guò)期時(shí)間 的key
。allkeys-lru
: 使用近似 LRU 算法移除,可適用于所有類(lèi)型的key
。volatile-lfu
: 使用近似 LFU (最少使用) 算法移除 ,僅適用于設(shè)置了 過(guò)期時(shí)間 的key
。allkeys-lfu
: 使用近似 LFU 算法移除,可適用于所有類(lèi)型的key
。volatile-random
: 隨機(jī)移除一個(gè)key
, 僅適用于設(shè)置了 過(guò)期時(shí)間 的key
。allkeys-random
: 隨機(jī)移除一個(gè)key
可適用于所有類(lèi)型的key
。volatile-ttl
: 移除距離 過(guò)期時(shí)間 最近的key
。noeviction
: 不移除任何內(nèi)容,只是 在寫(xiě)操作時(shí)返回一個(gè)錯(cuò)誤 ,默認(rèn)值。
- 3)、maxmemory-samples
該屬性用于指定挑選要?jiǎng)h除的
key
的樣本數(shù)量。 樣本的選擇采用的是 LRU 算法,其不能修改。但從樣本中再選擇要移除的key
,則采用的是maxmamory-policy
指定的策略。
- 4)、maxmemory-eviction-tenacity
設(shè)置移除容忍度。數(shù)值越小表示容忍度越低,需要移除的數(shù)據(jù)移除延遲越小;數(shù)值越大表示容忍度越高,需要移除的數(shù)據(jù)移除延遲越大。
?? (2.4.9)、threaded I/O
該配置模塊用于配置 Redis 對(duì) 多線(xiàn)程 IO 模型 的支持。
- 1)、io-threads
該屬性用于指定要啟用多線(xiàn)程IO 模型時(shí),要使用的線(xiàn)程數(shù)量。
查看當(dāng)前系統(tǒng)中包含的 CPU 數(shù)量lscpu
:
- 2)、io-threads-do-reads
該屬性用于啟用 多線(xiàn)程 IO 模型 中的 多線(xiàn)程處理讀請(qǐng)求 的能力。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-738577.html
注:僅供學(xué)習(xí)參考,如有不足,歡迎指正?。。?span toymoban-style="hidden">文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-738577.html
到了這里,關(guān)于Linux 系統(tǒng)安裝 Redis7 —— 超詳細(xì)操作演示!的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!