缓存系统常见问题

本文探讨了缓存穿透、击穿与雪崩等问题及其解决方案,深入解析Redis与memcache的区别,强调Redis在数据结构、持久化及高可用性方面的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


一些数据没有必要每次查询的时候都去查询数据库,特别是QPS比较高的系统,每次都去查询数据库,会对数据库造成很大发负担,这个时候就要用到缓存。

、QPS:每秒查询率:是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。

查询数据时,先去查询缓存,如果缓存有就直接返回;没有就去查询数据库,然后返回,并存入缓存;这种情况下可能就会出现一些现象。
在这里插入图片描述

一、缓存穿透

解释

正常情况下,查询的数据都是存在的,但是查询数据库和缓存中都不存在的数据时,每次请求都会打到数据库上面去,这种不存在数据的现象称为缓存穿透。

问题

黑客攻击时,拿不存在的 id 去查询数据,会产生打了的请求到数据库去查询,可能会导致数据库压力过大而宕机。

解决

1、缓存空值:为空数据的key对于的值设置为null到缓存里,后面查询key直接返回null。(需要设置过期时间)
2、BloomFilter:布隆过滤器,HBase set 用来判断元素 (key)是否在于某个集合里。

两种可以结合,在缓存前加一层过滤器,在查询的时候先去过滤器去查询key是否存在,不存在就直接返回,存在再走 查缓存->查DB。
在这里插入图片描述

选择

恶意攻击,数据量大的用过滤器;
key异常多,请求重复率比较低,对于空数据游戏,重复率高的,用空值处理。

二、缓存击穿

解释

在高并发系统中,大量请求同事查询一个key时,此时这个key正好失效了,就会导致大量请求都到数据库上,这就叫缓存击穿。

问题

会造成某一时刻数据库请求量过大,压力剧增。

解决

击穿现象是多个线程同事查询数据库的这条数据。可以在第一个查询数据的请求上用一个互斥锁来锁住它,其他线程走到这一步拿不到数据就等着,等到第一个线程查询到了数据,然后做缓存,就直接走缓存中的数据。

三、缓存雪崩

解释

当某一时刻发生大规模的缓存失效的情况,比如缓存服务宕机了,就会有大量的请求到 DB上面,结构就是DB撑不住,挂掉。
在这里插入图片描述
在这里插入图片描述

解决

1、事前:使用集群缓存,保证缓存服务的高可用,
如果使用Redis们可以使用 主从 +哨兵,Redis cluster来避免Redis全盘崩溃的情况。

2、事中:ehcache本地缓存 + Hystrix 限流和降级,避免MySQL被打死
使用ehcache本地缓存的目的也是在考虑Redis cluster 完全不可用的时候,ehcache本地缓存还能支撑一阵子。

使用 Hystrix 进行限流 & 降级,比如一秒来了 5000 个请求,可以设置只能 一秒 2000个请求通过这个组件,那么其他剩余的 3000个请求就会走限流逻辑。

3、事后:开启Redis持久化机制,尽快恢复缓存集群。
一旦重启,就能从磁盘上自动加载数据,恢复内存中的数据。
在这里插入图片描述

四、解决热点数据集中失效问题

1、设置不同的失效时间
2、互斥锁
在编程中,引入了对象互斥锁的概念,来保证数据操作的完整性,每个对象都对应一个可称为 ‘互斥锁’的标记,这个标记用来保证在任一时刻,只能有一个县城访问该对象。

五、Redis与memcacahe的区别

1、Redis和memcache都是将数据存放在内存中的,都是内存数据库。不过memcacahe还可用于缓存其他东西,如视频,图片等。
2、Redis不仅仅支持简单的key-value类型的数据,同事换提供 list ,set,zset,hash等数据结构的存储。
3、虚拟内存—Redis当物理内存用完时,可以将一些很久没用到的value交换到磁盘。
4、过期策略—memcacahe在set时就指定了,例如 set key1 0 0 8,即永不过期。Redis可以通过expire设定,例如 expire name 10
5、分布式—设定memcacahe集群,利用magent做一主多从;Redis可以一主多从,也可以一主一从。
6、存储数据安全—memcacahe挂掉后,数据就没了,redis可以定期保存到磁盘(持久化)。
7、灾难恢复—memcacahe挂掉后,数据不可恢复;Redis数据丢失后可以通过aof恢复。
8、Redis支持数据的备份,即master-slave模式的数据备份。
9、操作便利性 Redis更丰富一些,数据操作只有较少的IO次数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值