1. 程式人生 > >redis 單實例安裝

redis 單實例安裝

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 單實例安裝