1. 縮短鍵值的長度 縮短值的長度才是關(guān)鍵,如果值是一個大的業(yè)務(wù)對象,可以將對象序列化成二進制數(shù)組;
首先應(yīng)該在業(yè)務(wù)上進行精簡,去掉不必要的屬性,避免存儲一些沒用的數(shù)據(jù);
其次是序列化的工具選擇上,應(yīng)該選擇更高效的序列化工具來降低字節(jié)數(shù)組大小; 以JAVA為例,內(nèi)置的序列化方式無論從速度還是壓縮比都不盡如人意,這時可以選擇更高效的序列化工具,如: protostuff,kryo等
2. 共享對象池 對象共享池指Redis內(nèi)部維護[0-9999]的整數(shù)對象池。創(chuàng)建大量的整數(shù)類型redisObject存在內(nèi)存開銷,每個redisObject內(nèi)部結(jié)構(gòu)至少占16字節(jié),甚至超過了整數(shù)自身空間消耗。所以Redis內(nèi)存維護一個[0-9999]的整數(shù)對象池,用于節(jié)約內(nèi)存。 除了整數(shù)值對象,其他類型如list,hash,set,zset內(nèi)部元素也可以使用整數(shù)對象池。因此開發(fā)中在滿足需求的前提下,盡量使用整數(shù)對象以節(jié)省內(nèi)存。
3. 字符串優(yōu)化
4. 編碼優(yōu)化
5. 控制key的數(shù)量