安裝redis
成都創(chuàng)新互聯(lián)公司是一家從事企業(yè)網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站、行業(yè)門戶網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)制作的專業(yè)網(wǎng)站建設(shè)公司,擁有經(jīng)驗(yàn)豐富的網(wǎng)站建設(shè)工程師和網(wǎng)頁設(shè)計(jì)人員,具備各種規(guī)模與類型網(wǎng)站建設(shè)的實(shí)力,在網(wǎng)站建設(shè)領(lǐng)域樹立了自己獨(dú)特的設(shè)計(jì)風(fēng)格。自公司成立以來曾獨(dú)立設(shè)計(jì)制作的站點(diǎn)近1000家。
下載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有報(bào)錯(cuò),則執(zhí)行,沒有報(bào)錯(cuò)就不需要 make MALLOC=libc ”
redis.conf相關(guān)參數(shù)
##Redis默認(rèn)不是以守護(hù)進(jìn)程的方式運(yùn)行,可以通過該配置項(xiàng)修改,使用yes啟用守護(hù)進(jìn)程 daemonize no ##當(dāng)Redis以守護(hù)進(jìn)程方式運(yùn)行時(shí),Redis默認(rèn)會(huì)把pid寫入/var/run/redis.pid文件,可以通過pidfile指定 pidfile /var/run/redis.pid ##指定Redis監(jiān)聽端口,默認(rèn)端口為6379 port 6379# TCP接收隊(duì)列長度,受/proc/sys/net/core/somaxconn和tcp_max_syn_backlog這兩個(gè)內(nèi)核參數(shù)的影響 tcp-backlog 511 ##綁定的主機(jī)地址 bind 127.0.0.1##當(dāng) 客戶端閑置多長時(shí)間后關(guān)閉連接,如果指定為0,表示關(guān)閉該功能 timeout 300# 如果非零,則設(shè)置SO_KEEPALIVE選項(xiàng)來向空閑連接的客戶端發(fā)送ACK tcp-keepalive 60##指定日志記錄級(jí)別,Redis總共支持四個(gè)級(jí)別:debug、verbose、notice、warning,默認(rèn)為verbose ## debug (大量信息,對(duì)開發(fā)/測試有用) ## verbose (很多精簡的有用信息,但是不像debug等級(jí)那么多) ## notice (適量的信息,基本上是你生產(chǎn)環(huán)境中需要的) ## warning (只有很重要/嚴(yán)重的信息會(huì)記錄下來) loglevel verbose ##日志名 logfile "./redis7003.log"##設(shè)置數(shù)據(jù)庫的數(shù)量,可以使用SELECT命令在連接上指定數(shù)據(jù)庫id databases 16##指定在多長時(shí)間內(nèi),有多少次更新操作,就將數(shù)據(jù)同步到數(shù)據(jù)文件,可以多個(gè)條件配合save #Redis默認(rèn)配置文件中提供了三個(gè)條件: save 900 1 save 300 10 save 60 10000分別表示900秒(15分鐘)內(nèi)有1個(gè)更改,300秒(5分鐘)內(nèi)有10個(gè)更改以及60秒內(nèi)有10000個(gè)更改。 # 默認(rèn)如果開啟RDB快照(至少一條save指令)并且最新的后臺(tái)保存失敗,Redis將會(huì)停止接受寫操作 # 這將使用戶知道數(shù)據(jù)沒有正確的持久化到硬盤,否則可能沒人注意到并且造成一些災(zāi)難 stop-writes-on-bgsave-error yes ##指定存儲(chǔ)至本地?cái)?shù)據(jù)庫時(shí)是否壓縮數(shù)據(jù),默認(rèn)為yes,Redis采用LZF壓縮,如果為了節(jié)省CPU時(shí)間,可以關(guān)閉該選項(xiàng),但會(huì)導(dǎo)致數(shù)據(jù)庫文件變的巨大 rdbcompression yes ###指定本地?cái)?shù)據(jù)庫文件名,默認(rèn)值為dump.rdb dbfilename dump.rdb ###指定本地?cái)?shù)據(jù)庫存放目錄 dir ./##設(shè)置當(dāng)本機(jī)為slav服務(wù)時(shí),設(shè)置master服務(wù)的IP地址及端口,在Redis啟動(dòng)時(shí),它會(huì)自動(dòng)從master進(jìn)行數(shù)據(jù)同步 slaveof ###當(dāng)master服務(wù)設(shè)置了密碼保護(hù)時(shí),slav服務(wù)連接master的密碼 masterauth ####設(shè)置Redis連接密碼,如果配置了連接密碼,客戶端在連接Redis時(shí)需要通過AUTH 命令提供密碼,默認(rèn)關(guān)閉 requirepass foobared ##你可以配置salve實(shí)例是否接受寫操作。可寫的slave實(shí)例可能對(duì)存儲(chǔ)臨時(shí)數(shù)據(jù)比較有用(因?yàn)閷懭雜alve ##的數(shù)據(jù)在同master同步之后將很容易被刪除 slave-read-only yes # 是否在slave套接字發(fā)送SYNC之后禁用 TCP_NODELAY? # 如果你選擇“yes”Redis將使用更少的TCP包和帶寬來向slaves發(fā)送數(shù)據(jù)。但是這將使數(shù)據(jù)傳輸?shù)絪lave # 上有延遲,Linux內(nèi)核的默認(rèn)配置會(huì)達(dá)到40毫秒 # 如果你選擇了 "no" 數(shù)據(jù)傳輸?shù)絪alve的延遲將會(huì)減少但要使用更多的帶寬 repl-disable-tcp-nodelay no # slave的優(yōu)先級(jí)是一個(gè)整數(shù)展示在Redis的Info輸出中。如果master不再正常工作了,哨兵將用它來 # 選擇一個(gè)slave提升=升為master。 # 優(yōu)先級(jí)數(shù)字小的salve會(huì)優(yōu)先考慮提升為master,所以例如有三個(gè)slave優(yōu)先級(jí)分別為10,100,25, # 哨兵將挑選優(yōu)先級(jí)最小數(shù)字為10的slave。 # 0作為一個(gè)特殊的優(yōu)先級(jí),標(biāo)識(shí)這個(gè)slave不能作為master,所以一個(gè)優(yōu)先級(jí)為0的slave永遠(yuǎn)不會(huì)被 # 哨兵挑選提升為master slave-priority 100##設(shè)置同一時(shí)間最大客戶端連接數(shù),默認(rèn)無限制,Redis可以同時(shí)打開的客戶端連接數(shù)為Redis進(jìn)程可以打開的最大文件描述符數(shù),如果設(shè)置 maxclients 0,表示不作限制。當(dāng)客戶端連接數(shù)到達(dá)限制時(shí),Redis會(huì)關(guān)閉新的連接并向客戶端返回max number of clients reached錯(cuò)誤信息 maxclients 128##指定Redis最大內(nèi)存限制,Redis在啟動(dòng)時(shí)會(huì)把數(shù)據(jù)加載到內(nèi)存中,達(dá)到最大內(nèi)存后,Redis會(huì)先嘗試清除已到期或即將到期的Key,當(dāng)此方法處理 后,仍然到達(dá)最大內(nèi)存設(shè)置,將無法再進(jìn)行寫入操作,但仍然可以進(jìn)行讀取操作。Redis新的vm機(jī)制,會(huì)把Key存放內(nèi)存,Value會(huì)存放在swap區(qū) maxmemory ##最大內(nèi)存策略:如果達(dá)到內(nèi)存限制了,Redis如何選擇刪除key。你可以在下面五個(gè)行為里選: # volatile-lru -> 根據(jù)LRU算法刪除帶有過期時(shí)間的key。 # allkeys-lru -> 根據(jù)LRU算法刪除任何key。 # volatile-random -> 根據(jù)過期設(shè)置來隨機(jī)刪除key, 具備過期時(shí)間的key。 # allkeys->random -> 無差別隨機(jī)刪, 任何一個(gè)key。 # volatile-ttl -> 根據(jù)最近過期時(shí)間來刪除(輔以TTL), 這是對(duì)于有過期時(shí)間的key # noeviction -> 誰也不刪,直接在寫操作時(shí)返回錯(cuò)誤。 maxmemory-policy volatile-lru##指定是否在每次更新操作后進(jìn)行日志記錄,Redis在默認(rèn)情況下是異步的把數(shù)據(jù)寫入磁盤,如果不開啟,可能會(huì)在斷電時(shí)導(dǎo)致一段時(shí)間內(nèi)的數(shù)據(jù)丟失。因?yàn)?nbsp;redis本身同步數(shù)據(jù)文件是按上面save條件來同步的,所以有的數(shù)據(jù)會(huì)在一段時(shí)間內(nèi)只存在于內(nèi)存中。默認(rèn)為no appendonly no ###指定更新日志文件名,默認(rèn)為appendonly.aof appendfilename appendonly.aof ####指定更新日志條件,共有3個(gè)可選值: no:表示等操作系統(tǒng)進(jìn)行數(shù)據(jù)緩存同步到磁盤(快) always:表示每次更新操作后手動(dòng)調(diào)用fsync()將數(shù)據(jù)寫到磁盤(慢,安全) everysec:表示每秒同步一次(折衷,默認(rèn)值) appendfsync everysec ##指定是否啟用虛擬內(nèi)存機(jī)制,默認(rèn)值為no,簡單的介紹一下,VM機(jī)制將數(shù)據(jù)分頁存放,由Redis將訪問量較少的頁即冷數(shù)據(jù)swap到磁盤上,訪問多的頁面由磁盤自動(dòng)換出到內(nèi)存中(在后面的文章我會(huì)仔細(xì)分析Redis的VM機(jī)制) vm-enabled no ### 虛擬內(nèi)存文件路徑,默認(rèn)值為/tmp/redis.swap,不可多個(gè)Redis實(shí)例共享 vm-swap-file /tmp/redis.swap # 如果AOF的同步策略設(shè)置成 "always" 或者 "everysec",并且后臺(tái)的存儲(chǔ)進(jìn)程(后臺(tái)存儲(chǔ)或?qū)懭階OF # 日志)會(huì)產(chǎn)生很多磁盤I/O開銷。某些Linux的配置下會(huì)使Redis因?yàn)?nbsp;fsync()系統(tǒng)調(diào)用而阻塞很久。 # 注意,目前對(duì)這個(gè)情況還沒有完美修正,甚至不同線程的 fsync() 會(huì)阻塞我們同步的write(2)調(diào)用。 # # 為了緩解這個(gè)問題,可以用下面這個(gè)選項(xiàng)。它可以在 BGSAVE 或 BGREWRITEAOF 處理時(shí)阻止主進(jìn)程進(jìn)行fsync()。 # # 這就意味著如果有子進(jìn)程在進(jìn)行保存操作,那么Redis就處于"不可同步"的狀態(tài)。 # 這實(shí)際上是說,在最差的情況下可能會(huì)丟掉30秒鐘的日志數(shù)據(jù)。(默認(rèn)Linux設(shè)定) # # 如果你有延時(shí)問題把這個(gè)設(shè)置成"yes",否則就保持"no",這是保存持久數(shù)據(jù)的最安全的方式。 no-appendfsync-on-rewrite yes # 自動(dòng)重寫AOF文件 auto-aof-rewrite-percentage 100auto-aof-rewrite-min-size 64mb # AOF文件可能在尾部是不完整的(這跟system關(guān)閉有問題,尤其是mount ext4文件系統(tǒng)時(shí) # 沒有加上data=ordered選項(xiàng)。只會(huì)發(fā)生在os死時(shí),redis自己死不會(huì)不完整)。 # 那redis重啟時(shí)load進(jìn)內(nèi)存的時(shí)候就有問題了。 # 發(fā)生的時(shí)候,可以選擇redis啟動(dòng)報(bào)錯(cuò),并且通知用戶和寫日志,或者load盡量多正常的數(shù)據(jù)。 # 如果aof-load-truncated是yes,會(huì)自動(dòng)發(fā)布一個(gè)log給客戶端然后load(默認(rèn))。 # 如果是no,用戶必須手動(dòng)redis-check-aof修復(fù)AOF文件才可以。 # 注意,如果在讀取的過程中,發(fā)現(xiàn)這個(gè)aof是損壞的,服務(wù)器也是會(huì)退出的, # 這個(gè)選項(xiàng)僅僅用于當(dāng)服務(wù)器嘗試讀取更多的數(shù)據(jù)但又找不到相應(yīng)的數(shù)據(jù)時(shí)。 aof-load-truncated yes # Lua 腳本的最大執(zhí)行時(shí)間,毫秒為單位 lua-time-limit 5000# Redis慢查詢?nèi)罩究梢杂涗洺^指定時(shí)間的查詢 slowlog-log-slower-than 10000# 這個(gè)長度沒有限制。只是要主要會(huì)消耗內(nèi)存。你可以通過 SLOWLOG RESET 來回收內(nèi)存。 slowlog-max-len 128# redis延時(shí)監(jiān)控系統(tǒng)在運(yùn)行時(shí)會(huì)采樣一些操作,以便收集可能導(dǎo)致延時(shí)的數(shù)據(jù)根源。 # 通過 LATENCY命令 可以打印一些圖樣和獲取一些報(bào)告,方便監(jiān)控 # 這個(gè)系統(tǒng)僅僅記錄那個(gè)執(zhí)行時(shí)間大于或等于預(yù)定時(shí)間(毫秒)的操作, # 這個(gè)預(yù)定時(shí)間是通過latency-monitor-threshold配置來指定的, # 當(dāng)設(shè)置為0時(shí),這個(gè)監(jiān)控系統(tǒng)處于停止?fàn)顟B(tài) latency-monitor-threshold 0# Redis能通知 Pub/Sub 客戶端關(guān)于鍵空間發(fā)生的事件,默認(rèn)關(guān)閉 notify-keyspace-events ""# 當(dāng)hash只有少量的entry時(shí),并且最大的entry所占空間沒有超過指定的限制時(shí),會(huì)用一種節(jié)省內(nèi)存的 # 數(shù)據(jù)結(jié)構(gòu)來編碼??梢酝ㄟ^下面的指令來設(shè)定限制 hash-max-ziplist-entries 512hash-max-ziplist-value 64# 與hash似,數(shù)據(jù)元素較少的list,可以用另一種方式來編碼從而節(jié)省大量空間。 # 這種特殊的方式只有在符合下面限制時(shí)才以用 list-max-ziplist-entries 512list-max-ziplist-value 64# set有一種特殊編碼的情況:當(dāng)set數(shù)據(jù)全是十進(jìn)制64位有符號(hào)整型數(shù)字構(gòu)成的字符串時(shí)。 # 下面這個(gè)配置項(xiàng)就是用來設(shè)置set使用這種編碼來節(jié)省內(nèi)存的最大長度。set-max-intset-entries 512# 與hash和list相似,有序集合也可以用一種特別的編碼方式來節(jié)省大量空間。 # 這種編碼只適合長度和元素都小于下面限制的有序集合 zset-max-ziplist-entries 128zset-max-ziplist-value 64# HyperLogLog稀疏結(jié)構(gòu)表示字節(jié)的限制。該限制包括 # 16個(gè)字節(jié)的頭。當(dāng)HyperLogLog使用稀疏結(jié)構(gòu)表示 # 這些限制,它會(huì)被轉(zhuǎn)換成密度表示。 # 值大于16000是完全沒用的,因?yàn)樵谠擖c(diǎn) # 密集的表示是更多的內(nèi)存效率。 # 建議值是3000左右,以便具有的內(nèi)存好處, 減少內(nèi)存的消耗 hll-sparse-max-bytes 3000# 啟用哈希刷新,每100個(gè)CPU毫秒會(huì)拿出1個(gè)毫秒來刷新Redis的主哈希表(頂級(jí)鍵值映射表) activerehashing yes # 客戶端的輸出緩沖區(qū)的限制,可用于強(qiáng)制斷開那些因?yàn)槟撤N原因從服務(wù)器讀取數(shù)據(jù)的速度不夠快的客戶端 client-output-buffer-limit normal 0 0 0client-output-buffer-limit slave 256mb 64mb 60client-output-buffer-limit pubsub 32mb 8mb 60# 默認(rèn)情況下,“hz”的被設(shè)定為10。提高該值將在Redis空閑時(shí)使用更多的CPU時(shí),但同時(shí)當(dāng)有多個(gè)key # 同時(shí)到期會(huì)使Redis的反應(yīng)更靈敏,以及超時(shí)可以更精確地處理 hz 10# 當(dāng)一個(gè)子進(jìn)程重寫AOF文件時(shí),如果啟用下面的選項(xiàng),則文件每生成32M數(shù)據(jù)會(huì)被同步 aof-rewrite-incremental-fsync yes 將所有大于vm-max-memory的數(shù)據(jù)存入虛擬內(nèi)存,無論vm-max-memory設(shè)置多小,所有索引數(shù)據(jù)都是內(nèi)存存儲(chǔ)的(Redis的索引數(shù)據(jù) 就是keys),也就是說,當(dāng)vm-max-memory設(shè)置為0的時(shí)候,其實(shí)是所有value都存在于磁盤。默認(rèn)值為0 vm-max-memory 0Redis swap文件分成了很多的page,一個(gè)對(duì)象可以保存在多個(gè)page上面,但一個(gè)page上不能被多個(gè)對(duì)象共享,vm-page-size是要根據(jù)存儲(chǔ)的 數(shù)據(jù)大小來設(shè)定的,作者建議如果存儲(chǔ)很多小對(duì)象,page大小最好設(shè)置為32或者64bytes;如果存儲(chǔ)很大大對(duì)象,則可以使用更大的page,如果不 確定,就使用默認(rèn)值 vm-page-size 32設(shè)置swap文件中的page數(shù)量,由于頁表(一種表示頁面空閑或使用的bitmap)是在放在內(nèi)存中的,,在磁盤上每8個(gè)pages將消耗1byte的內(nèi)存。 vm-pages 134217728設(shè)置訪問swap文件的線程數(shù),最好不要超過機(jī)器的核數(shù),如果設(shè)置為0,那么所有對(duì)swap文件的操作都是串行的,可能會(huì)造成比較長時(shí)間的延遲。默認(rèn)值為4 vm-max-threads 4設(shè)置在向客戶端應(yīng)答時(shí),是否把較小的包合并為一個(gè)包發(fā)送,默認(rèn)為開啟 glueoutputbuf yes 指定在超過一定的數(shù)量或者最大的元素超過某一臨界值時(shí),采用一種特殊的哈希算法 hash-max-zipmap-entries 64 hash-max-zipmap-value 512指定是否激活重置哈希,默認(rèn)為開啟(后面在介紹Redis的哈希算法時(shí)具體介紹) activerehashing yes 指定包含其它的配置文件,可以在同一主機(jī)上多個(gè)Redis實(shí)例之間使用同一份配置文件,而同時(shí)各個(gè)實(shí)例又擁有自己的特定配置文件 include /path/to/local.conf 指定內(nèi)存映射文件路徑(windows版特有的一個(gè)文件,注意將該文件路徑配置在一個(gè)足夠空間的路徑下) heapdir ./rdb/ 指定內(nèi)存映射文件大小,如果設(shè)置了最大內(nèi)存那么該文件的大小=1.5*最大內(nèi)存大小
maxheap 1024000000
參數(shù)這部分參考:http://www.cnblogs.com/wenanry/archive/2012/02/26/2368398.html
主:192.168.80.133:6379
從:192.168.80.133:6380
注意:確保防火墻允許端口,或者關(guān)閉防火墻。
主redis配置
cp -r redis-3.0.7 /usr/local/redis-6379
修改redis.conf文件
cd /usr/local/redis-6379 mkdir run vim redis.conf
其它的參數(shù)默認(rèn)即可。
從redis配置
cp -r redis-3.0.7 /usr/local/redis-6380
修改redis.conf文件
cd /usr/local/redis-6380 mkdir run vim redis.conf
由于我的主從都是在本機(jī),這里填寫實(shí)際的主的ip 加 端口
其它的參數(shù)默認(rèn)即可。
啟動(dòng)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
測試數(shù)據(jù)
在主redis上執(zhí)行
在從redis上執(zhí)行
主掛掉了后從執(zhí)行: src/redis-cli -p 6380 slaveof NO ONE 主恢復(fù)后從執(zhí)行: src/redis-cli -p 6380 slaveof 127.0.0.1 6379
1.查看redis進(jìn)程 ps -ef|grep redis2.啟動(dòng)redis src/redis-server redis.conf 3.關(guān)閉redis src/redis-cli -p 6379 shutdown4.登入redis src/redis-cli -p 63795.退出登入redis quit 6.獲取redis信息 info
配置redis系統(tǒng)啟動(dòng)
vim /etc/init.d/redis-6379
代碼來自網(wǎng)絡(luò)
#!/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
賦予文件可執(zhí)行權(quán)限
chmod +x /etc/init.d/redis-6379
該腳本是通過殺進(jìn)程的方式停止redis,適合一臺(tái)服務(wù)器只部署一個(gè)redis。
加入啟動(dòng)服務(wù) chkconfig redis-6379 on啟動(dòng)redis service redis-6379 start
配置redis密碼
1.配置主
vim redis.conf
requirepass abc
登入主
src/redis-cli -p 6380 -a abc
如果無法執(zhí)行命令,進(jìn)行授權(quán)驗(yàn)證
#auth 密碼 auth abc
2.配置從
vim redis.conf
#配置連接主使用的密碼 masterauth abc