redis一个大list拆分为N个小list用压缩列表保存,可以更省内存。
列表对象保存的所有字符串元素的长度都小于64字节;
列表对象保存的元素数量小于512个;
下面将举例说明。
redis一个大list拆分为N个小list用压缩列表保存,可以更省内存。
列表对象保存的所有字符串元素的长度都小于64字节;
列表对象保存的元素数量小于512个;
下面将举例说明。
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文件。