0%

redis一个大list拆分为N个小list用压缩列表保存,可以更省内存。

列表对象保存的所有字符串元素的长度都小于64字节;
列表对象保存的元素数量小于512个;

下面将举例说明。

Read more »

AOF全称为Append Only File,是redis的一种刷盘策略。AOF和RDB可以同时存在,但是都是子进程大量写磁盘,非常影响性能,故不推荐。
其主要内容为:

1、将每次更新的命令都写入redisServer对象中的AOF缓存区中。

2、AOF缓存区会按照配置,开启后台线程,用实时同步写入、每隔1s和操作系统安排写入三种模式,将缓存区刷到AOF文件中。

3、上述三种模式中,实时同步写入对于性能损耗较大。每隔1s刷盘较为均衡。操作系统控制刷盘则最不可控。

4、redis在启动的时候,会按照配置去读取AOF文件。按照读取到的命令逐次执行。

但是也存在问题:随着运行时间的增长,命令越来越多,AOF文件也越来越大。故需要进行重写操作:

具体步骤为:

1、开启子进程,遍历每个db,读取k-v结构的所有数据,生成最简单的set or add命令(相当于备份了一次数据)。

2、执行重写后,将每次写的操作都刷入AOF缓存区的同时,再刷入AOF重写区。

3、读取redis各个db的数据完成后,子进程信号量通知父进程。父进程调用处理函数,将AOF重写区的命令追加到新的AOF文件中。最后再原子性的替换旧的AOF文件。

RDB简介

RDB的全称是Redis Database File,redis的RDB刷盘为异步刷盘,配置N秒内产生了M次更新操作则触发刷盘。
redis内部会每100ms进行一次检测。判断是否需要刷盘。

刷盘的配置:

save 900 1   //表示900s内有一次修改
save 300 10  //表示300s内有10次修改
save 60 10000 //表示60s内有10000次修改

满足上述条件后就会通过BGSAVE命令刷盘

刷盘有两个命令,SAVE和BGSAVE(Background Save)

Read more »