Redis安装部署配置说明
1.????redis簡(jiǎn)介??????
????????????? ?Redis是個(gè)高性能的key-value數(shù)據(jù)庫(kù),它的key具有豐富的數(shù)據(jù)結(jié)構(gòu):string,hash,list set和sorted set。作為NOSQL,比起memcache之類,不僅僅key數(shù)據(jù)結(jié)構(gòu)豐富,而且具有持久化的功能,并且能夠支持主從復(fù)制,很方便構(gòu)建集群。redis高性能很大程度上源于它是個(gè)內(nèi)存型數(shù)據(jù)庫(kù),它的高性能表現(xiàn)在:set操作11w/s,get操作8.1w/s,與其他類型數(shù)據(jù)庫(kù)性能差異,可以而參考:http://timyang.net/data/mcdb-tt-redis/??。為了進(jìn)一步加深對(duì)redis的理解總結(jié),我打算寫個(gè)redis系列的博客。這里主要談?wù)剅edis安裝部署及運(yùn)維維護(hù)。
?
2.????下載安裝
1.? [root@xsf003?tool]#?wget?-c?http://redis.googlecode.com/files/redis-2.4.17.tar.gz????#下載??
2.? [root@xsf003?tool]#?tar?-zxvf?redis-2.4.17.tar.gz???#解壓??
3.? [root@xsf003?tool]#?cd?redis-2.4.17??
4.? [root@xsf003?redis-2.4.17]#?make??#編譯??
5.? [root@xsf003?redis-2.4.17]#?make?install?#安裝??
說(shuō)明:其實(shí) make install 就是:
cp -p redis-server/usr/local/bin
cp -p redis-benchmark/usr/local/bin
cp -p redis-cli /usr/local/bin
cp -p redis-check-dump/usr/local/bin
cp -p redis-check-aof/usr/local/bin
這樣,redis就安裝成功了。
接下來(lái)就是啟動(dòng)Redis了, 上面編譯后生成的那些可執(zhí)行文件拷貝到了/usr/local/bin目錄下面, 他們的作用分別是:
redis-server:Redis服務(wù)器的daemon啟動(dòng)程序
redis-cli:Redis命令行操作工具。當(dāng)然,你也可以用telnet根據(jù)其純文本協(xié)議來(lái)操作
redis-benchmark:Redis性能測(cè)試工具,測(cè)試Redis在你的系統(tǒng)及你的配置下的讀寫性能
?
?
?
安裝完畢,常用工具會(huì)自動(dòng)拷貝到/user/loca/bin目錄下。做為服務(wù)器,我們常常還需要把redis設(shè)置成開機(jī)自啟動(dòng),源碼包中有個(gè)很好用的腳本,執(zhí)行腳步根據(jù)提示輸入即可。
1.? ?[root@xsf003?redis-2.4.17]#?cd?utils/??
2.? [root@xsf003?utils]#?./install_server.sh???
3.? Welcome?to?the?redis?service?installer??
4.? This?script?will?help?you?easily?set?up?a?running?redis?server??
5.? ??
6.? ??
7.? Please?select?the?redis?port?for?this?instance:?[6379]???
8.? Selecting?default:?6379??
9.? Please?select?the?redis?config?file?name?[/etc/redis/6379.conf]???
10. Selected?default?-?/etc/redis/6379.conf??
11. Please?select?the?redis?log?file?name?[/var/log/redis_6379.log]???
12. Selected?default?-?/var/log/redis_6379.log??
13. Please?select?the?data?directory?for?this?instance?[/var/lib/redis/6379]???
14. Selected?default?-?/var/lib/redis/6379??
15. Please?select?the?redis?executable?path?[/usr/local/bin/redis-server]???
16. Copied?/tmp/6379.conf?=>?/etc/init.d/redis_6379??
17. Installing?service...??
18. Successfully?added?to?chkconfig!??
19. Successfully?added?to?runlevels?345!??
20. Starting?Redis?server...??
21. Installation?successful!?
3.????開關(guān)服務(wù)
1.? ?[root@xsf003?utils]#?/etc/init.d/redis_6379?stop???#關(guān)閉??
2.? [root@xsf003?utils]#?/etc/init.d/redis_6379?start??#啟動(dòng)??
?
也可以用下面類似的命令直接啟動(dòng)關(guān)閉redis服務(wù):
1.???? /usr/local/bin/redis-server?/etc/redis/redis.conf???#指定配置文件?啟動(dòng)??
2.???? /usr/local/bin/redis-cli?-p?6379?shutdown???#?關(guān)閉,如果默認(rèn)端口6379?可以直接?/usr/local/bin/redis-cli?shutdown
啟動(dòng) redis 會(huì)出現(xiàn)的問(wèn)題
Warning: 32 bit instancedetected but no memory limit set. Setting 3 GB maxmemory limit with'noeviction' policy now.
解決方法:修改配置文件 redis.conf?將 maxmemory設(shè)置為 maxmemory1024000000 #分配256M內(nèi)存
WARNING overcommit_memory isset to 0! Background save may fail under low memory condition. To fix thisissue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or runthe command 'sysctl vm.overcommit_memory=1' for this to take effect.
解決方法:警告:過(guò)量使用內(nèi)存設(shè)置為0!在低內(nèi)存環(huán)境下,后臺(tái)保存可能失敗。為了修正這個(gè)問(wèn)題,請(qǐng)?jiān)?span style="color:red">/etc/sysctl.conf添加一項(xiàng) 'vm.overcommit_memory = 1' ,然后重啟(或者運(yùn)行命令'sysctl vm.overcommit_memory=1')使其生效。
當(dāng)啟動(dòng)的時(shí)候沒(méi)有任何信息,表明啟動(dòng)成功。也可以使用 "netstat -tnl"查看6379端口是否啟動(dòng)。
?
?
4.????通過(guò)客戶端命令行工具連接redis服務(wù)查看redis相關(guān)信息
1)????連接
1.? ?[root@xsf003?utils]#?redis-cli???
2.? redis?127.0.0.1:6379>?
2)????其他指令
1.? redis?127.0.0.1:6379>?info??#查看server版本內(nèi)存使用連接等信息??
2.? redis?127.0.0.1:6379>?client?list??#獲取客戶連接列表??
3.? redis?127.0.0.1:6379>?client?kill?127.0.0.1:33441?#終止某個(gè)客戶端連接??
4.? redis?127.0.0.1:6379>?dbsize?#當(dāng)前保存key的數(shù)量??
5.? redis?127.0.0.1:6379>?save?#立即保存數(shù)據(jù)到硬盤??
6.? redis?127.0.0.1:6379>?bgsave?#異步保存數(shù)據(jù)到硬盤??
7.? redis?127.0.0.1:6379>?flushdb?#當(dāng)前庫(kù)中移除所有key??
8.? redis?127.0.0.1:6379>?flushall?#移除所有key從所有庫(kù)中??
9.? redis?127.0.0.1:6379>?lastsave?#獲取上次成功保存到硬盤的unix時(shí)間戳??
10. redis?127.0.0.1:6379>?monitor?#實(shí)時(shí)監(jiān)測(cè)服務(wù)器接收到的請(qǐng)求??
11. redis?127.0.0.1:6379>?slowlog?len?#查詢慢查詢?nèi)罩緱l數(shù)??
12. (integer)?3???
13. redis?127.0.0.1:6379>?slowlog?get?#返回所有的慢查詢?nèi)罩?#xff0c;最大值取決于slowlog-max-len配置??
14. redis?127.0.0.1:6379>?slowlog?get?2?#打印兩條慢查詢?nèi)罩??
15. redis?127.0.0.1:6379>?slowlog?reset?#清空慢查詢?nèi)罩拘畔??
?
5.????編譯 phpredis
unzip phpredis-master.zip
cd phpredis-master
/usr/local/php/bin/phpize
./configure –with-php-config=/usr/local/php/bin/php-config
make && make install
修改 php.ini文件。加載 redis.so模塊,重啟 Apache!
?
6.????Redis.conf配置說(shuō)明
1)????其實(shí)redis.conf文件中,對(duì)每一個(gè)配置項(xiàng)都有非常詳細(xì)的注釋,本文只是將其進(jìn)行翻譯,同時(shí)加了點(diǎn)小料。本文檔所對(duì)應(yīng)的redis版本為2.0.4。
當(dāng)配置中需要配置內(nèi)存大小時(shí),可以使用 1k, 5GB, 4M 等類似的格式,其轉(zhuǎn)換方式如下(不區(qū)分大小寫):
view source
print?
| 1 | 1k? => 1000????? bytes |
| 2 | 1kb => 1024????? bytes |
| 3 | 1m? => 1000000?? bytes |
| 4 | 1mb => 1024*1024 bytes |
2)????daemonizeno默認(rèn)情況下,redis不是在后臺(tái)運(yùn)行的,如果需要在后臺(tái)運(yùn)行,把該項(xiàng)的值更改為yes
3)????pidfile/var/run/redis.pid當(dāng)redis在后臺(tái)運(yùn)行的時(shí)候,Redis默認(rèn)會(huì)把pid文件放在/var/run/redis.pid,你可以配置到其他地址。當(dāng)運(yùn)行多個(gè)redis服務(wù)時(shí),需要指定不同的pid文件和端口
4)????port6379指定redis運(yùn)行的端口
5)????bind127.0.0.1指定redis只接收來(lái)自于該IP地址的請(qǐng)求,如果不進(jìn)行設(shè)置,那么將處理所有請(qǐng)求,在生產(chǎn)環(huán)境中最好設(shè)置該項(xiàng)
6)????timeout300設(shè)置客戶端連接時(shí)的超時(shí)時(shí)間,單位為秒。當(dāng)客戶端在這段時(shí)間內(nèi)沒(méi)有發(fā)出任何指令,那么關(guān)閉該連接
7)????logleveldebuglog等級(jí)分為4級(jí),debug, verbose, notice, 和warning。生產(chǎn)環(huán)境下一般開啟notice
8)????logfilestdout配置log文件地址,默認(rèn)使用標(biāo)準(zhǔn)輸出,即打印在命令行終端的窗口上
9)????databases16設(shè)置數(shù)據(jù)庫(kù)的個(gè)數(shù),可以使用SELECT命令來(lái)切換數(shù)據(jù)庫(kù)。默認(rèn)使用的數(shù)據(jù)庫(kù)是 DB 0
10)??save9001 設(shè)置Redis進(jìn)行數(shù)據(jù)庫(kù)鏡像的頻率。
view source
print?
| #?? after 900 sec (15 min) if at least 1 key changed |
| #?? after 300 sec (5 min) if at least 10 keys changed |
| #?? after 60 sec if at least 10000 keys changed |
在給定的例子中,我們可以倒過(guò)來(lái)理解:
view source
print?
| if(在60秒之內(nèi)有10000個(gè)keys發(fā)生變化時(shí)){ |
| 進(jìn)行鏡像備份 |
| }else?if(在300秒之內(nèi)有10個(gè)keys發(fā)生了變化){ |
| 進(jìn)行鏡像備份 |
| }else?if(在900秒之內(nèi)有1個(gè)keys發(fā)生了變化){ |
| 進(jìn)行鏡像備份 |
| } |
所以,按照這里的配置,每隔60秒,redis會(huì)檢查現(xiàn)在發(fā)生了多少變化,是不是應(yīng)該進(jìn)行鏡像備份了。但是當(dāng)數(shù)據(jù)庫(kù)比較大時(shí),在我的測(cè)試中,鏡像備份的速度非常慢,并由此導(dǎo)致redis內(nèi)存暴漲直至crash。
11)??rdbcompressionyes在進(jìn)行鏡像備份時(shí),是否進(jìn)行壓縮
12)??dbfilenamedump.rdb鏡像備份文件的文件名
13)??dir/opt/local/var/db/redis/ 數(shù)據(jù)庫(kù)鏡像備份的文件放置的路徑。這里的路徑跟文件名要分開配置是因?yàn)閞edis在進(jìn)行備份時(shí),先會(huì)將當(dāng)前數(shù)據(jù)庫(kù)的狀態(tài)寫入到一個(gè)臨時(shí)文件中,等備份完成時(shí),再把該該臨時(shí)文件替換為上面所指定的文件,而這里的臨時(shí)文件和上面所配置的備份文件都會(huì)放在這個(gè)指定的路徑當(dāng)中。
14)??slaveof?設(shè)置該數(shù)據(jù)庫(kù)為其他數(shù)據(jù)庫(kù)的從數(shù)據(jù)庫(kù)
15)??masterauth?當(dāng)主數(shù)據(jù)庫(kù)連接需要密碼驗(yàn)證時(shí),在這里指定
16)??requirepassfoobared設(shè)置客戶端連接后進(jìn)行任何其他指定前需要使用的密碼。警告:因?yàn)閞edis速度相當(dāng)快,所以在一臺(tái)比較好的服務(wù)器下,一個(gè)外部的用戶可以在一秒鐘進(jìn)行150K次的密碼嘗試,這意味著你需要指定非常非常強(qiáng)大的密碼來(lái)防止暴力破解。
17)??maxclients128限制同時(shí)連接的客戶數(shù)量。當(dāng)連接數(shù)超過(guò)這個(gè)值時(shí),redis將不再接收其他連接請(qǐng)求,客戶端嘗試連接時(shí)將收到error信息。
18)??maxmemory?設(shè)置redis能夠使用的最大內(nèi)存。當(dāng)內(nèi)存滿了的時(shí)候,如果還接收到set命令,redis將先嘗試剔除設(shè)置過(guò)expire信息的key,而不管該key的過(guò)期時(shí)間還沒(méi)有到達(dá)。在刪除時(shí),將按照過(guò)期時(shí)間進(jìn)行刪除,最早將要被過(guò)期的key將最先被刪除。如果帶有expire信息的key都刪光了,那么將返回錯(cuò)誤。這樣,redis將不再接收寫請(qǐng)求,只接收get請(qǐng)求。maxmemory的設(shè)置比較適合于把redis當(dāng)作于類似memcached的緩存來(lái)使用。
19)??appendonlyno默認(rèn)情況下,redis會(huì)在后臺(tái)異步的把數(shù)據(jù)庫(kù)鏡像備份到磁盤,但是該備份是非常耗時(shí)的,而且備份也不能很頻繁,如果發(fā)生諸如拉閘限電、拔插頭等狀況,那么將造成比較大范圍的數(shù)據(jù)丟失。所以redis提供了另外一種更加高效的數(shù)據(jù)庫(kù)備份及災(zāi)難恢復(fù)方式。開啟appendonly模式之后,redis會(huì)把所接收到的每一次寫操作請(qǐng)求都追加到appendonly.aof文件中,當(dāng)redis重新啟動(dòng)時(shí),會(huì)從該文件恢復(fù)出之前的狀態(tài)。但是這樣會(huì)造成appendonly.aof文件過(guò)大,所以redis還支持了BGREWRITEAOF指令,對(duì)appendonly.aof進(jìn)行重新整理。所以我認(rèn)為推薦生產(chǎn)環(huán)境下的做法為關(guān)閉鏡像,開啟appendonly.aof,同時(shí)可以選擇在訪問(wèn)較少的時(shí)間每天對(duì)appendonly.aof進(jìn)行重寫一次。
20)??appendfsynceverysec設(shè)置對(duì)appendonly.aof文件進(jìn)行同步的頻率。always表示每次有寫操作都進(jìn)行同步,everysec表示對(duì)寫操作進(jìn)行累積,每秒同步一次。這個(gè)需要根據(jù)實(shí)際業(yè)務(wù)場(chǎng)景進(jìn)行配置
21)??vm-enabledno是否開啟虛擬內(nèi)存支持。因?yàn)?/span>redis是一個(gè)內(nèi)存數(shù)據(jù)庫(kù),而且當(dāng)內(nèi)存滿的時(shí)候,無(wú)法接收新的寫請(qǐng)求,所以在redis 2.0中,提供了虛擬內(nèi)存的支持。但是需要注意的是,redis中,所有的key都會(huì)放在內(nèi)存中,在內(nèi)存不夠時(shí),只會(huì)把value值放入交換區(qū)。這樣保證了雖然使用虛擬內(nèi)存,但性能基本不受影響,同時(shí),你需要注意的是你要把vm-max-memory設(shè)置到足夠來(lái)放下你的所有的key
22)??vm-swap-file/tmp/redis.swap 設(shè)置虛擬內(nèi)存的交換文件路徑
23)??vm-max-memory0 這里設(shè)置開啟虛擬內(nèi)存之后,redis將使用的最大物理內(nèi)存的大小。默認(rèn)為0,redis將把他所有的能放到交換文件的都放到交換文件中,以盡量少的使用物理內(nèi)存。在生產(chǎn)環(huán)境下,需要根據(jù)實(shí)際情況設(shè)置該值,最好不要使用默認(rèn)的0
24)??vm-page-size32 設(shè)置虛擬內(nèi)存的頁(yè)大小,如果你的value值比較大,比如說(shuō)你要在value中放置博客、新聞之類的所有文章內(nèi)容,就設(shè)大一點(diǎn),如果要放置的都是很小的內(nèi)容,那就設(shè)小一點(diǎn)。
25)? vm-pages 134217728設(shè)置交換文件的總的page數(shù)量,需要注意的是,page table信息會(huì)放在物理內(nèi)存中,每8個(gè)page就會(huì)占據(jù)RAM中的1個(gè)byte。總的虛擬內(nèi)存大小 = vm-page-size * vm-pages
26)??vm-max-threads4 設(shè)置VMIO同時(shí)使用的線程數(shù)量。因?yàn)樵谶M(jìn)行內(nèi)存交換時(shí),對(duì)數(shù)據(jù)有編碼和解碼的過(guò)程,所以盡管IO設(shè)備在硬件上本上不能支持很多的并發(fā)讀寫,但是還是如果你所保存的vlaue值比較大,將該值設(shè)大一些,還是能夠提升性能的
27)??glueoutputbufyes把小的輸出緩存放在一起,以便能夠在一個(gè)TCPpacket中為客戶端發(fā)送多個(gè)響應(yīng),具體原理和真實(shí)效果我不是很清楚。所以根據(jù)注釋,你不是很確定的時(shí)候就設(shè)置成yes
28)??hash-max-zipmap-entries在redis 2.0中引入了hash數(shù)據(jù)結(jié)構(gòu)。當(dāng)hash中包含超過(guò)指定元素個(gè)數(shù)并且最大的元素沒(méi)有超過(guò)臨界時(shí),hash將以一種特殊的編碼方式(大大減少內(nèi)存使用)來(lái)存儲(chǔ),這里可以設(shè)置這兩個(gè)臨界值
29)??activerehashingyes開啟之后,redis將在每100毫秒時(shí)使用1毫秒的CPU時(shí)間來(lái)對(duì)redis的hash表進(jìn)行重新hash,可以降低內(nèi)存的使用。當(dāng)你的使用場(chǎng)景中,有非常嚴(yán)格的實(shí)時(shí)性需要,不能夠接受Redis時(shí)不時(shí)的對(duì)請(qǐng)求有2毫秒的延遲的話,把這項(xiàng)配置為no。如果沒(méi)有這么嚴(yán)格的實(shí)時(shí)性要求,可以設(shè)置為yes,以便能夠盡可能快的釋放內(nèi)存
來(lái)源:http://www.360doc.com/content/14/0513/14/16202355_377235994.shtml
總結(jié)
以上是生活随笔為你收集整理的Redis安装部署配置说明的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 农行定期利率 整存整取的利率是1.75%
- 下一篇: 新材料概念龙头股 手里都是有真技术