Redis持久化储存不管是AOF文件还是RDB文件都会随着时间的推移越来越大。
可以尝试如下方案进行优化压缩数据的占用内存大小,方案执行过后,重写RedisAOF即可见效。
1、【位图算法】使用bit储存数据的值,这样储存的数据占用内存最小,获取数据最高效
2、使用hash、list等单一key的数据结构来重新储存之前的独立key的缓存,能够压缩内存80%,例如hash,储存结构式key-field-value,field以及value都不能超过一定的数量以及占用字节大小(例如redis.conf里的hash-max-ziplist-entries), (超过限制就不符合redis的ziplist压缩数据机制,储存的大小不会有变化) 所以要把所有的拥有大量分散的key用一部分hash结构来储存一定数量的缓存内容
3、如果maxmemory没有设置,Redis将会在找到合适的内存时继续进行分配,这样会逐步消耗掉所有空闲内存,建议配置一下这个上限。当内存达到上限时再执行写命令,Redis会返回一个内存不足的错误。 这可能会导致应用程序的错误,但不会因为内存不足导致整个机器宕机。
4、安装32位的Redis,32位每个key用到的内存非常少,但是注意32位Redis实例的内存使用量上限是4GB
==========================
dump.rdb 13M
增加100w条 string数据后
dump.rdb 977M 增长 964M
==========================
==========================
不压缩的hash
dump.rdb 13M
增加10000条 每条100条field 共100w条数据
dump.rdb 977M 增长 964M
==========================
==========================
listpack压缩
dump.rdb 13M
增加10000条 每条100条field 共100w条数据
dump.rdb 55M 增长 42M
==========================
==========================
listpack压缩
dump.rdb 13M
增加1000条 每条1000条field 共100w条数据
dump.rdb 43M 增长 30M
==========================