分布式-redisson

分布式锁redisson

加锁流程

  1. redisson底层通过lua脚本实现加锁的原子性
  2. lock动作包含:加锁、设置超时时间、锁续命
  3. 未获取到锁的线程通过获取信号量许可等待,所释放后释放信号量通知等待线程

缓存相关问题

  1. 缓存失效(击穿):由于大批量缓存在同一时间失效可能导致大量请求同时穿透缓存直达数据库,可能会造成数据库瞬间压力过大甚至挂掉,对于这种情况我们在批量增加缓存时最好将这一批数据的缓存过期时间设置为一个时间段内的不同时间。
  2. 缓存穿透:缓存穿透是指查询一个根本不存在的数据,缓存层和存储层都不会命中,通常出于容错的考虑,如果从存储层查不到数据则不写入缓存层。缓存穿透将导致不存在的数据每次请求都要到存储层去查询,失去了缓存保护后端存储的意义。
    解决方案:1 缓存空值 2 布隆过滤器
  3. 缓存雪崩:缓存雪崩指的是缓存层支撑不住或宕掉后,流量会像奔逃的野牛一样,打向后端存储层。存储层的调用量会暴增,造成存储层也会级联宕机的情况。
    解决方案:限流降级
  4. 热点key缓存重建:当前key是一个热点key,并发量非常大。在缓存失效的瞬间,有大量线程来重建缓存,造成后端负载加大,甚至可能会让应用崩溃。
    解决方案:互斥锁,此方法只允许一个线程重建缓存,其他线程等待重建缓存的线程执行完,重新从缓存获取数据即可。
  5. 缓存与数据库双写一致性:在大并发下,同时操作数据库与缓存会存在数据不一致性问题。

    解决方法:可以通过加分布式读写锁保证并发读写或写写的时候按顺序排好队,读读的
    时候相当于无锁。适用于读多写少的情况。
相关推荐
海兰28 分钟前
【数据库】tdsql(mysql8.0)优化思考三
数据库·redis
Bug收容所15 小时前
12305项目学习day5
java·spring boot·redis·mysql·spring·rocketmq
智码看视界15 小时前
Day33-数据层 × 中间件AI化篇:Redis缓存经典问题-击穿、穿透、雪崩的终极解决方案
数据库·redis·缓存·中间件·穿透·雪崩·击穿
后端观测站1 天前
第九章:Redis 为什么会发生缓存穿透、击穿、雪崩?
redis
海兰2 天前
【高速缓存】RedisVL 存储类型选择指南:Hash 与 JSON
人工智能·redis·算法·缓存·json·哈希算法
Devin~Y2 天前
互联网大厂 Java 面试实录:Spring Boot、MyBatis、Redis、Kafka、Spring Security、RAG 与 MCP 全链路问答
java·redis·kafka·mybatis·spring security·spring mvc·sprint boot
海兰2 天前
【高速缓存】RedisVL 索引迁移指南:安全演进索引结构
前端·数据库·redis·安全·缓存·bootstrap
海兰2 天前
【高速缓存】 RedisVL MCP 运行指南(下)
人工智能·redis·哈希算法·高速缓存
hold?fish:palm2 天前
kv存储主从复制的设计与实现
c++·redis·后端
不如语冰2 天前
AI大模型入门-Python进阶-上下文管理与with语句
开发语言·数据结构·数据库·人工智能·pytorch·redis·python