这篇文章上次修改于 2034 天前,可能其部分内容已经发生变化,如有疑问可询问作者。 1.并发写, 答:由于redis是单线程的,可以在内存中合并写操作来优化,而且省去了io和序列化操作 2.redis的持久化方式 + RDB + AOF 3.redis 提供了主从复制功能,即一份数据有多份副本 4.redis 中的字符串并非C中的字符串实现,而是用SDS(simple dynamic string)的抽象类型,键值对的key和value都是一个SDS类型。SDS还用来缓冲 + SDS初始大小小于1M,则分配N+1+N的空间,如果大于1M,则分配30MB,目的是防止字符串修改溢出和重新分配空间 + 惰性回收,如果SDS字符串缩短了,那么free属性会标识剩余的空间,而不是直接收回。 + 二进制安全,C语言中,字符串必须符合某种编码,如ASCII。比如遇到\0会认为是字符串结尾,但是SDS没有这个假设和限制,村进去的二进制是什么样,读取的时候就是什么样。 5.当redis列表的值字符串比较大时,redis会采用链表作为数据结构 6.redis map的实现 + rehash ---扩张---大于等于使用×2的数字。数字为2的n次方 + reshash --缩减----小于等于使用的数字,数字为2的n次方 + 渐进式rehash,每次增删改查都会出发rehash 7.实际上外面包了一层对象,来决定最终的类型。当我们创建一个键值对的时候,我们会创建两个
没有评论