一、簡介Redis是一種高級key-value資料庫,數據可以持久化,支持的數據類型很豐富,有字元串,哈希,鏈表,集合和有序集合5種數據類型Redis支持在伺服器端計算集合的並,交和補集(difference)等,還支持多種排序功能,所以Redis也可以被看成是一個數據結構伺服器Redis的所有數據...
一、簡介
-
Redis是一種高級key-value資料庫,數據可以持久化,支持的數據類型很豐富,有字元串,哈希,鏈表,集合和有序集合5種數據類型
-
Redis支持在伺服器端計算集合的並,交和補集(difference)等,還支持多種排序功能,所以Redis也可以被看成是一個數據結構伺服器
-
Redis的所有數據都是保存在記憶體中,然後不定期的通過非同步方式保存到磁碟上(半持久化模式);也可以把每一次數據變化都寫入到一個append only file(aof)裡面(全持久化模式)
二、Redis安裝
安裝tclsh
Redis在make test有使用到tclsh對Redis進行測試,所有需要想將tclsh安裝好,如果沒有安裝的話,在make test過程中會出現如下錯誤:
# wget http://hivelocity.dl.sourceforge.net/project/tcl/Tcl/8.5.14/tcl8.5.14-src.tar.gz # tar xzvf tcl8.5.14-src.tar.gz # cd tcl8.5.14-src/unix #windows進入tcl8.5.14-src/win # ./configure --prefix=/app/soft/tcl8.5.11 --enable-64bit #enable-64bit對64系統生效 # make && make installan
安裝完成之後需要將tclsh添加到PATH中,並使其生效
# vim /etc/profile ··· PATH=/app/soft/tcl8.5.11/bin:$PATH export PATH ··· # source /etc/profile
安裝Redis
# cd /usr/loca/src # wget http://redis.googlecode.com/files/redis-2.6.14.tar.gz # tar xzvf redis-2.6.14.tar.gz # cd redis-2.6.14 # make # make test #檢查Redis是否已經make成功,這個步驟可以省略,不過建議還是使用 # make PREFIX=/usr/local/redis install #預設安裝路徑:/usr/local
三、配置Redis
Redis.conf
# cat redis.conf|grep -v ^# daemonize yes #開啟守護進程 pidfile /var/run/redis.pid #設置PID文件 port 6579 #設置Redis埠 timeout 300 tcp-keepalive 0 loglevel verbose #設置日誌級別 syslog-enabled yes #開啟syslog syslog-ident redis #設置Redis在syslog裡面的標識符 syslog-facility local6 #設置Redis在syslog使用的設備 databases 5 save 900 1 #Redis硬碟數據保存設置 save 300 10 save 60 10000 stop-writes-on-bgsave-error yes rdbcompression yes rdbchecksum yes dbfilename dump.rdb #Redis數據保存文件 dir ./ #Redis數據保存目錄 slaveof 183.232.10.64 6579 #開啟主從同步,設置Master的IP及埠 masterauth Dmx#xYkJ0Z8 #設置主從同步密碼 slave-serve-stale-data yes slave-read-only yes repl-disable-tcp-nodelay no slave-priority 100 requirepass Dmx#xYkJ0Z8 #設置Redis認證密碼 maxclients 10000 #設置客戶端連接數 maxmemory 512M #設置內容大小 appendonly no #設置是否開啟AOF模式 appendfsync everysec no-appendfsync-on-rewrite no auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb lua-time-limit 5000 slowlog-log-slower-than 10000 slowlog-max-len 128 hash-max-ziplist-entries 512 hash-max-ziplist-value 64 list-max-ziplist-entries 512 list-max-ziplist-value 64 set-max-intset-entries 512 zset-max-ziplist-entries 128 zset-max-ziplist-value 64 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
日誌設置
通過Redis日誌的配置可以知道,這次設置Redis日誌是通過syslog來統一管理的,然後再通過logrotate來進行日誌輪循,具體配置如下:
##syslog配置 # cat /etc/syslog.conf ··· # Log anything (except mail) of level info or higher. # Don't log private authentication messages! *.info;mail.none;authpriv.none;cron.none;redis.none /var/log/messages #redis.none去除Redis的日誌輸出到message ··· # Save redis messages also to redis.log local6.* /var/log/redis.log #設置Redis日誌輸入到/var/log/redis.log文件 ··· ##logrotate配置 # cat /etc/logrotate.d/redis /var/log/redis.log { missingok weekly notifempty rotate 15 size 200M sharedscripts postrotate /usr/bin/killall -HUP syslogd endscript }
logrotate配置文檔的意思為:每周檢查一次Redis日誌文件,大小超過200M就輪循一次,保存15個輪循日誌文件。
內核設置
因為Redis需要使用到記憶體,所有最好配置一個內核參數,否則有可能會報警,具體如下:
# cat /etc/sysctl.conf ··· vm.overcommit_memory = 1 #指定內核針對記憶體分配的策略,其值可以是0,1,2 ··· # 0 → 表示內核將檢查是否有足夠的可用記憶體供應用進程使用;如果有足夠的可用記憶體,記憶體申請允許;否則,記憶體申請失敗,並把錯誤返回給應用進程。 # 1 → 表示內核允許分配所有的物理記憶體,而不管當前的記憶體狀態如何 # 2 → 表示內核允許分配超過所有物理記憶體和交換空間總和的記憶體 # sysctl -p
四、Redis啟動與關閉
啟動腳本
#!/bin/sh # # redis - this script starts and stops the redis-server daemon # # chkconfig: - 85 15 # description: Redis is a persistent key-value database # processname: redis-server # config: /etc/redis/redis.conf # config: /etc/sysconfig/redis # pidfile: /var/run/redis.pid # Source function library. . /etc/rc.d/init.d/functions # Source networking configuration. . /etc/sysconfig/network # Check that networking is up. [ "$NETWORKING" = "no" ] && exit 0 source /etc/init.d/functions redis="/usr/local/redis/src/redis-server" prog=$(basename $redis) REDIS_CONF_FILE="/usr/local/redis/redis.conf" PIDFILE="/var/run/redis.pid" [ -f /etc/sysconfig/redis ] && . /etc/sysconfig/redis lockfile=/var/lock/subsys/redis start() { if [ -e $PIDFILE ];then echo "$desc already running...." exit 1 fi echo -n $"Starting $prog: " daemon $redis $REDIS_CONF_FILE RETVAL=$? echo [ $RETVAL -eq 0 ] && touch /var/lock/subsys/$prog return $RETVAL } stop() { echo -n $"Stopping $prog: " killproc $prog -QUIT retval=$? echo [ $retval -eq 0 ] && rm -f /var/lock/subsys/$prog $PIDFILE return $retval } restart() { stop start } reload() { echo -n $"Reloading $prog: " killproc $redis -HUP RETVAL=$? echo } force_reload() { restart } rh_status() { status $prog } rh_status_q() { rh_status >/dev/null 2>&1 } case "$1" in start) rh_status_q && exit 0 $1 ;; stop) rh_status_q || exit 0 $1 ;; restart|configtest) $1 ;; reload) rh_status_q || exit 7 $1 ;; force-reload) force_reload ;; status) rh_status ;; condrestart|try-restart) rh_status_q || exit 0 ;; *) echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}" exit 2 esac
五、Redis服務驗證
./redis-cli 登錄,然後再通過ping、info、命令查看redis情況,具體示例如下:
# ./redis-cli -h localhost -p 6579 -a password redis localhost:6579> info