SpringBoot中使用redis出现的问题总结

本文介绍了SpringBoot2.x集成Redis时,由于底层使用Netty可能导致的堆外内存溢出问题,建议切换到Jedis。同时,针对缓存问题,提出了缓存穿透的解决方案——将null结果缓存并设置短暂过期时间;缓存雪崩的解决策略——为过期时间添加随机值;以及缓存击穿的应对措施——使用加锁来避免热点数据导致的数据库压力过大。

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

     1.springboot2.x集成redis底层使用的是netty,会出现堆外内存,所以要使用jedis

<dependency>

   <groupId>org.springframework.boot</groupId>

   <artifactId>spring-boot-starter-data-redis</artifactId>

   <exclusions>

       <!-- Lettuce的bug导致netty堆外内存溢出 切换使用jedis-->

       <exclusion>

           <groupId>io.lettuce</groupId>

           <artifactId>lettuce-core</artifactId>

       </exclusion>

   </exclusions>

</dependency>

<!--       Lettuce的bug导致netty堆外内存溢出 切换使用jedis-->

<dependency>

   <groupId>redis.clients</groupId>

   <artifactId>jedis</artifactId>

</dependency>

    2.缓存穿透

        问题:利用一个数据库不存在的数据进行攻击,数据库瞬间压力增大,导致崩溃。

        解决:null结果缓存,并加入短暂过期时间。

    3.缓存雪崩

        问题:缓存过期时间一致,导致缓存同一时间段过期,请求全部放到数据库,数据库暑假按压力过大崩溃。

        解决:原有失效时间基础上加一个随机值。

    4.缓存击穿

        问题:热点数据缓存失效时大量请求提交,数据库压力过大崩溃。

        解决:加锁。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值