如果用普通的分布式锁实现, 最后抢到的人,要等前面99个人抢完
优化方案:可用分段锁, 降低锁的粒度, 比如1-10库存用锁product:101_1,11-20库存用锁product:101_2等, 提高并发性能
代码:==
问题1:99%的商品都是冷门商品, 不应该全部放在redis缓存
解决:设置缓存有效期, 例如一天,每次查询时将锁延期(ttl命令很快), 实现冷热数据分离。如果每天访问的热数据还是很多, 可以用缓存淘汰策略。
问题2: 缓存击穿。例如某些批量操作, 批量查库, 批量放缓存一天, 缓存同时过期, 下次批量操作时, 大量请求直接打到数据库,数据库顶多只能扛几万的qps
例如某个热门商品被后台小二误删, 客户端还有很多人访问,会有大量请求持续打到数据库;
解决:
问题4:黑客用脚本批量访问很多不存在的商品id,导致Redis缓存很多不存在的值是NULL商品
大纲
ReadLock解决以及缺陷 > 主从同步 & 持久化
减库存场景 > 分段锁降低锁粒度
冷热数据分离 > 查数据时,锁延期
缓存击穿,缓存穿透 随机时间, 缓存NULL(NULL过期时间不用太长), 布隆过滤器
冷门数据突变成热点数据问题 分布式锁 双重检查
缓存数据双写不一致问题 > 读多写少 加读写锁(Redisson_WriteReadLock)
部分场景tryLock代替lock 串行转并行
Redis雪崩 大V发热点新闻 大量请求同时访问Redis
1. 限流
2. 多级缓存(加一层JVM缓存),encache设置过期时间, mq广播更新本地缓存
3. 热点缓存系统, 客户端只查JVM缓存, 服务端更新JVM缓存
原文地址:https://blog.csdn.net/weixin_64027360/article/details/134725410
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_24218.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!