五個Redis使用者須要注意的地方

下面內容來源於Quora上的一個提問,問題是使用Redis須要避免的五個問題。而回答中超出了五個問題的範疇,描述了五個使用Redis的注意事項。若是你在使用或者考慮使用Redis,可能你能夠學習一下下面的一些建議,避免一下提到的問題。數據庫

1.使用key值前綴來做命名空間

雖說Redis支持多個數據庫(默認32個,能夠配置更多),可是除了默認的0號庫之外,其它的都須要經過一個額外請求才能使用。因此用前綴做爲命名空間可能會更明智一點。工具

另外,在使用前綴做爲命名空間區隔不一樣key的時候,最好在程序中使用全局配置來實現,直接在代碼裏寫前綴的作法要嚴格避免,這樣可維護性實在太差了。性能

2.建立一個相似 」registry」 的key用於標記key使用狀況

爲了更好的管理你的key值的使用,好比哪一類key值是屬於哪一個業務的,你一般會在內部wiki或者什麼地方建立一個文檔,經過查詢這個文檔,咱們可以知道Redis中的key都是什麼做用。學習

與之結合,一個推薦的作法是,在Redis裏面保存一個registry值,這個值的名字能夠相似於 __key_registry__ 這樣的,這個key對應的value就是你文檔的位置,這樣咱們在使用Redis的時候,就能經過直接查詢這個值獲取到當前Redis的使用狀況了。spa

3.注意垃圾回收

Redis是一個提供持久化功能的內存數據庫,若是你不指定上面值的過時時間,而且也不進行按期的清理工做,那麼你的Redis內存佔用會愈來愈大,當有一天它超過了系統可用內存,那麼swap上場,離性能陡降的時間就不遠了。因此在Redis中保存數據時,必定要預先考慮好數據的生命週期,這有不少方法能夠實現。設計

好比你能夠採用Redis自帶的過時時間爲你的數據設定過時時間。可是自動過時有一個問題,頗有可能致使你還有大量內存可用時,就讓key過時去釋放內存,或者是內存已經不足了key尚未過時。排序

若是你想更精準的控制你的數據過時,你能夠用一個ZSET來維護你的數據更新程度,你能夠用時間戳做爲score值,每次更新操做時更新一下score,這樣你就獲得了一個按更新時間排序序列串,你能夠輕鬆地找到最老的數據,而且從最老的數據開始進行刪除,一直刪除到你的空間足夠爲止。生命週期

4.設計好你的Sharding機制

Redis目前並不支持Sharding,可是當你的數據量超過單機內存時,你不得不考慮Sharding的事(注意:Slave不是用來作Sharding操做的,只是數據的一個備份和讀寫分離而已)。內存

因此你可能須要考慮好數據量大了後的分片問題,好比你能夠在只有一臺機器的時候就在程序上設定一致性hash機制,雖然剛開始全部數據都hash到一臺機器,可是當你機器越加越多的時候,你就只須要遷移少許的數據就能完成了。文檔

5.不要有個錘子看哪都是釘子

當你使用Redis構建你的服務的時候,必定要記住,你只是找了一個合適的工具來實現你須要的功能。而不是說你在用Redis構建一個服務,這是很不一樣的,你把Redis看成你不少工具中的一個,只在合適使用的時候再使用它,在不合適的時候選擇其它的方法。

相關文章
相關標籤/搜索