Redis 作为缓存服务器的配置
轉(zhuǎn)自:http://www.open-open.com/lib/view/open1419670554109.html#
隨著Redis的發(fā)展,越來越多的架構(gòu)用它取代了memcached作為緩存服務(wù)器的角色,它有幾個很突出的特點:
1. 除了Hash,還提供了Sorted Set, List等數(shù)據(jù)結(jié)構(gòu)
2. 可以持久化到磁盤
3. 支持cluster (3.0)
它的性能和memcached不相上下,再加上流行的其他組件(比如隊列)也會用到redis,從架構(gòu)簡單出發(fā),已經(jīng)沒有必要混用redis和memcached了。
寫篇短文介紹一下用redis作為緩存服務(wù)器配置時候需要注意幾個點。
Redis配置
作為緩存服務(wù)器,如果不加以限制內(nèi)存的話,就很有可能出現(xiàn)將整臺服務(wù)器內(nèi)存都耗光的情況,可以在redis的配置文件里面設(shè)置:
# 限定最多使用1.5GB內(nèi)存 maxmemory 1536mb如果內(nèi)存到達(dá)了指定的上限,還要往redis里面添加更多的緩存內(nèi)容,需要設(shè)置清理內(nèi)容的策略:
# 設(shè)置策略為清理最少使用的key對應(yīng)的數(shù)據(jù) maxmemory-policy allkeys-lru清理策略有多種,redis的官方文檔有一篇很詳細(xì)的說明:?http://redis.io/topics/lru-cache
Redis監(jiān)控
redis提供了INFO這個命令,能夠隨時監(jiān)控服務(wù)器的狀態(tài),只用telnet到對應(yīng)服務(wù)器的端口,執(zhí)行命令即可:
telnet localhost 6379 info在輸出的信息里面有這幾項和緩存的狀態(tài)比較有關(guān)系:
keyspace_hits:14414110 keyspace_misses:3228654 used_memory:433264648 expired_keys:1333536 evicted_keys:1547380 通過計算hits和miss,我們可以得到緩存的命中率:14414110 / (14414110 + 3228654) = 81% ,一個緩存失效機制,和過期時間設(shè)計良好的系統(tǒng),命中率可以做到95%以上,對于整體性能提升是很大的。
used_memory,expired_keys,evicted_keys這3個信息的具體含義,redis的官方也有一篇很詳細(xì)的說明:?http://redis.io/commands/info
有個ruby gem叫redis-stat,它利用INFO命令展現(xiàn)出更直觀的信息報表,推薦:
https://github.com/junegunn/redis-stat
優(yōu)化Rails的緩存配置
Rails在用redis作為緩存的時候,配置很簡單,官方文檔是用schema的方式來寫的:
config.cache_store = :redis_store, "redis://localhost:6379/0/cache"由于實在太簡單了,很多人就直接用這個默認(rèn)設(shè)置了,但實際上還有一些很有用的參數(shù)可以通過hash options的方式來寫,比如壓縮超過32K的數(shù)據(jù)壓縮以后再放入緩存,再比如設(shè)置默認(rèn)所有的key失效時間為8小時:
config.cache_store = :redis_store, {:host => 'redis.server', :port => 6379, :compress => true, :expires_in => 8.hours, :compress_threshold => 32.kilobytes} 用一個實際案例來作為例子,一臺redis緩存服務(wù)器在優(yōu)化配置之前,占用4.2G左右的內(nèi)存,緩存命中率在70%左右。
我們先在服務(wù)器上執(zhí)行BGSAVE命令,將內(nèi)存dump下來,然后用https://github.com/sripathikrishnan/redis-rdb-tools?這個工具,將dump的數(shù)據(jù),解析成csv文件:
通過分析占用內(nèi)存比較大的key,發(fā)現(xiàn)有30%左右的相同類型key,用了95%的內(nèi)存,這些緩存大部分是html的片段緩存,通過設(shè)置compress_threshold和compress參數(shù),讓整體內(nèi)存占用從4.2G,下降到了1.3G。
來自:https://ruby-china.org/topics/22761
總結(jié)
以上是生活随笔為你收集整理的Redis 作为缓存服务器的配置的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 慎用MySQL replace语句
- 下一篇: 一个MySQL存储过程的模板