聊聊Redis中的缓存穿透、缓存雪崩、缓存击穿和缓存一致性

本篇文章带大家简单了解一下redis中的缓存穿透、缓存雪崩、缓存击穿缓存一致性,介绍一下缓存穿透和缓存雪崩的解决方案,希望对大家有所帮助!

聊聊Redis中的缓存穿透、缓存雪崩、缓存击穿和缓存一致性

缓存雪崩

缓存同一时间大面积失效,后面的请求都会落到数据库上,造成数据库短时间内无法承受大量请求而崩溃

例如在电商首页,所有首页的key失效时间都是12小时,中午12点刷新,如果零点有个秒杀活动大量用户涌入,但是缓存当时所有key都失效,此时所有的请求会落到数据库,数据库扛不住,就直接就gg了,又或者redis宕机,也会让大量请求落到mysql,造成挂机。【相关推荐:Redis视频教程】

解决方案

所以像这种情况就应该把每个key的失效时间加个随机值,避免同一时间大量的key失效,如果是redis集群部署,可以将热点数据分布到各个不同的库。

事前:尽量保证redis集群的高可用性,发现机器宕机尽快补上,选择合适的内存淘汰策略

事中:本地ehcache缓存+hystrix限流加降级,避免mysql崩掉

事后:里有redis持久化机制保存的数据尽快恢复缓存。

缓存穿透

大量请求的key不存在于缓存中,例如某个黑客制造缓存中不存在的key发起大量请求,导致大量请求落到数据库。

解决办法

首先应该要做基本的入参校验,将不合法的参数直接拦截,例如查询数据库id不能小于0,校验邮箱格式等等

如果缓存和数据库都查不到某个key的数据,就将key写入到redis,value为null,并设置过期时间,避免下次请求落到数据库上。

通过布隆过滤器,布隆过滤器可以非常方便的判定一个给定的数据是否存在与海量数据中.可以将所有可能存在的请求的值存到布隆过滤器,当请求过来先判断用户发来的请求是否存在于布隆过滤器,不存在就直接拦截。

缓存击穿

缓存击穿指的是一个Key非常热点,在不停的扛着大并发,大并发集中对这一个点进行访问,当这个key失效瞬间,持续的大并发就穿破缓存,直接请求到数据库

缓存一致性

如果是要求强一致性,那就不能使用缓存,因为保证不了强一致性,只能保证最终一致性。

先删除缓存,再更新数据库

如果数据库更新失败,那么数据库的还是旧数据,redis是空,数据不会不一致,读到空会去数据库进行查询,然后更新到缓存。

加入队列,进行串行化操作

先删除缓存,再更新数据库,在高并发场景下也会出现问题,例如删除了缓存,这时还没更新数据库,另一个线程进来,发现redis是空,会去读数据库,然后更新到redis,而此时删除了缓存的线程接着更新数据库,就会造成数据库和redis数据不一致,这时候可以将更新数据的操作放到队列当中,串行化操作,不会出现,但一般不建议这样做,因为会降低效率。

更多编程相关知识,请访问:编程入门!!

以上就是聊聊Redis中的缓存穿透、缓存雪崩、缓存击穿和缓存一致性的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2039729.html

(0)
上一篇 2025年2月24日 00:04:44
下一篇 2025年2月18日 06:11:12

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 聊聊Redis的持久化机制,到底采用RDB还是AOF呢?

    本篇文章带大家了解一下redis的持久化机制(rdb和aof),聊聊到底采用rdb还是aof呢?希望对大家有所帮助! RDB 1. 什么是RDB RDB:每隔一段时间,把内存中的数据写入磁盘的临时文件,作为快照,恢复的时候把快照文件读进内存…

    2025年2月24日
    200
  • 浅谈Redis中缓存过期、内存被缓存占用要怎么处理?

    浅谈redis中缓存过期、内存被缓存占用要怎么处理?下面本篇文章带大家了解一下redis中的缓存过期处理策略和内存淘汰机制,希望对大家有所帮助! 已过期的key如何处理? 设置了expire的key缓存过期了,但是服务器的内存还是会被占用,…

    2025年2月24日
    200
  • 聊聊Redis中的哨兵模式(Sentine)

    本篇文章带大家了解一下redis中的哨兵模式(sentine),介绍一下sentinel工作机制、sentinel模式怎么搭建,希望对大家有所帮助! Redis Sentinel哨兵模式 是一个分布式系统, 你可以在一个架构中运行多个 Se…

    2025年2月24日
    200
  • Redis如何实现分布式锁?聊聊实现方法

    如何使用 redis 实现分布式锁?下面本篇文章给大家介绍一下基于 redis 实现分布式锁的方法,希望对大家有所帮助! 在一个分布式系统中,会遇到一些需要对多个节点共享的资源加锁的情况,这个时候需要用到分布式锁。分布式锁通常保存在一个共享…

    2025年2月24日
    200
  • 深入聊聊Redis中的双链表

    本篇文章带大家了解一下redis 数据结构中的双链表,简单介绍一下双链表的运用,希望对大家有所帮助! 在 Redis 数据类型中的列表list,对数据的添加和删除常用的命令有 lpush,rpush,lpop,rpop,其中 l 表示在左侧…

    2025年2月24日
    200
  • 深入浅析Redis中的位图(bitmap)

    本篇文章带大家了解一下redis中的位图(bitmap),希望对大家有所帮助! Redis 的位图(bitmap)是由多个二进制位组成的数组,数组中的每个二进制位都有与之对应的偏移量(从 0 开始),通过这些偏移量可以对位图中指定的一个或多…

    2025年2月24日
    200
  • 分享一些好用Redis可视化工具

    本篇文章给大家总结了几款好用redis可视化工具,觉得挺不错的,现在分享给大家,也给大家做个参考,希望对大家有所帮助! 不啰嗦,我们直接开始! 1、命令行 1.1、iredis 利用iredis,用|将redis通过pipe用shell的其…

    2025年2月24日 数据库
    200
  • 整理一些常见Redis数据结构(总结)

    本篇文章给大家整理分享一些常见redis数据结构,还有一些常用指令整理,希望对大家有所帮助! 什么是数据结构? 有Java基础的应该知道常用的一些数据结构,比如数组、队列、栈等等… 那Redis的数据结构跟Java的数据结构有什…

    2025年2月24日
    200
  • 分享一些好用的Redis运维工具

    本篇文章给大家分享一些好用的redis运维工具,看看怎么进行运行状态监控、数据迁移、集群管理,希望对大家有所帮助! 我们在应用Redis时,经常会面临的运维工作,包括Redis的运行状态监控,数据迁移,主从集群、切片集群的部署和运维。接下来…

    2025年2月24日
    200
  • 聊聊Redis数据结构中的String类型

    本篇文章带大家一起了解一下redis数据结构中的string类型,并聊聊redis的kv存储结构,希望对大家有所帮助! Redis常用作分布式KV缓存,很多人仅仅只会使用,却不知道底层却有着很多不为人知的秘密。【相关推荐:Redis视频教程…

    2025年2月24日
    200

发表回复

登录后才能评论