下面內(nèi)容來源于Quora上的一個提問,問題是使用Redis需要避免的五個問題。而回答中超出了五個問題的范疇,描述了五個使用Redis的注意事項。如果你在使用或者考慮使用Redis,可能你可以學習一下下面的一些建議,避免一下提到的問題。

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

雖然說Redis支持多個數(shù)據(jù)庫(默認32個,可以配置更多),但是除了默認的0號庫以外,其它的都需要通過一個額外請求才能使用。所以用前綴作為命名空間可能會更明智一點。

另外,在使用前綴作為命名空間區(qū)隔不同key的時候,最好在程序中使用全局配置來實現(xiàn),直接在代碼里寫前綴的做法要嚴格避免,這樣可維護性實在太差了。

2.創(chuàng)建一個類似 ”registry” 的key用于標記key使用情況

為了更好的管理你的key值的使用,比如哪一類key值是屬于哪個業(yè)務(wù)的,你通常會在內(nèi)部wiki或者什么地方創(chuàng)建一個文檔,通過查詢這個文檔,我們能夠知道Redis中的key都是什么作用。

與之結(jié)合,一個推薦的做法是,在Redis里面保存一個registry值,這個值的名字可以類似于 __key_registry__ 這樣的,這個key對應(yīng)的value就是你文檔的位置,這樣我們在使用Redis的時候,就能通過直接查詢這個值獲取到當前Redis的使用情況了。

3.注意垃圾回收

Redis是一個提供持久化功能的內(nèi)存數(shù)據(jù)庫,如果你不指定上面值的過期時間,并且也不進行定期的清理工作,那么你的Redis內(nèi)存占用會越來越大,當有一天它超過了系統(tǒng)可用內(nèi)存,那么swap上場,離性能陡降的時間就不遠了。所以在Redis中保存數(shù)據(jù)時,一定要預先考慮好數(shù)據(jù)的生命周期,這有很多方法可以實現(xiàn)。

比如你可以采用Redis自帶的過期時間為你的數(shù)據(jù)設(shè)定過期時間。但是自動過期有一個問題,很有可能導致你還有大量內(nèi)存可用時,就讓key過期去釋放內(nèi)存,或者是內(nèi)存已經(jīng)不足了key還沒有過期。

如果你想更精準的控制你的數(shù)據(jù)過期,你可以用一個ZSET來維護你的數(shù)據(jù)更新程度,你可以用時間戳作為score值,每次更新操作時更新一下score,這樣你就得到了一個按更新時間排序序列串,你可以輕松地找到最老的數(shù)據(jù),并且從最老的數(shù)據(jù)開始進行刪除,一直刪除到你的空間足夠為止。

4.設(shè)計好你的Sharding機制

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

所以你可能需要考慮好數(shù)據(jù)量大了后的分片問題,比如你可以在只有一臺機器的時候就在程序上設(shè)定一致性hash機制,雖然剛開始所有數(shù)據(jù)都hash到一臺機器,但是當你機器越加越多的時候,你就只需要遷移少量的數(shù)據(jù)就能完成了。

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

當你使用Redis構(gòu)建你的服務(wù)的時候,一定要記住,你只是找了一個合適的工具來實現(xiàn)你需要的功能。而不是說你在用Redis構(gòu)建一個服務(wù),這是很不同的,你把Redis當作你很多工具中的一個,只在合適使用的時候再使用它,在不合適的時候選擇其它的方法。

來源:www.quora.com