Redis 作為快取服務器的配置

來源:互聯網
上載者:User

標籤:

 

隨著redis的發展,越來越多的架構用它取代了memcached作為快取服務器的角色,它有幾個很突出的特點:
1. 除了Hash,還提供了Sorted Set, List等資料結構
2. 可以持久化到磁碟
3. 支援cluster (3.0)

它的效能和memcached不相上下,再加上流行的其他組件(比如隊列)也會用到redis,從架構簡單出發,已經沒有必要混用redis和memcached了。

寫篇短文介紹一下用redis作為快取服務器配置時候需要注意幾個點。

Redis配置

作為快取服務器,如果不加以限制記憶體的話,就很有可能出現將整台伺服器記憶體都耗光的情況,可以在redis的設定檔裡面設定:

如果記憶體到達了指定的上限,還要往redis裡面添加更多的緩衝內容,需要設定清理內容的策略:

1

2

maxmemory-policy allkeys-lru

清理策略有多種,redis的官方文檔有一篇很詳細的說明: http://redis.io/topics/lru-cache

Redis監控

redis提供了INFO這個命令,能夠隨時監控伺服器的狀態,只用telnet到對應伺服器的連接埠,執行命令即可:

1

2

telnet localhost 6379

info

在輸出的資訊裡面有這幾項和緩衝的狀態比較有關係:

1

2

3

4

5

keyspace_hits:14414110

keyspace_misses:3228654

used_memory:433264648

expired_keys:1333536

evicted_keys:1547380

通過計算hits和miss,我們可以得到緩衝的命中率:14414110 / (14414110 + 3228654) = 81% ,一個緩衝失效機制,和到期時間設計良好的系統,命中率可以做到95%以上,對於整體效能提升是很大的。
used_memory,expired_keys,evicted_keys這3個資訊的具體含義,redis的官方也有一篇很詳細的說明: http://redis.io/commands/info

有個ruby gem叫redis-stat,它利用INFO命令展現出更直觀的資訊報表,推薦:
https://github.com/junegunn/redis-stat

最佳化Rails的緩衝配置

Rails在用redis作為緩衝的時候,配置很簡單,官方文檔是用schema的方式來寫的:

1

config.cache_store = :redis_store, "redis://localhost:6379/0/cache"

由於實在太簡單了,很多人就直接用這個預設設定了,但實際上還有一些很有用的參數可以通過hash options的方式來寫,比如壓縮超過32K的資料壓縮以後再放入緩衝,再比如設定預設所有的key失效時間為8小時:

1

config.cache_store = :redis_store, {:host => ‘redis.server‘, :port => 6379, :compress => true, :expires_in => 8.hours, :compress_threshold => 32.kilobytes}

用一個實際案例來作為例子,一台redis快取服務器在最佳化配置之前,佔用4.2G左右的記憶體,快取命中率在70%左右。
我們先在伺服器上執行BGSAVE命令,將記憶體dump下來,然後用 https://github.com/sripathikrishnan/redis-rdb-tools 這個工具,將dump的資料,解析成csv檔案:

1

rdb -c memory /var/redis/6379/dump.rdb > memory.csv

用excel開啟分析,按key進行排序和統計,我們可以看到哪一些類型的緩衝在伺服器上最多,調整這個類型緩衝的失效時間和失效機制,再通過redis-stat來觀察進行微調,提高整體的命中率。
通過分析佔用記憶體比較大的key,發現有30%左右的相同類型key,用了95%的記憶體,這些緩衝大部分是html的片段快取,通過設定compress_threshold和compress參數,讓整體記憶體佔用從4.2G,下降到了1.3G。

來自:https://ruby-china.org/topics/22761

Redis 作為快取服務器的配置

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.