安裝redishtml
下載redis wget http://download.redis.io/releases/redis-3.0.7.tar.gz 解壓redis tar -xvf redis-3.0.7.tar.gz 安裝redis
cd redis-3.0.7
「有可能須要安裝gcc插件:yum install -y gcc 」
make
「若是make有報錯,則執行,沒有報錯就不須要 make MALLOC=libc 」
redis.conf相關參數node
##Redis默認不是以守護進程的方式運行,能夠經過該配置項修改,使用yes啓用守護進程
daemonize no
##當Redis以守護進程方式運行時,Redis默認會把pid寫入/var/run/redis.pid文件,能夠經過pidfile指定
pidfile /var/run/redis.pid
##指定Redis監聽端口,默認端口爲6379
port 6379
# TCP接收隊列長度,受/proc/sys/net/core/somaxconn和tcp_max_syn_backlog這兩個內核參數的影響
tcp-backlog 511
##綁定的主機地址
bind 127.0.0.1
##當 客戶端閒置多長時間後關閉鏈接,若是指定爲0,表示關閉該功能
timeout 300
# 若是非零,則設置SO_KEEPALIVE選項來向空閒鏈接的客戶端發送ACK
tcp-keepalive 60
##指定日誌記錄級別,Redis總共支持四個級別:debug、verbose、notice、warning,默認爲verbose
## debug (大量信息,對開發/測試有用)
## verbose (不少精簡的有用信息,可是不像debug等級那麼多)
## notice (適量的信息,基本上是你生產環境中須要的)
## warning (只有很重要/嚴重的信息會記錄下來)
loglevel verbose
##日誌名
logfile "./redis7003.log"
##設置數據庫的數量,可使用SELECT <dbid>命令在鏈接上指定數據庫id
databases 16
##指定在多長時間內,有多少次更新操做,就將數據同步到數據文件,能夠多個條件配合save <seconds> <changes>
#Redis默認配置文件中提供了三個條件:
save 900 1
save 300 10
save 60 10000
分別表示900秒(15分鐘)內有1個更改,300秒(5分鐘)內有10個更改以及60秒內有10000個更改。
# 默認若是開啓RDB快照(至少一條save指令)而且最新的後臺保存失敗,Redis將會中止接受寫操做
# 這將使用戶知道數據沒有正確的持久化到硬盤,不然可能沒人注意到而且形成一些災難
stop-writes-on-bgsave-error yes
##指定存儲至本地數據庫時是否壓縮數據,默認爲yes,Redis採用LZF壓縮,若是爲了節省CPU時間,能夠關閉該選項,但會致使數據庫文件變的巨大
rdbcompression yes
###指定本地數據庫文件名,默認值爲dump.rdb
dbfilename dump.rdb
###指定本地數據庫存放目錄
dir ./
##設置當本機爲slav服務時,設置master服務的IP地址及端口,在Redis啓動時,它會自動從master進行數據同步
slaveof <masterip> <masterport>
###當master服務設置了密碼保護時,slav服務鏈接master的密碼
masterauth <master-password>
####設置Redis鏈接密碼,若是配置了鏈接密碼,客戶端在鏈接Redis時須要經過AUTH <password>命令提供密碼,默認關閉
requirepass foobared
##你能夠配置salve實例是否接受寫操做。可寫的slave實例可能對存儲臨時數據比較有用(由於寫入salve
##的數據在同master同步以後將很容易被刪除
slave-read-only yes
# 是否在slave套接字發送SYNC以後禁用 TCP_NODELAY?
# 若是你選擇「yes」Redis將使用更少的TCP包和帶寬來向slaves發送數據。可是這將使數據傳輸到slave
# 上有延遲,Linux內核的默認配置會達到40毫秒
# 若是你選擇了 "no" 數據傳輸到salve的延遲將會減小但要使用更多的帶寬
repl-disable-tcp-nodelay no
# slave的優先級是一個整數展現在Redis的Info輸出中。若是master再也不正常工做了,哨兵將用它來
# 選擇一個slave提高=升爲master。
# 優先級數字小的salve會優先考慮提高爲master,因此例若有三個slave優先級分別爲10,100,25,
# 哨兵將挑選優先級最小數字爲10的slave。
# 0做爲一個特殊的優先級,標識這個slave不能做爲master,因此一個優先級爲0的slave永遠不會被
# 哨兵挑選提高爲master
slave-priority 100
##設置同一時間最大客戶端鏈接數,默認無限制,Redis能夠同時打開的客戶端鏈接數爲Redis進程能夠打開的最大文件描述符數,若是設置 maxclients 0,表示不做限制。當客戶端鏈接數到達限制時,Redis會關閉新的鏈接並向客戶端返回max number of clients reached錯誤信息
maxclients 128
##指定Redis最大內存限制,Redis在啓動時會把數據加載到內存中,達到最大內存後,Redis會先嚐試清除已到期或即將到期的Key,當此方法處理 後,仍然到達最大內存設置,將沒法再進行寫入操做,但仍然能夠進行讀取操做。Redis新的vm機制,會把Key存放內存,Value會存放在swap區
maxmemory <bytes>
##最大內存策略:若是達到內存限制了,Redis如何選擇刪除key。你能夠在下面五個行爲裏選:
# volatile-lru -> 根據LRU算法刪除帶有過時時間的key。
# allkeys-lru -> 根據LRU算法刪除任何key。
# volatile-random -> 根據過時設置來隨機刪除key, 具有過時時間的key。
# allkeys->random -> 無差異隨機刪, 任何一個key。
# volatile-ttl -> 根據最近過時時間來刪除(輔以TTL), 這是對於有過時時間的key
# noeviction -> 誰也不刪,直接在寫操做時返回錯誤。
maxmemory-policy volatile-lru
##指定是否在每次更新操做後進行日誌記錄,Redis在默認狀況下是異步的把數據寫入磁盤,若是不開啓,可能會在斷電時致使一段時間內的數據丟失。由於 redis自己同步數據文件是按上面save條件來同步的,因此有的數據會在一段時間內只存在於內存中。默認爲no
appendonly no
###指定更新日誌文件名,默認爲appendonly.aof
appendfilename appendonly.aof
####指定更新日誌條件,共有3個可選值:
no:表示等操做系統進行數據緩存同步到磁盤(快)
always:表示每次更新操做後手動調用fsync()將數據寫到磁盤(慢,安全)
everysec:表示每秒同步一次(折衷,默認值)
appendfsync everysec
##指定是否啓用虛擬內存機制,默認值爲no,簡單的介紹一下,VM機制將數據分頁存放,由Redis將訪問量較少的頁即冷數據swap到磁盤上,訪問多的頁面由磁盤自動換出到內存中(在後面的文章我會仔細分析Redis的VM機制)
vm-enabled no
### 虛擬內存文件路徑,默認值爲/tmp/redis.swap,不可多個Redis實例共享
vm-swap-file /tmp/redis.swap
# 若是AOF的同步策略設置成 "always" 或者 "everysec",而且後臺的存儲進程(後臺存儲或寫入AOF
# 日誌)會產生不少磁盤I/O開銷。某些Linux的配置下會使Redis由於 fsync()系統調用而阻塞好久。
# 注意,目前對這個狀況尚未完美修正,甚至不一樣線程的 fsync() 會阻塞咱們同步的write(2)調用。
#
# 爲了緩解這個問題,能夠用下面這個選項。它能夠在 BGSAVE 或 BGREWRITEAOF 處理時阻止主進程進行fsync()。
#
# 這就意味着若是有子進程在進行保存操做,那麼Redis就處於"不可同步"的狀態。
# 這其實是說,在最差的狀況下可能會丟掉30秒鐘的日誌數據。(默認Linux設定)
#
# 若是你有延時問題把這個設置成"yes",不然就保持"no",這是保存持久數據的最安全的方式。
no-appendfsync-on-rewrite yes
# 自動重寫AOF文件
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
# AOF文件可能在尾部是不完整的(這跟system關閉有問題,尤爲是mount ext4文件系統時
# 沒有加上data=ordered選項。只會發生在os死時,redis本身死不會不完整)。
# 那redis重啓時load進內存的時候就有問題了。
# 發生的時候,能夠選擇redis啓動報錯,而且通知用戶和寫日誌,或者load儘可能多正常的數據。
# 若是aof-load-truncated是yes,會自動發佈一個log給客戶端而後load(默認)。
# 若是是no,用戶必須手動redis-check-aof修復AOF文件才能夠。
# 注意,若是在讀取的過程當中,發現這個aof是損壞的,服務器也是會退出的,
# 這個選項僅僅用於當服務器嘗試讀取更多的數據但又找不到相應的數據時。
aof-load-truncated yes
# Lua 腳本的最大執行時間,毫秒爲單位
lua-time-limit 5000
# Redis慢查詢日誌能夠記錄超過指定時間的查詢
slowlog-log-slower-than 10000
# 這個長度沒有限制。只是要主要會消耗內存。你能夠經過 SLOWLOG RESET 來回收內存。
slowlog-max-len 128
# redis延時監控系統在運行時會採樣一些操做,以便收集可能致使延時的數據根源。
# 經過 LATENCY命令 能夠打印一些圖樣和獲取一些報告,方便監控
# 這個系統僅僅記錄那個執行時間大於或等於預約時間(毫秒)的操做,
# 這個預約時間是經過latency-monitor-threshold配置來指定的,
# 當設置爲0時,這個監控系統處於中止狀態
latency-monitor-threshold 0
# Redis能通知 Pub/Sub 客戶端關於鍵空間發生的事件,默認關閉
notify-keyspace-events ""
# 當hash只有少許的entry時,而且最大的entry所佔空間沒有超過指定的限制時,會用一種節省內存的
# 數據結構來編碼。能夠經過下面的指令來設定限制
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
# 與hash似,數據元素較少的list,能夠用另外一種方式來編碼從而節省大量空間。
# 這種特殊的方式只有在符合下面限制時才��以用
list-max-ziplist-entries 512
list-max-ziplist-value 64
# set有一種特殊編碼的狀況:當set數據全是十進制64位有符號整型數字構成的字符串時。
# 下面這個配置項就是用來設置set使用這種編碼來節省內存的最大長度。
set-max-intset-entries 512
# 與hash和list類似,有序集合也能夠用一種特別的編碼方式來節省大量空間。
# 這種編碼只適合長度和元素都小於下面限制的有序集合
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
# HyperLogLog稀疏結構表示字節的限制。該限制包括
# 16個字節的頭。當HyperLogLog使用稀疏結構表示
# 這些限制,它會被轉換成密度表示。
# 值大於16000是徹底沒用的,由於在該點
# 密集的表示是更多的內存效率。
# 建議值是3000左右,以便具備的內存好處, 減小內存的消耗
hll-sparse-max-bytes 3000
# 啓用哈希刷新,每100個CPU毫秒會拿出1個毫秒來刷新Redis的主哈希表(頂級鍵值映射表)
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。提升該值將在Redis空閒時使用更多的CPU時,但同時當有多個key
# 同時到期會使Redis的反應更靈敏,以及超時能夠更精確地處理
hz 10
# 當一個子進程重寫AOF文件時,若是啓用下面的選項,則文件每生成32M數據會被同步
aof-rewrite-incremental-fsync yes
將全部大於vm-max-memory的數據存入虛擬內存,不管vm-max-memory設置多小,全部索引數據都是內存存儲的(Redis的索引數據 就是keys),也就是說,當vm-max-memory設置爲0的時候,實際上是全部value都存在於磁盤。默認值爲0
vm-max-memory 0
Redis swap文件分紅了不少的page,一個對象能夠保存在多個page上面,但一個page上不能被多個對象共享,vm-page-size是要根據存儲的 數據大小來設定的,做者建議若是存儲不少小對象,page大小最好設置爲32或者64bytes;若是存儲很大大對象,則可使用更大的page,若是不 肯定,就使用默認值
vm-page-size 32
設置swap文件中的page數量,因爲頁表(一種表示頁面空閒或使用的bitmap)是在放在內存中的,,在磁盤上每8個pages將消耗1byte的內存。
vm-pages 134217728
設置訪問swap文件的線程數,最好不要超過機器的核數,若是設置爲0,那麼全部對swap文件的操做都是串行的,可能會形成比較長時間的延遲。默認值爲4
vm-max-threads 4
設置在向客戶端應答時,是否把較小的包合併爲一個包發送,默認爲開啓
glueoutputbuf yes
指定在超過必定的數量或者最大的元素超過某一臨界值時,採用一種特殊的哈希算法
hash-max-zipmap-entries 64
hash-max-zipmap-value 512
指定是否激活重置哈希,默認爲開啓(後面在介紹Redis的哈希算法時具體介紹)
activerehashing yes
指定包含其它的配置文件,能夠在同一主機上多個Redis實例之間使用同一份配置文件,而同時各個實例又擁有本身的特定配置文件
include /path/to/local.conf
指定內存映射文件路徑(windows版特有的一個文件,注意將該文件路徑配置在一個足夠空間的路徑下)
heapdir ./rdb/
指定內存映射文件大小,若是設置了最大內存那麼該文件的大小=1.5*最大內存大小
maxheap 1024000000
redis
參數這部分參考:http://www.cnblogs.com/wenanry/archive/2012/02/26/2368398.html算法
主:192.168.80.133:6379數據庫
從:192.168.80.133:6380vim
注意:確保防火牆容許端口,或者關閉防火牆。windows
主redis配置緩存
cp -r redis-3.0.7 /usr/local/redis-6379
修改redis.conf文件安全
cd /usr/local/redis-6379
mkdir run
vim redis.conf
其它的參數默認便可。bash
從redis配置
cp -r redis-3.0.7 /usr/local/redis-6380
修改redis.conf文件
cd /usr/local/redis-6380
mkdir run
vim redis.conf
因爲個人主從都是在本機,這裏填寫實際的主的ip 加 端口
其它的參數默認便可。
啓動redis
/usr/local/redis-6379/src/redis-server /usr/local/redis-6379/redis.conf /usr/local/redis-6380/src/redis-server /usr/local/redis-6380/redis.conf
登入redis
登入主: /usr/local/redis-6379/src/redis-cli -p 6379 登入從: /usr/local/redis-6379/src/redis-cli -p 6380
測試數據
在主redis上執行
在從redis上執行
主掛掉了後從執行: src/redis-cli -p 6380 slaveof NO ONE 主恢復後從執行: src/redis-cli -p 6380 slaveof 127.0.0.1 6379
1.查看redis進程 ps -ef|grep redis 2.啓動redis src/redis-server redis.conf 3.關閉redis src/redis-cli -p 6379 shutdown 4.登入redis src/redis-cli -p 6379 5.退出登入redis quit
6.獲取redis信息
info
配置redis系統啓動
vim /etc/init.d/redis-6379
代碼來自網絡
#!/bin/bash # # redis Startup script for redis processes # # author: snowolf # # processname: redis redis_path="/usr/local/redis-6379/src/redis-server" redis_conf="/usr/local/redis-6379/redis.conf" redis_pid="/usr/local/redis-6379/run/redis.pid" # Source function library. . /etc/rc.d/init.d/functions [ -x $redis_path ] || exit 0 RETVAL=0 prog="redis" # Start daemons. start() { if [ -e $redis_pid -a ! -z $redis_pid ];then echo $prog" already running...." exit 1 fi echo -n $"Starting $prog " # Single instance for all caches $redis_path $redis_conf RETVAL=$? [ $RETVAL -eq 0 ] && { touch /var/lock/subsys/$prog success $"$prog" } echo return $RETVAL } # Stop daemons. stop() { echo -n $"Stopping $prog " killproc -d 10 $redis_path echo [ $RETVAL = 0 ] && rm -f $redis_pid /var/lock/subsys/$prog RETVAL=$? return $RETVAL } # See how we were called. case "$1" in start) start ;; stop) stop ;; status) status $prog RETVAL=$? ;; restart) stop start ;; condrestart) if test "x`pidof redis`" != x; then stop start fi ;; *) echo $"Usage: $0 {start|stop|status|restart|condrestart}" exit 1 esac exit $RETVAL
賦予文件可執行權限
chmod +x /etc/init.d/redis-6379
該腳本是經過殺進程的方式中止redis,適合一臺服務器只部署一個redis。
加入啓動服務 chkconfig redis-6379 on 啓動redis service redis-6379 start
配置redis密碼
1.配置主
vim redis.conf
requirepass abc
登入主
src/redis-cli -p 6380 -a abc
若是沒法執行命令,進行受權驗證
#auth 密碼 auth abc
2.配置從
vim redis.conf
#配置鏈接主使用的密碼 masterauth abc