摘要:1.为什么需要持久化 redis中的数据全部保存在内存中,如果突然宕机,数据就会全部丢失.为了防止这种事情发生,我们需要一种机制保证在宕机发生之后,我们重启服务内存中的数据还可以恢复,这就是redis的持久化机制. redis提供了三种持久化机制分别为RDB(Redis DataBase)方式,AO
阅读全文
摘要:1.为什么需要淘汰策略 当redis占用的内存超过服务器的为例内存的时候,就会触发系统的swap,这时内存回合磁盘频繁交换,导致redis性能急剧下降,这时对于访问频繁的redis来说,服务相当于不可用状态,为了防止出现这种情况,redis提供了maxmemory参数来控制redis占用的最大内存大
阅读全文
摘要:我们使用redis作为缓存服务器的时候有时候会希望我们写入的数据过一段时间自动失效.redis为此提供了键过期的功能,我们可以为我们保存在redis中的数据设置一个过期时间,等时间一到我们保存在redis中的数据就自动失效了.我们这里简略的说一下redis键过期的相关知识. 1.键过期的命令 1.1
阅读全文
摘要:1.为什么会定义quiklist 前面已经讲过了redis中list的一个实现ziplist,由于ziplist将所有数据保存在一片连续的内存空间中所以使用ziplist不会照成内存碎片,但是也正是这样导致了ziplist不适合存储过多的数据,因为这会对重新申请内存空间和复制元素造成很大压力.为了存
阅读全文
摘要:1.为什么使用 优势: 在普通的双向链表中因为保存了前一个结点和后一个节点的指针,所有容易照成空间的浪费,而且链表中的数据可以保存在不连续的内存空间中,这就很容易产生大量的内存碎片,从而影响内存的分配和读写效率. 为了解决内存利用率和内存碎片的问题,redis设计了ziplist.ziplist中的
阅读全文
摘要:dict为redis服务器中出现的使用最为频繁的复合型数据结构,不但在hash类型和zset中使用了dict结构,整个redis数据库就是一个大的字典表,带有过期时间的key也组成一个大的字典表. 1.dict的内部结构 1.1 dict的内部结构 typedef struct dict { dic
阅读全文
摘要:为什么需要SDS 字符串数据类型作为redis最基础的数据类型之一在redis中使用的也是最频繁的数据类型. 因为redis只有一个线程在执行指令,如果某一个指令执行时间过长其他指令都会排队等候,又因为在c语言中获取字符串长度的时间复杂度为O(n),并且每次在字符串扩容或者缩容的时候,c语言中的字符
阅读全文