一、数据结构
string、list、hash、set、zset
二、管道
一次发送多个命令,节约往返时间
三、发布订阅
多个订阅,比如聊天,发布消息,订阅1用于实时展示,订阅2用户如kafka然后持久化mysql,订阅3存zset用于历史消息
四、穿透、击穿、雪崩
1、缓存穿透
缓存穿透:key对应的数据在数据源并不存在,每次针对此key的请求从缓存获取不到,请求都会到数据源,从而可能压垮数据源。

布隆过滤器可以使用redis的bitmap实现,多种hash算法标识
2、缓存击穿
缓存击穿:key对应的数据存在,但在redis中过期,此时若有大量并发请求过来,这些请求发现缓存过期一般都会从后端DB加载数据并回设到缓存,这个时候大并发的请求可能会瞬间把后端DB压垮。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aFknPXsN-1634102402867)(media/16330510918827/redis%E7%9B%B8%E5%85%B3-%E5%87%BB%E7%A9%BF-1.png)]](https://i-blog.csdnimg.cn/blog_migrate/3e65e267822e3b3cb52fe47046d52e8e.png)
互斥锁:获取锁成功回源db,获取锁失败sleep后再尝试获取锁。
3、缓存雪崩
缓存雪崩:与缓存击穿的区别在于这里针对很多key缓存
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GiM53p87-1634102402878)(media/16330510918827/redis%E7%9B%B8%E5%85%B3-%E9%9B%AA%E5%B4%A9.png)]](https://i-blog.csdnimg.cn/blog_migrate/c7d3a5052a0cfb55a961fa017360e5bc.png)
1、随机缓存的失效时间,治标不治本
2、加锁排队,体验较差
3、二级缓存,比如hbase等
4、缓存标识,缓存标识失效时间小于数据失效时间,标识没有就进队列,异步更新
五、相关策略
1、缓存删除策略
定时删除、惰性删除、主动删除
2、缓存淘汰策略
当内存不足时Redis会选择一些缓存元素进行删除
1、no-enviction:禁止驱逐数据,新写入操作会报错
2、volatile-lru:从已设置过期时间的数据集选择最近最少使用的数据淘汰
3、volatile-ttl:从已设置过期时间的数据集选择将要过期的数据淘汰
4、volatile-random:从已设置过期时间的数据集选择任意的数据淘汰
5、allkeys-lru:从数据集选择最近最少使用的数据淘汰
6、allkeys-random:从数据集选择任意的数据淘汰
3、集群策略
主从、sentinel、cluster
六、持久化
RDB:全量dump
AOF:采用日志形式记录每一次写操作,追加。
RDB原理
采用操作系统的api:fork()。fork()出来的进程共享其父类的内存数据。仅仅是共享fork()出子进程的那一刻的内存数据,后期主进程修改数据对子进程不可见,同理,子进程修改的数据对主进程也不可见。
七、主从数据同步原理
1、全量同步
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xZgx8JSY-1634102402881)(media/16330510918827/redis%E7%9B%B8%E5%85%B3-%E4%B8%BB%E4%BB%8E%E5%A4%8D%E5%88%B6%EF%BC%88%E5%85%A8%E9%87%8F%EF%BC%89.png)]](https://i-blog.csdnimg.cn/blog_migrate/c8e0fd807313b2e74df948ad7adba33c.png)
2、断点重续
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uvPTP66u-1634102402883)(media/16330510918827/redis%E7%9B%B8%E5%85%B3-%E4%B8%BB%E4%BB%8E%E5%A4%8D%E5%88%B6%EF%BC%88%E9%83%A8%E5%88%86%EF%BC%89.png)]](https://i-blog.csdnimg.cn/blog_migrate/ca63f5934b7296082250ed862d175cd0.png)
八、redis分片算法
hash算法 -> 一致性hash算法 -> redis cluster,hash slot算法
1、hash算法
hash值再对分片数取模,如果有一个master宕机,分片数发生变化,导致大量的key无法取到有效缓存,都穿透到数据库中。
2、一致性hash算法
计算缓存服务器的hash值,放到0~2的32次方的圆上,将key值计算hash值在0~2的32次方的圆上找到对应的值,然后顺时针找最近的缓存缓存服务器,这样只影响宕机的master上面的key,只有这些key才会穿透到数据库中,添加服务器的话,也只是影响添加的服务器的hash值逆时针到最近节点的key值。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SeBxoriD-1634102402891)(media/16330510918827/redis%E7%9B%B8%E5%85%B3-%E4%B8%80%E8%87%B4%E6%80%A7hash%E7%AE%97%E6%B3%95.png)]](https://i-blog.csdnimg.cn/blog_migrate/c89a3a6e6bb9ee3b47ebd0886bc69b5b.png)
3、hash slot算法
默认16384个槽,通过CRC16(key) % 16384得到槽位。key和槽是多对一,槽和缓存节点是多对一。

18万+

被折叠的 条评论
为什么被折叠?



