1.冷熱資料分離,不要將所有資料全部都放到Redis中
雖然Redis支援持久化,但是Redis的資料存放區全部都是在記憶體中的,成本昂貴。建議根據業務只將高頻熱資料存放區到Redis中【QPS大於5000】,對於低頻冷資料可以使用MySQL/Elasticsearch/MongoDB等基於磁碟的儲存方式,不僅節省記憶體成本,而且資料量小在操作時速度更快、效率更高。 2.不同的業務資料要分開儲存
不要將不相關的業務資料都放到一個Redis執行個體中,建議新業務申請新的單獨執行個體。因為Redis為單線程處理,隔離儲存區 (Isolated Storage)會減少不同業務相互操作的影響,提高請求響應速度;同時也避免單個執行個體記憶體資料量膨脹過大,在出現異常情況時可以更快恢複服務。 3.規範Key的格式
合適的key,便於查看,統計,排錯。
比如:
“平台縮寫“+“:”+“項目名”+“:”+“業務含義”
例如:GW:TRADE:USERID
GW是新網關,TRADE是交易項目,USERID為業務ID。
":"-作為key分隔字元,方便用戶端工具作為目錄分級 4.儲存的Key一定要設定逾時時間
如果應用將Redis定位為緩衝Cache使用,對於存放的Key一定要設定逾時時間。因為若不設定,這些Key會一直佔用記憶體不釋放,造成極大的浪費,而且隨著時間的推移會導致記憶體佔用越來越大,直到達到伺服器記憶體上限。另外Key的逾時長短要根據業務綜合評估,而不是越長越好。(某些業務要求key長期有效。可以在每次寫入時,都設定逾時時間,讓逾時時間順延。)
public Boolean set( final byte [] key, final byte [] value, final long liveTime) { return redisTemplate.execute( new RedisCallback<Boolean>() { public Boolean doInRedis(RedisConnection connection) throws DataAccessException { connection.set(key, value); if (liveTime > 0 ) { connection.expire(key, liveTime); } |