Redis環境安裝與配置
Window 下安裝
下載地址:https://github.com/MSOpenTech/redis/releases。
下載到的Redis支援32bit和64bit。根據自己實際情況選擇,將下載檔案拷貝到自定義碟符,解壓後將目錄取名redis, 如 D:\reids
直接執行redis-server.exe,這會載入預設配置。想要載入自己的配置需要開啟一個cmd視窗 使用cd命令切換目錄到 D:\redis 執行 redis-server.exe redis.windows.conf 。
如果想方便的話,可以把redis的路徑加到系統的環境變數裡,這樣就省得再輸路徑了,後面的那個redis.windows.conf即為配置檔案。輸入之後,會顯示如下介面:
再另啟一個cmd視窗,原來的不要關閉,不然就無法訪問服務端了。
切換到redis目錄下執行 redis-cli.exe -h 127.0.0.1 -p 6379 。
設定鍵值對 set myKey abc
取出鍵值對 get myKey
Linux 下安裝
$ wget http://download.redis.io/releases/redis-3.2.8.tar.gz
$ tar xzf redis-3.2.8.tar.gz
$ cd redis-3.2.8
$ make
make完後 redis-3.2.8目錄下會出現編譯後的redis服務程式redis-server,還有用於測試的客戶端程式redis-cli,兩個程式位於安裝目錄 src 目錄下:
下面啟動redis服務.
$ cd src
$ ./redis-server
注意這種方式啟動redis 使用的是預設配置。也可以通過啟動引數告訴redis使用指定配置檔案使用下面命令啟動。
$ cd src
$ ./redis-server redis.conf
redis.conf是一個預設的配置檔案。我們可以根據需要使用自己的配置檔案。
啟動redis服務程序後,就可以使用測試客戶端程式redis-cli和redis服務互動了。 比如:
$ cd src
$ ./redis-cli
redis> set foo bar
OK
redis> get foo
"bar"
Ubuntu 下安裝
在 Ubuntu 系統安裝 Redi 可以使用以下命令:
$sudo apt-get update
$sudo apt-get install redis-server
啟動 Redis
$ cd src
$ ./redis-server
檢視 redis 是否啟動
$./redis-cli
以上命令將開啟以下終端:
redis 127.0.0.1:6379>
127.0.0.1 是本機 IP ,6379 是 redis 服務埠。現在我們輸入 PING 命令。
redis 127.0.0.1:6379> ping
PONG
以上說明我們已經成功安裝了redis。
在 Cloud Studio 中執行 Redis
下面我們介紹如何在 Cloud Studio 中安裝、使用 Redis:
- step1:訪問 Cloud Studio,註冊/登入賬戶。
- step2:在右側的執行環境選單選擇:"ubuntu"
- step3:在下方的終端執行命令:
sudo apt-get update sudo apt-get install redis-server
- step4:啟動 Redis:
redis-server
- step5:檢視 redis 是否啟動:
redis-cli
以上命令將開啟以下終端:
redis 127.0.0.1:6379>
127.0.0.1 是本機 IP ,6379 是 redis 服務埠。現在我們輸入 PING 命令:
redis 127.0.0.1:6379> ping PONG
以上說明我們已經成功安裝了 redis。
Redis 配置
Redis 的配置檔案位於 Redis 安裝目錄下,檔名為 redis.conf。
你可以通過 CONFIG 命令檢視或設定配置項。
Redis CONFIG 命令格式如下:
redis 127.0.0.1:6379> CONFIG GET CONFIG_SETTING_NAME
例項
redis 127.0.0.1:6379> CONFIG GET loglevel
1) "loglevel"
2) "notice"
使用 * 號獲取所有配置項:
127.0.0.1:6379> CONFIG GET *
1) "dbfilename"
2) "dump.rdb"
3) "requirepass"
4) ""
5) "masterauth"
6) ""
7) "unixsocket"
8) ""
9) "logfile"
10) ""
11) "pidfile"
12) ""
13) "slave-announce-ip"
14) ""
15) "maxmemory"
16) "0"
17) "maxmemory-samples"
18) "5"
19) "timeout"
20) "0"
21) "auto-aof-rewrite-percentage"
22) "100"
23) "auto-aof-rewrite-min-size"
24) "67108864"
25) "hash-max-ziplist-entries"
26) "512"
27) "hash-max-ziplist-value"
28) "64"
29) "list-max-ziplist-size"
30) "-2"
31) "list-compress-depth"
32) "0"
33) "set-max-intset-entries"
34) "512"
35) "zset-max-ziplist-entries"
36) "128"
37) "zset-max-ziplist-value"
38) "64"
39) "hll-sparse-max-bytes"
40) "3000"
41) "lua-time-limit"
42) "5000"
43) "slowlog-log-slower-than"
44) "10000"
45) "latency-monitor-threshold"
46) "0"
47) "slowlog-max-len"
48) "128"
49) "port"
50) "6379"
51) "tcp-backlog"
52) "511"
53) "databases"
54) "16"
55) "repl-ping-slave-period"
56) "10"
57) "repl-timeout"
58) "60"
59) "repl-backlog-size"
60) "1048576"
61) "repl-backlog-ttl"
62) "3600"
63) "maxclients"
64) "10000"
65) "watchdog-period"
66) "0"
67) "slave-priority"
68) "100"
69) "slave-announce-port"
70) "0"
71) "min-slaves-to-write"
72) "0"
73) "min-slaves-max-lag"
74) "10"
75) "hz"
76) "10"
77) "cluster-node-timeout"
78) "15000"
79) "cluster-migration-barrier"
80) "1"
81) "cluster-slave-validity-factor"
82) "10"
83) "repl-diskless-sync-delay"
84) "5"
85) "tcp-keepalive"
86) "300"
87) "cluster-require-full-coverage"
88) "yes"
89) "no-appendfsync-on-rewrite"
90) "no"
91) "slave-serve-stale-data"
92) "yes"
93) "slave-read-only"
94) "yes"
95) "stop-writes-on-bgsave-error"
96) "yes"
97) "daemonize"
98) "no"
99) "rdbcompression"
100) "yes"
101) "rdbchecksum"
102) "yes"
103) "activerehashing"
104) "yes"
105) "protected-mode"
106) "no"
107) "repl-disable-tcp-nodelay"
108) "no"
109) "repl-diskless-sync"
110) "no"
111) "aof-rewrite-incremental-fsync"
112) "yes"
113) "aof-load-truncated"
114) "yes"
115) "maxmemory-policy"
116) "noeviction"
117) "loglevel"
118) "notice"
119) "supervised"
120) "no"
121) "appendfsync"
122) "everysec"
123) "syslog-facility"
124) "local0"
125) "appendonly"
126) "no"
127) "dir"
128) "/root/redis-3.2.8"
129) "save"
130) "3600 1 300 100 60 10000"
131) "client-output-buffer-limit"
132) "normal 0 0 0 slave 268435456 67108864 60 pubsub 33554432 8388608 60"
133) "unixsocketperm"
134) "0"
135) "slaveof"
136) ""
137) "notify-keyspace-events"
138) ""
139) "bind"
140) ""
編輯配置
你可以通過修改 redis.conf 檔案或使用 CONFIG set 命令來修改配置。
CONFIG SET 命令基本語法:
redis 127.0.0.1:6379> CONFIG SET CONFIG_SETTING_NAME NEW_CONFIG_VALUE
例項
redis 127.0.0.1:6379> CONFIG SET loglevel "notice"
OK
redis 127.0.0.1:6379> CONFIG GET loglevel
1) "loglevel"
2) "notice"
引數說明
redis.conf 配置項說明如下:
1. Redis預設不是以守護程序的方式執行,可以通過該配置項修改,使用yes啟用守護程序
daemonize no
2. 當Redis以守護程序方式執行時,Redis預設會把pid寫入/var/run/redis.pid檔案,可以通過pidfile指定
pidfile /var/run/redis.pid
3. 指定Redis監聽埠,預設埠為6379,作者在自己的一篇博文中解釋了為什麼選用6379作為預設埠,因為6379在手機按鍵上MERZ對應的號碼,而MERZ取自義大利歌女Alessia Merz的名字
port 6379
4. 繫結的主機地址
bind 127.0.0.1
5.當 客戶端閒置多長時間後關閉連線,如果指定為0,表示關閉該功能
timeout 300
6. 指定日誌記錄級別,Redis總共支援四個級別:debug、verbose、notice、warning,預設為verbose
loglevel verbose
7. 日誌記錄方式,預設為標準輸出,如果配置Redis為守護程序方式執行,而這裡又配置為日誌記錄方式為標準輸出,則日誌將會發送給/dev/null
logfile stdout
8. 設定資料庫的數量,預設資料庫為0,可以使用SELECT <dbid>命令在連線上指定資料庫id
databases 16
9. 指定在多長時間內,有多少次更新操作,就將資料同步到資料檔案,可以多個條件配合
save <seconds> <changes>
Redis預設配置檔案中提供了三個條件:
save 900 1
save 300 10
save 60 10000
分別表示900秒(15分鐘)內有1個更改,300秒(5分鐘)內有10個更改以及60秒內有10000個更改。
10. 指定儲存至本地資料庫時是否壓縮資料,預設為yes,Redis採用LZF壓縮,如果為了節省CPU時間,可以關閉該選項,但會導致資料庫檔案變的巨大
rdbcompression yes
11. 指定本地資料庫檔名,預設值為dump.rdb
dbfilename dump.rdb
12. 指定本地資料庫存放目錄
dir ./
13. 設定當本機為slav服務時,設定master服務的IP地址及埠,在Redis啟動時,它會自動從master進行資料同步
slaveof <masterip> <masterport>
14. 當master服務設定了密碼保護時,slav服務連線master的密碼
masterauth <master-password>
15. 設定Redis連線密碼,如果配置了連線密碼,客戶端在連線Redis時需要通過AUTH <password>命令提供密碼,預設關閉
requirepass foobared
16. 設定同一時間最大客戶端連線數,預設無限制,Redis可以同時開啟的客戶端連線數為Redis程序可以開啟的最大檔案描述符數,如果設定 maxclients 0,表示不作限制。當客戶端連線數到達限制時,Redis會關閉新的連線並向客戶端返回max number of clients reached錯誤資訊
maxclients 128
17. 指定Redis最大記憶體限制,Redis在啟動時會把資料載入到記憶體中,達到最大記憶體後,Redis會先嚐試清除已到期或即將到期的Key,當此方法處理 後,仍然到達最大記憶體設定,將無法再進行寫入操作,但仍然可以進行讀取操作。Redis新的vm機制,會把Key存放記憶體,Value會存放在swap區
maxmemory <bytes>
18. 指定是否在每次更新操作後進行日誌記錄,Redis在預設情況下是非同步的把資料寫入磁碟,如果不開啟,可能會在斷電時導致一段時間內的資料丟失。因為 redis本身同步資料檔案是按上面save條件來同步的,所以有的資料會在一段時間內只存在於記憶體中。預設為no
appendonly no
19. 指定更新日誌檔名,預設為appendonly.aof
appendfilename appendonly.aof
20. 指定更新日誌條件,共有3個可選值:
no:表示等作業系統進行資料快取同步到磁碟(快)
always:表示每次更新操作後手動呼叫fsync()將資料寫到磁碟(慢,安全)
everysec:表示每秒同步一次(折衷,預設值)
appendfsync everysec
21. 指定是否啟用虛擬記憶體機制,預設值為no,簡單的介紹一下,VM機制將資料分頁存放,由Redis將訪問量較少的頁即冷資料swap到磁碟上,訪問多的頁面由磁碟自動換出到記憶體中(在後面的文章我會仔細分析Redis的VM機制)
vm-enabled no
22. 虛擬記憶體檔案路徑,預設值為/tmp/redis.swap,不可多個Redis例項共享
vm-swap-file /tmp/redis.swap
23. 將所有大於vm-max-memory的資料存入虛擬記憶體,無論vm-max-memory設定多小,所有索引資料都是記憶體儲存的(Redis的索引資料 就是keys),也就是說,當vm-max-memory設定為0的時候,其實是所有value都存在於磁碟。預設值為0
vm-max-memory 0
24. Redis swap檔案分成了很多的page,一個物件可以儲存在多個page上面,但一個page上不能被多個物件共享,vm-page-size是要根據儲存的 資料大小來設定的,作者建議如果儲存很多小物件,page大小最好設定為32或者64bytes;如果儲存很大大物件,則可以使用更大的page,如果不 確定,就使用預設值
vm-page-size 32
25. 設定swap檔案中的page數量,由於頁表(一種表示頁面空閒或使用的bitmap)是在放在記憶體中的,,在磁碟上每8個pages將消耗1byte的記憶體。
vm-pages 134217728
26. 設定訪問swap檔案的執行緒數,最好不要超過機器的核數,如果設定為0,那麼所有對swap檔案的操作都是序列的,可能會造成比較長時間的延遲。預設值為4
vm-max-threads 4
27. 設定在向客戶端應答時,是否把較小的包合併為一個包傳送,預設為開啟
glueoutputbuf yes
28. 指定在超過一定的數量或者最大的元素超過某一臨界值時,採用一種特殊的雜湊演算法
hash-max-zipmap-entries 64
hash-max-zipmap-value 512
29. 指定是否啟用重置雜湊,預設為開啟(後面在介紹Redis的雜湊演算法時具體介紹)
activerehashing yes
30. 指定包含其它的配置檔案,可以在同一主機上多個Redis例項之間使用同一份配置檔案,而同時各個例項又擁有自己的特定配置檔案
include /path/to/local.conf
Redis主從配置
Redis的主從複製功能非常強大,一個master可以擁有多個slave,而一個slave又可以擁有多個slave,如此下去,形成了強大的多級伺服器叢集架構。下面簡單的進行一下配置(我的是linux環境)。
1、上面安裝好的一個Redis作為master,然後在用一個linux系統克隆一份作為slave,並修改其IP為172.24.4.184。
2、修改slave的redis.conf配置檔案:
slaveof 172.24.4.184 6379 (對映到主伺服器上)
也可以通過redis-cli 連線到從節點伺服器,執行下面命令:
slaveof 172.24.4.184 6379
如果master設定了驗證密碼,還需配置masterauth。
這裡可能會遇到一點問題:
Error reply to PING from master: ‘-DENIED Redis is running in protected mode because protected mode is enabled, no bind address was specified, no authentication password is requested to clients.
是說處於保護模式,只能本地連結,我們需要修改配置檔案redis.conf
解決方法很簡單,給主機配置密碼
將# requirepass foobared取消註釋,修改密碼
或者設定 protected-mode no,也可通過命令config set protected-mode no
配置完之後啟動slave的Redis服務,OK,主從配置完成。下面測試一下:
在master和slave分別執行info命令,檢視結果如下:
master:
slave:
參考: