Redis深入学习(六)

197 阅读2分钟

「这是我参与2022首次更文挑战的第27天,活动详情查看:2022首次更文挑战

  • skiplist和平衡树、哈希表对比

    • 哈希表不是有序排列的,只能找到key对应的值,无法做范围查询,而平衡树skiplist能够实现范围查询。
    • 在做范围查找的时候,平衡树操作相对复杂,先查找出小值,之后中序遍历查找不超过范围最大值的节点。如果不是个完全平衡二叉树,这里的中序遍历并不简单。而跳表找到最小值以后,直接进行若干个遍历就ok找到范围最大值。
    • 平衡树插入删除操作都可能引发子树的调整,逻辑调整,左旋右旋之类的。而跳表只要改指针
    • 查找单个key,hash的时间复杂度是O(1),是最快的。
    • 算法实现上,跳表简单得多。

范围查询,而平衡树skiplist能够实现范围查询。

  • 在做范围查找的时候,平衡树操作相对复杂,先查找出小值,之后中序遍历查找不超过范围最大值的节点。如果不是个完全平衡二叉树,这里的中序遍历并不简单。而跳表找到最小值以后,直接进行若干个遍历就ok找到范围最大值。

  • 平衡树插入删除操作都可能引发子树的调整,逻辑调整,左旋右旋之类的。而跳表只要改指针

  • 查找单个key,hash的时间复杂度是O(1),是最快的。

  • 算法实现上,跳表简单得多。

  • 缓存失效

    缓存穿透:key不在缓存中存在,也不存在于数据库,但是每次都会会去数据库找--这个有点扯,办法是给他缓存一个空值。

    缓存击穿:缓存存的值过期了,这个时候有大量的并发过来,就会压垮DB。 用setnx锁的方式,来锁住访问请求数量。

    缓存雪崩:假如缓存层宕机了,全部的key都没了,这个时候db的压力也就大了。解决办法:一个是集群,一个是在启动redis的时候限流,一个是数据预热,把可能的缓存先加载一次。