redis 單實例安裝
阿新 • • 發佈:2018-03-01
onf 算法 log cut scrip 影響 可選值 tag clas
單實例安裝
近些年,由於內存技術的提升、造價的下降,越來越多企業的服務器內存已增加到幾百G。這樣的內存容量給了內存數據庫一個良好的發展環境。 而使用Redis是內存數據庫的一股清流,漸有洪大之勢。下面就來接觸下redis。從安裝開始。
1.1 安裝
1.1.1 安裝
從redis 官網下載:http://download.redis.io/releases/redis-stable.tar.gz
也可以在http://download.redis.io/releases/ 上查找自己想要的版本。
順便將redis的windows客戶端也下載下來: https://github.com/uglide/RedisDesktopManager/releases/
將下載的redis-stable.tar.gz 上傳至服務器,並解壓到指定路徑。
示例:
#tar -xzvf ./redis-stable.tar.gz #cd redis-stable #make # 編譯redis,生成可執行文件 #cd src #make install PREFIX=/usr/ # 將make 操作生成的幾個可執行文件復制至prefix指定的路徑 Hint: It‘s a good idea to run ‘make test‘ ;) INSTALL install INSTALL install INSTALL install INSTALL install INSTALL install #yum install -y tcl # make test 需要tcl 依賴包,版本要求8.5以上 ..... #make test # 共進行46項測試,測試完成,會輸出匯總信息 ......華麗麗的省略線...... Execution time of different units: 2 seconds - unit/printver 2 seconds - unit/type/incr 3 seconds - unit/keyspace 4 seconds - unit/scan 4 seconds - unit/auth 3 seconds - unit/quit 6 seconds - unit/protocol 5 seconds - unit/multi 17 seconds - unit/expire 28 seconds - unit/type/list 38 seconds - integration/aof 65 seconds - unit/other 76 seconds - unit/type/hash 12 seconds - integration/convert-zipmap-hash-on-load 13 seconds - integration/rdb 5 seconds - integration/logging 5 seconds - unit/pubsub 4 seconds - unit/slowlog 99 seconds - unit/type/string 105 seconds - unit/type/set 5 seconds - unit/introspection 35 seconds - integration/psync2-reg 6 seconds - unit/limits 10 seconds - unit/introspection-2 46 seconds - integration/psync2 130 seconds - integration/replication-2 137 seconds - unit/type/zset 50 seconds - unit/scripting 17 seconds - unit/bitfield 152 seconds - unit/sort 149 seconds - unit/aofrw 14 seconds - unit/lazyfree 15 seconds - unit/wait 53 seconds - unit/bitops 187 seconds - unit/dump 58 seconds - unit/memefficiency 197 seconds - integration/replication 103 seconds - unit/maxmemory 197 seconds - integration/replication-psync 234 seconds - unit/type/list-2 238 seconds - unit/type/list-3 237 seconds - integration/replication-3 241 seconds - integration/replication-4 116 seconds - unit/hyperloglog 131 seconds - unit/geo 199 seconds - unit/obuf-limits \o/ All tests passed without errors! Cleanup: may take some time... OK~
1.1.2 了解可執行文件
- redis-benchmark
- redis性能測試工具
- redis-check-aof
- 檢查aof日誌的工具
- redis-check-dump
- 檢查rdb日誌的工具
- redis-cli
- 連接用的客戶端
- redis-server
- redis服務進程
1.2 配置
1.2.1 移動配置文件
redis 解壓後,在解壓路徑裏有 redis.conf 文件。該文件包含了所使用版本中的所有 可用參數,及部署默認配置。一般我們要將該參數存放到一個統一的位置以便日後進行統 一管理。這裏我將該文件存放至/etc/redis 中。文件名將以redis端口號命名。
makedir -p /etc/redis cp /path/redis-stable/redis.conf /etc/redis/6379.conf
下面了解下各參數的意義。並配置相應參數。其中最重要的是bind 和port。 這兩個參數 決定了我們是否可以從外部連接到redis數據庫。
1.2.2 參數配置
不同的版本中參數也不一樣。下面是部分參數的解釋。 在版本中有特別指定的,說明只適用於該版本。 redis 4.0.8 默認參數:
bind 127.0.0.1 # 註意調整此參數值 protected-mode yes # port 6379 # 默認是6379,同一服務器的其他redis一定要修改此參數 tcp-backlog 511 timeout 0 tcp-keepalive 300 daemonize yes supervised no pidfile /var/run/redis_6379.pid loglevel debug logfile "/var/log/redis.log" databases 16 always-show-logo yes save 900 1 save 300 10 save 60 10000 stop-writes-on-bgsave-error yes rdbcompression yes rdbchecksum yes dbfilename dump.rdb dir ./ # 建議調整為絕對路徑。否則容易找不到日誌文件 slave-serve-stale-data yes slave-read-only yes repl-diskless-sync no repl-diskless-sync-delay 5 repl-disable-tcp-nodelay no slave-priority 100 lazyfree-lazy-eviction no lazyfree-lazy-expire no lazyfree-lazy-server-del no slave-lazy-flush no appendonly no appendfilename "appendonly.aof" appendfsync everysec no-appendfsync-on-rewrite no auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb aof-load-truncated yes aof-use-rdb-preamble no lua-time-limit 5000 slowlog-log-slower-than 10000 slowlog-max-len 128 latency-monitor-threshold 0 notify-keyspace-events "" hash-max-ziplist-entries 512 hash-max-ziplist-value 64 list-max-ziplist-size -2 list-compress-depth 0 set-max-intset-entries 512 zset-max-ziplist-entries 128 zset-max-ziplist-value 64 hll-sparse-max-bytes 3000 activerehashing yes client-output-buffer-limit normal 0 0 0 client-output-buffer-limit slave 256mb 64mb 60 client-output-buffer-limit pubsub 32mb 8mb 60 hz 10 aof-rewrite-incremental-fsync yes
參數 | 默認值 | 釋義 | 示例 | 版本 |
---|---|---|---|---|
daemonize | no | 是否以守護進程方式啟動。默認no。 | daemonize no | |
protected-mode | yes | 當開啟安全保護時,假如bind和masterauth都沒有設置 | protected-mode no | |
redis 只允許本地連接。 | ||||
pidfile | /var/run/redis.pid | 以守護進程方式啟動時,會把pid 寫入指定文件 | pidfile /var/run/redis.pid | |
port | 6379 | redis 默認監聽端口 | port 6379 | |
bind | 127.0.0.1 | 綁定本機IP,用以接受外部連接 | bind 127.0.0.1 | |
tcp-backlog | 511 | tcp連接隊列排隊數,與/proc/sys/net/core/somaxconn | ||
兩者取最小值。 | ||||
timeout | 300 | 客戶端連接空閑多久後,redis要自動關閉該連接 | timeout 300 | |
loglevel | verbose | 日誌信息記錄級別。debug,verbose,notice,warning | loglevel verbose | |
logfile | stdout | 日誌文件 | logfile stdout | |
databases | 0 | 設置數據庫的數量, 一般設置16個 | databases 16 | |
save | 900 1 | 格式為save <seconds> <changes> | ||
300 10 | 指定達到多長時間或者達到變更的次數後將數據同步 | save 900 1 | ||
60 10000 | 到數據文件,可以多個條件共同起作用。默認提供了 | save 300 10 | ||
3個條件。 | save 60 10000 | |||
rdbcompression | yes | 存儲至本地數據庫時是否啟用壓縮。REDIS使用的是 | ||
LZF壓縮。啟用壓縮後,CPU消耗會增加。如果為了節 | ||||
省CPU消耗,可以將該選項設置為NO。但是會導致數 | ||||
據庫文件變大 | ||||
dffilename | dump.rdb | 指定本地數據庫文件名。 | dbfilename dump.rdb | |
dir | ./ | 本地數據文件存放路徑。默認是當前路徑。 | dir ./ | |
slaveof | 設置當本機為slav服務時,設置master服務的IP地 | |||
址及端口,在Redis啟動時,它會自動從master進行 | ||||
數據同步,格式: slaveof <masterip> <masterport> | ||||
默認此參數不啟用。 | ||||
masterauth | 格式:masterauth <master-password> | |||
當master服務設置了密碼保護時,需要此參數指定密碼 | ||||
slave-serve-stale-data | yes | 當從庫與主庫斷開連接,或者正在數據同步,根據此參 | ||
數設置的不同值,從庫對客戶端的響應方式不同。 | ||||
當設置為yes時,從庫依舊可以響應客戶端請求,只是可 | ||||
能沒有日期數據,或者沒有數據(比如第一次同步). | ||||
當設置為No時,從庫除了對info 和slaveinfo 兩個命令 | ||||
做出反饋,其他客戶端請求全部反饋"SYNC with master | ||||
in progress" | ||||
reuqirepass | 格式 requirepass | |||
當設置了此參數後,客戶端在連接時需要通過 | ||||
auth <password> 來提供密碼。默認關閉 | ||||
maxclients | 同一時間最大客戶端連接數。默認不做配置。 | maxclients 10000 | ||
Redis允許最大連接數為Redis進程可以打開的最大文件 | ||||
件描述符數。如果設置為0,則表示不限制。當客戶端 | ||||
連接數到達參數值時,redis會拒絕新的連接 並向客戶 | ||||
端返回max number of clients reached. | ||||
maxmemory | 單位bytes. 默認未做配置。 | |||
當數據占用空間達到此配置的最大值時,redis先嘗試 | ||||
清除憶到期或者即將到期的Key,通過此方法處理後,仍 | ||||
然到達最大內存配置,將無法進行寫入操作。Redis | ||||
會將key保存在內存中,而value 保存在swap中 | ||||
appendonly | no | Redis 默認情況下是異步的把數據寫入磁盤。如果不開 | ||
啟,可能會在斷電時導致一段時間內的數據丟失。 | appendonly yes | |||
開啟此參數可以避免數據丟失,配合appendfilename | ||||
appendfilename | "appendonly.aof" | 日誌文件名 | appendfilename "appendonly.aof" | |
appendfsync | everysec | 更新日誌方式,共有3個可選值 | ||
no: 等操作系統進行數據緩存同步到磁盤(快) | appendfsync everysec | |||
always:更新操作後手動調用fsync()將數據寫到磁盤(慢 | ||||
everysec:表示每秒同步一次(折衷,默認值) | ||||
vm-enabled | no | 指定是否啟用虛擬內存機制。VM機制將數據分頁存放。 | vm-enabled no | 3 |
由Redis將訪問量較少的頁 swap 到磁盤上。訪問多的頁 | ||||
由磁盤自動換到內存。 | ||||
vm-swap-file | /tmp/redis.swap | 當vm-enabled 設置為yes時,需要指定swap文件 | vm-swap-file /tmp/redis.swap | 3 |
vm-max-memory | 0 | 將 vm-max-memory空間使用完畢,新插入數據存入swap | vm-max-memory 0 | 3 |
無論vm-max-memory設置多少,所有索引數據都(KEYS) | ||||
是存儲在內存中的。當設置為0時,所有value都在swap | ||||
vm-page-size | 32 | 單位bytes. | ||
swap 的管理與內存是類似的,使用page的方式管理。 | vm-page-size 32 | 3 | ||
此參數設置page的大小。此參數受數據大小影響。單個 | ||||
數據大,就需要較大的頁。 | ||||
vm-pages | 設置最多能交換保存多少個頁到磁盤.可以算出可以交 | |||
換出來的最大大小為vm-page-size * vm-pages,這兩個 | ||||
參數也決定了磁盤上swap文件最大占用空間。 | ||||
vm-max-threads | 4 | 設置訪問swap文件的線程數,最好不要超過機器的核數, | vm-max-threads 4 | 3 |
如果設置為0,那麽所有對swap文件的操作都是串行的 | ||||
可能會造成比較長時間的延遲。默認值為4 | ||||
glueoutputbuf | yes | 設置在向客戶端應答時,是否把較小的包合並為一個包 | glueoutputbuf yes | 3 |
發送,默認是yes | ||||
hash-max-zipmap-entries | 64 | 在超過一定的數量或者最大的元素超過某一臨界值時, | hash-max-zipmap-entries 64 | 3 |
hash-max-zipmap-value | 512 | 采用一種特殊的哈希算法 | hash-max-zipmap-value 512 | 3 |
activerehashing | yes | 指定是否激活重圍哈希,默認開啟 | activerehashing yes | |
include | 包含其他配置文件。 | include /path/to/local.conf |
1.3 啟停服務
1.3.1 啟動
redis 啟動的命令非常簡單.
redis-server /etc/redis/6379.conf
啟動時,會有如下提示:
582:C 28 Feb 03:03:42.226 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo 582:C 28 Feb 03:03:42.226 # Redis version=4.0.8, bits=64, commit=00000000, modified=0, pid=582, just started 582:C 28 Feb 03:03:42.227 # Configuration loaded 582:M 28 Feb 03:03:42.228 * Increased maximum number of open files to 10032 (it was originally set to 1024). _._ _.-``__ ‘‘-._ _.-`` `. `_. ‘‘-._ Redis 4.0.8 (00000000/0) 64 bit .-`` .-```. ```\/ _.,_ ‘‘-._ ( ‘ , .-` | `, ) Running in standalone mode |`-._`-...-` __...-.``-._|‘` _.-‘| Port: 6379 | `-._ `._ / _.-‘ | PID: 582 `-._ `-._ `-./ _.-‘ _.-‘ |`-._`-._ `-.__.-‘ _.-‘_.-‘| | `-._`-._ _.-‘_.-‘ | http://redis.io `-._ `-._`-.__.-‘_.-‘ _.-‘ |`-._`-._ `-.__.-‘ _.-‘_.-‘| | `-._`-._ _.-‘_.-‘ | `-._ `-._`-.__.-‘_.-‘ _.-‘ `-._ `-.__.-‘ _.-‘ `-._ _.-‘ `-.__.-‘ 582:M 28 Feb 03:03:42.229 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128. 582:M 28 Feb 03:03:42.229 # Server initialized 582:M 28 Feb 03:03:42.229 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add ‘vm.overcommit_memory = 1‘ to /etc/sysctl.conf and then reboot or run the command ‘sysctl vm.overcommit_memory=1‘ for this to take effect. 582:M 28 Feb 03:03:42.229 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command ‘echo never > /sys/kernel/mm/transparent_hugepage/enabled‘ as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled. 582:M 28 Feb 03:03:42.229 * DB loaded from disk: 0.000 seconds 582:M 28 Feb 03:03:42.229 * Ready to accept connections
1.3.2 設置開機自啟動
echo redis-server /etc/redis/6379.conf >> /etc/rc.local
1.3.3 停止
redis-cli shutdown 或者 pkill redis-server
redis 單實例安裝