redis小对象压缩

111 阅读1分钟

Redis 是一个非常耗费内存的数据库,它所有的数据都放在内存里。如果我们不注意节约使用内存,Redis 就会因为我们的无节制使用出现内存不足而崩溃。
1、ziplist:是一个紧凑的字节数组结构,每个元素直接都是紧挨着,数据结构如下图:

image.png 如果它存储的是hash 结构,那么key 和value 会作为两个entry被相邻存储。

> hset hello a 1
(integer) 1
> hset hello c 3
(integer) 1
> object encoding hello
”ziplist”

如果它存储的是zset 结构,那么value和score 会作为两个entry被相邻存储。
2、intset;是一个紧凑的整数数组结构,它用于存放元素都是整数的并且元素个数较少的set集合

3、存储界限:当集合对象的元素不断增加,或者某个 value 值过大,这种小对象存储也会被升级为标准结构: 下图为redis小对象存储结构的限定条件: image.png

4、内存回收机制

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

  • Redis 虽然无法保证立即回收已经删除的 key 的内存,但是它会重用那些尚未回收的空闲内存

  • flushdb:执行该命令,会使所有的key都干掉了,大部分之间使用的页面都完全干净了