Redis缓存穿透和雪蹦问题引入和解决

Redis是一个分布式缓存技术,是目前访问效率最好的缓存

一般采用AOF+RDB一起配合使用

Redis支持数据库的持久化。Redis提供了两种持久化的策略:

AOF:默认每秒进行数据同步到持久化的策略,即使数据丢失,也仅仅丢失1秒钟的数据。

RDB(默认):默认三种存储数据的条件(满足任意一个都会出发持久化的逻辑):

​ 900 1 900秒内被发生至少1次修改

​ 300 10 300秒内发生了10次修改

​ 60 10000 60秒内发生10000次修改

怎么配置持久化策略?

在redis的配置中save属性表示的就是RDB持久化策略。

“save”

“900 1 300 10 60 10000”
redis中appendonly的配置是用来开启AOF存储策略的。yes为开启,no为关闭。

“appendonly”
“no”
此配置每秒进行持久化操作

“appendfsync”
“everysec”
建议:

如果允许一定的数据丢失,建议只使用RDB,因为性能高一些。

如果能接受数据丢失的量比较小,建议使用AOF。

如果不接受数据的丢失,建议是使用AOF+RDB方式

Redis的存储大小:
32位系统 默认为3G
64位系统 无限制 一般电脑内存多大 Redis 的内存就有多大

缓存解决的问题:
使用Redis缓存是为了解决高并发时,数据库的压力过大导致的宕机问题。同时也提高了数据的查询速度

什么是缓存穿透和雪崩?

缓存是为了减轻数据库的压力、提升数据的查询效率。但是按照一般逻辑,数据在缓存中没有取到就会去数据库中获取,如果大量的访问都没有在缓存中获取到数据,就有“穿透”的问题,进而带来缓存雪蹦的问题。

1、大并发环境下,第一次访问缓存,发现缓存中没有数据,然后所有线程都会去访问数据库,这样就造成缓存短暂失效,这就是“缓存穿透”。

​ 缓存穿透的危害:导致大量的请求直接到数据库,导致数据库的承载压力过大导致宕机。

2、数据库查询不到这个数据,在redis中保存的key所对应的value就为null。那代码逻辑也会出现穿透。
先判断key是否在缓存中存在,只要存在key,不论value是否为null,都认为缓存中有 数据,主要有数据就不要再访问数据库。

解决穿透和雪蹦问题的思维导图:
在这里插入图片描述
总结:

1、双重检测机制(在锁的内外都进行缓存查询,没有查到在进行数据库查询)。

2、不论查询到的数据是否为null,都将它写入缓存。

3、避免缓存中的null键值撑满整个内存,所以需要给null键值设置过期时间。

4、提前分析项目中可能出现并发的数据,提前将这些数据写入缓存。(在tomcat容器启动的时候写入缓存)

5、key的设计,要唯一标识一条数据,不能被其他数据覆盖。

比如

分页,book_page_1, book_page_2.

缓存ID为1的数据:book_id_1

通过这些步骤,既能解决穿透又能保证效率。

Redis优化

1、使用byte进行数据存储、和数据操作,能更合理的使用空间。

2、使用hash类型存储数据,因为Hash算法得到的数据的长度基本固定,即使再大的数据经过hash算法之后,长度也比较短。

3、key值设计不宜过长。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值