在大型分佈式系統架構中,必須選擇適合的緩存技術以應對高併發,實現系統相應的高性能,酷客多小程序通過慎重選型,選擇了採用基於騰訊雲服務的Redis彈性緩存技術,結合Redis官方推薦的.NET驅動類庫Service.Stack.Redis,實現Redis彈性緩存在系統中的應用。sql
現針對Redis在實際應用中需注意的要點,就以下幾個方面進行總結:數據庫
在企業級應用過程,任何技術的引入都須要考慮可能產生的各類影響,對於緩存應用來講,首先須要考慮的是內存的佔用情況。對於應用系統來講,內存是極其寶貴的資源,對於每個存儲到Redis緩存中的內容,都必須嚴格控制其內容的有效性和存儲期限,具體須要注意的事項以下:小程序
a) 使用合適的命名方法,能夠簡化存儲項的管理。建議使用帶有業務意義的名稱,能夠採用相似DotNet命名空間的相似命名管理方式(可以使用冒號來劃分鍵名,例如Product:Category 鍵名來存儲商品分類數據),這樣有助於緩存數據的數據管理及後期數據的遷移,刪除等緩存
b) 進行數據刪除時,需注意同時刪除掉相關聯無效的級聯數據數據結構
a) 採用合適命名方式的同時,要控制鍵的名稱長度,緩存數據量達到必定程度時,鍵(Key)所佔用的存儲空間也會是內存的一筆較大的開銷,所以須要嚴格控制鍵的長度。架構
a) 可使用list的狀況下儘可能用list代替set。若是你不須要使用set特性,List在使用更少內存的狀況下能夠提供比set更快的速度。併發
b) Sorted sets是及其昂貴的數據結構,不論是對內存的消耗仍是基本操做時的開銷。若是隻是須要一個存儲查詢記錄的場景,不在乎排序這樣的屬性,那麼建議使用哈希表結構來存儲。nosql
對於在系統中實際對於Redis的使用,結合酷客多實際使用業務,能夠考慮在以下幾個場景中分佈式
a) 例如能夠將 最新100條評論Id 放在Redis的List中高併發
b) 使用LPUSH latest.comments<ID>命令,向list集合中插入數據
c) 插入完成後再用LTRIM latest.comments 0 100命令使其永遠只保存最近100條
a) 取Top N操做 按照某個條件爲權重,使用sorted set,將要排序的值設置成sorted set的score,將具體的數據設置成相應的value,每次只須要執行一條ZADD命令便可。
d) 使用list能夠構建隊列,使用SortSet可構建有優先級要求的隊列
e) 最基本的應用,其整體性能優於Memcached,數據結構更加豐富實用
a) Sorted set的score設計成過時時間戳,經過過時時間排序按期清理數據,或根據此依據按期清理數據庫中過時數據(官網推薦的使用場景之一,感受應用方式不太好,不推薦)
f) Redis的Pub/Sub系統能夠構建實時的消息系統,好比不少用Pub/Sub構建的實時聊天系統的例子(網上推薦,暫未用到)
Rdis自身的過時策略爲兩種結合使用:
a) 進行 get 或setnx 時,先檢查key是否過時,若過時,則刪除key,並執行相關操做
b) 若沒過時,直接執行相關操做
按期循環 隨機查是否過時,查到後,刪除
當進行命令操做Redis緩存的數據時,需注意操做命令對Redis中數據的的過時時間的影響,簡單歸納以下:
關於過時時間:
Redis2.4中expire精度不高,一般在0到1秒間,Redis2.6之後expire精度能夠控制在0到1毫秒內
做者:酷客多小程序 徐冰