深入Redis(十六)小对象压缩

小对象压缩

Redis是一个内存数据库,十分耗内存。虽然作者为Redis优化了数据结构的内存占用,但这些优化牺牲了代码的可读性。

32bit VS 64bit

如果Redis使用32bit进行编译,内部所有数据结构使用的指针空间占用会少一半,如果使用内存不超过4G,可以考虑使用32bit。

如果不足还可以通过增加实例的方式来解决。

小对象压缩存储(ziplist)

如果Redis内部管理的集合数据结构很小,它就会使用紧凑存储形式压缩存储。

Redis的ziplist是一个紧凑的字节数组结构,它将标准类型压缩成一维数组,当集合对象元素不断增加,超过阈值就会升级为标准结构。

内存回收机制

Redis并不总是将空闲空间立即归还给操作系统,操作系统回收内存以页为单位,如果这个页上只要有一个key还在使用,那么这一页都不能被回收。

Redis虽然不能保证立即回收已经删除的key占用的内存,但会重用那些尚未回收的空闲内存。

内存分配算法

Redis内存分配细节交给第三方库去实现,默认使用jemalloc(facebook),也可以使用tcmalloc(google),因为前者性能稍好,所以默认使用。

猜你喜欢

转载自www.cnblogs.com/ikct2017/p/9503507.html