「这是我参与2022首次更文挑战的第27天,活动详情查看:2022首次更文挑战」
-
skiplist和平衡树、哈希表对比
- 哈希表不是有序排列的,只能找到key对应的值,无法做范围查询,而平衡树skiplist能够实现范围查询。
- 在做范围查找的时候,平衡树操作相对复杂,先查找出小值,之后中序遍历查找不超过范围最大值的节点。如果不是个完全平衡二叉树,这里的中序遍历并不简单。而跳表找到最小值以后,直接进行若干个遍历就ok找到范围最大值。
- 平衡树插入删除操作都可能引发子树的调整,逻辑调整,左旋右旋之类的。而跳表只要改指针
- 查找单个key,hash的时间复杂度是O(1),是最快的。
- 算法实现上,跳表简单得多。
范围查询,而平衡树skiplist能够实现范围查询。
-
在做范围查找的时候,平衡树操作相对复杂,先查找出小值,之后中序遍历查找不超过范围最大值的节点。如果不是个完全平衡二叉树,这里的中序遍历并不简单。而跳表找到最小值以后,直接进行若干个遍历就ok找到范围最大值。
-
平衡树插入删除操作都可能引发子树的调整,逻辑调整,左旋右旋之类的。而跳表只要改指针
-
查找单个key,hash的时间复杂度是O(1),是最快的。
-
算法实现上,跳表简单得多。
-
缓存失效
缓存穿透:key不在缓存中存在,也不存在于数据库,但是每次都会会去数据库找--这个有点扯,办法是给他缓存一个空值。
缓存击穿:缓存存的值过期了,这个时候有大量的并发过来,就会压垮DB。 用setnx锁的方式,来锁住访问请求数量。
缓存雪崩:假如缓存层宕机了,全部的key都没了,这个时候db的压力也就大了。解决办法:一个是集群,一个是在启动redis的时候限流,一个是数据预热,把可能的缓存先加载一次。