目录

SDS 字符串结构

redis用自己创建的结构SDS来存储字符串

struct sdshdr{
	int len;  // 已分配但未被使用的字节
	int free; // 内容长度
	char buf[]; // 内容存储
}

redis是用c语言写的,相比c语言的字符串结构有什么好处呢?

  1. 有len字段:,所以获取的复杂度有o(N)变成o(1),
  2. 有free字段:可以实现内存的预分配,和惰性回收

跳表

核心思想是给有序的list创建“索引”,加快搜索过程

hash算法

有序集合

用了2种算法

压缩列表

每个压缩的元素由3各部分组成,

改变元素大大小会导致内存的重新分配 假如第一个元素的内容长度又253增加到255时,导致第二个元素由之前1个字节存储的长度变成了5个字节极端情况(恰好第二个元素的长度也由253增加到257,然后导致第三个元素重新分配内存…..一直传递下去)

这也叫连锁更新

删除策略

发布订阅

发布订阅,订阅是阻塞的(类似开启了一个socket一直监听)

事务

lua脚本(服务端代理模式)