缓存穿透、缓存击穿、雪崩
布隆过滤器会产生误判:
在Redis前面添加一层布隆过滤器,请求先在布隆过滤器中判断,如果布隆过滤器不存在时,直接返回,不再反问Redis和MySQL。
如果布隆过滤器中存在时,再访问Redis,再访问数据库。
完美解决缓存穿透问题
双写一致性
想要强一致性:
异步最终一致性:
数据过期策略和淘汰策略
分布式锁
单体项目部署使用本地锁:
Redis集群(哨兵模式)脑裂
脑裂:因网路延迟原因 sentinel 检测不到 master,于是重新选举master,但原来master依旧在 接收客户端发来的请求,当网络延迟恢复后,强制将旧 master 变为 slave,然后再清空数 据,与新的 master 同步数据。再这个过程中客户端的请求数据将会丢失
解决:redis有两个配置
min-replicas-to-write 1 # 表示最少的salve节点为1个 表示最少的Salve节点为1个
min-replicas-max-lag 5 # 表示数据复制和同步的延迟不能超过5秒 最小复制-最大滞后5表示数据 复制和同步的延迟不能超过5秒
当以上两个条件有其一不满足则拒绝客户端请求,防止数据丢失
Redis为什么这么快