Redis基本类型和使用场景

string类型

key-value形式,主要用户存储用户信息。

list类型

是一个有序队列,可以灵活使用push pop两种方法,非常适合做有序队列的场景

hash类型相当于一个key里面存储了一个hashmap,适合存放字典数据。

set类型,无序唯一的一个集合,如果场景要求唯一的情况下适合使用。

zset类型,有序集合,非常适合做排行榜

压缩链表实现的,在高版本中listpack

跳表来实现的,跳表相当于多级链表去方便提高查询效率

跳表是如何查询元素节点?

当我们要去查询一个跳表节点的时候,跳表会从头节点的最高层开始,逐一遍历每一层。在遍历某一层的跳表节点时

如果当前节点的权重「小于」要查找的权重时,跳表就会访问该层上的下一个节点。

如果当前节点的权重「等于」要查找的权重时,并且当前节点的 SDS 类型数据「小于」要查找的数据时,跳表就会访问该层上的下一个节点。

若上面两个条件都不满足,或者下一个节点为空时,沿着下一层指针继续查找,这就相当于跳到了下一层接着查找。

Redis过期键的删除策略?

定时删除

相当于创建一个定时器,当到达过期时间,由定时器来执行删除操作,这种方式优点就是节省内存,到期就删除,可以快速释放不必要的内存空间,缺点就是多CPU的压力比较大。

惰性删除

相当于访问一个key的时候,如果发现过期就执行删除。这种方式极大的节省CPU的压力,但是对内存的压力比较大。

定期过期删除

这种方式是一种比较好的折中方案,周期性的轮询时效性数据,采用抽取的策略,利用过期数据占比的方式来控制删除频度。

目前Redis使用的是惰性和定期过期删除策略

内存淘汰策略