1、縮減鍵值對象
縮減鍵(key)和值(value)的長度,
-
key長度:如在設計鍵時,在完整描述業務情況下,鍵值越短越好。
-
value長度:值對象縮減比較復雜,常見需求是把業務對象序列化成二進制數組放入Redis。首先應該在業務上精簡業務對象,去掉不必要的屬性避免存儲無效數據。其次在序列化工具選擇上,應該選擇更高效的序列化工具來降低字節數組大小。以JAVA為例,內置的序列化方式無論從速度還是壓縮比都不盡如人意,這時可以選擇更高效的序列化工具,如: protostuff,kryo等,下圖是JAVA常見序列化工具空間壓縮對比。
2、共享對象池
對象共享池指Redis內部維護[0-9999]的整數對象池。創建大量的整數類型redisObject存在內存開銷,每個redisObject內部結構至少占16字節,甚至超過了整數自身空間消耗。所以Redis內存維護一個[0-9999]的整數對象池,用於節約內存。 除了整數值對象,其他類型如list,hash,set,zset內部元素也可以使用整數對象池。因此開發中在滿足需求的前提下,盡量使用整數對象以節省內存。
3、字符串優化
4、編碼優化
5、控制key的數量
參考鏈接:Redis的內存優化