redis(二)
2022-02-15 本文已影响0人
go_2021
雪崩
Redis 高可用,主从+哨兵,Redis cluster,避免全盘崩溃。
再加一层本地缓存。
限流:
dubbo限流 https://blog.csdn.net/u012965203/article/details/98253914 executes直接限制
cloud限流 Hystrix
热点key过期
- 统一管理(多热点key,需要额外功能区标记热点数据)
热点统一刷新,常驻内存。(微信token) - 单个控制
-
100个并发过期了- 执行-> 加锁,2次检查redis,不存在的话,读库,存
redis
。(第一个查库,剩下的99个one by one
读redis
) - 双
key
,一个key1
啥也不存 (5分钟过期),一个key2
存data
(10分钟过期)。
100个并发key1没了- 执行-> 获取毫秒锁 -> 成功 ->
2次检查redis, 存上key1,读库,刷新key2data
。
-
100个并发过期了- 执行-> 加锁,2次检查redis,不存在的话,读库,存
key可以不存在
- 校验参数
- 存空值
- 加一层布隆
- 增加系统复杂度
- 误判情况
- 不能删除
布隆
整多轮(一般8次)hash计算 一轮存入一个bitmap里
8轮下来发现 没有存储数据 就存上 如果存上了就说明 可以已经插入过了 直接过滤掉
这算法会有误判的情况发生
如果要0误判 可以在被过滤之后 插入hashSet中 之后再来一轮补录。
事务
是个命令打包运行的机制,保证按照顺序执行,但是不支持回滚(一般也不会有错误)。watch可以监听一个值,如果改变就取消执行。
机器故障重启,aop中的事务不完整会被删除。
缓存一致性方案
- 更新redis 更新mysql redis脏数据
- 更新mysql 更新redis 多次执行
a更新mysql 更新redis
b更新mysql 更新redis
b更新mysql 更新redis
性能消耗比较大,其实如果没有读操作的话,redis更新比较多余,用删除代替更新减少性能开销 - 删除redis 更新mysql
- 更新mysql 删除redis