当前位置: 首页 > news >正文

Redis的使用问题

1:穿透,访问缓存中没有,数据库中也没有的数据,直接忽略缓存层,直达数据库
解决方案:方案一,查一个不存在的数据时,给一个设置一定过期间的key的数据,存入缓存,方案二:布隆过滤器,在将数据存入Redis时,会同时存储一个Redis的键到布隆过滤器中,通过布隆过滤器提供的多个Hash函数对Key进行Hash运算,再对位数组长度进行取余,得到一个下标,将该下标值设置为1,访问同样的数据时如果通过布隆过滤器计算后的值相等,则认为缓存中可能存在这个数据(hash运算后得到的结果可能相同,哈希冲突)在缓存中查找数据,如果出现一个0,则认为这个数据不在缓存中,就去数据库中查找数据。
2:缓存一致性问题:缓存一致性是指缓存和数据库两者的数据保持一致(造成缓存不一致的原因可能是在写数据库和写缓存两步存在异常,也可能是并发所导致。写数据库和写缓存导致不一致称为双写不一致,比如:先更新数据库成功了,更新缓存时失败了,最终导致不一致)
解决方案:分布式锁,延迟双删(当一个线程删除缓存中的数据,并修改数据库中的主数据时从数据库会同步主数据库中的数据,当同步完成后再次删除缓存中的数据,这个时候即使在数据库是数据同步过程中有新的线程会去访问缓存由于缓存的数据被删除了,新的线程会访问数据库中的数据,再将数据保存到缓存,但是我们最后都会将缓存中的数据删除,等待新的线程访问数据据,将新数据写入缓存,保证最终数据的一致性),方案三:MQ异步同步,写数据库时canal读取binlog日志,将数据变化日志写入mq同步程序监听mq接收到数据变化的消息,同步程序解析消息内容写入redis,写入redis成功正常消费完成,消息从mq删除完成数据的同步。方案四:采用定时任务方式,根据程序业务,合理设置定时任务。更新数据库以及缓存数据。
3:缓存雪崩,请求大量访问相同的数据,数据没有保存在缓存中,而直接访问数据库时,数据库由于负载过大直接宕机
解决方案:分布式锁,访问的数据在缓存中设置一个拥有有效过期时间的空数据(让请求通过缓存获取数据,减少数据库压力防止数据库宕机),热点数据用不过期。

http://www.jsqmd.com/news/270/

相关文章:

  • AIGC拾遗:Flash Attention
  • 深度好文-风雨飘摇信竞路
  • Python-CSV库
  • C++小白修仙记_LeetCode刷题_位运算
  • C++小白修仙记_LeetCode刷题_双指针
  • 前路漫漫亦灿灿 往事堪堪亦澜澜
  • 设计模式(C++)详解—单例模式(2) - 指南
  • 使用uv和pycharm搭建python开发环境
  • lc1032-字符流
  • 八股整理xdsm - 教程
  • C++小白修仙记_LeetCode刷题_哈希表
  • 【F#学习】字符串String
  • US$98 Yanhua Mini ACDP Module4 BMW 35080, 35160DO WT EEPROM Read Write
  • US$98 Yanhua Mini ACDP Module4 BMW 35080, 35160DO WT EEPROM Read Write
  • 深入解析:K8s学习笔记(二) Pod入门与实战
  • 现代汽车前瞻杯2025牛客暑期多校训练营3
  • 详细介绍:[新启航]白光干涉仪在微透镜阵列微观 3D 轮廓测量中的应用解析
  • 实用指南:多技术融合提升环境生态水文、土地土壤、农业大气等领域的数据分析与项目科研水平
  • 【F#学习】“变量”?绑定!
  • 2023 CCPC 深圳 F
  • 完整教程:【算法】双指针(三)[快慢指针]-快乐数
  • 9.19做题资料:哈希表查找时间复杂度分析
  • CF2143F Increasing Xor
  • 提到链接,你能想到什么
  • 实用指南:容器逃逸漏洞
  • 实用指南:容器逃逸漏洞
  • 深入解析:卷对卷(Roll-to-Roll,R2R)技术的应用领域和技术进展
  • 三种方式处理SpringBoot全局异常
  • 解题记录说是 | P3695 CYaRon!语
  • 分享一个极度精简的绿色的 五笔输入法