如何使用redis 对热点数据的缓存

在做项目时 使用redis 对热点数据做缓存 虽然有提供的注解 但是这里我们自己实现以下 并解决其中的缓存击穿 穿透 雪崩问题 以提高接口的RT 减少数据库的压力  使用aop 加注解加缓存。

首先自定义一个注解

 然后使用aop   首先我们使用around 注解 对我们自定义的注解进行环绕通知 因为我们使用的环绕通知可以 使用ProcessdingJoinPoint 类型   然后通过这个对象获取该注解下的方法的参数 以及注解中的前缀  进行拼装key  然后去redis 中获取 如果获取到了则直接返回  如果缓存中获取不到 则

使用joinpoint .process()方法 执行自己的方法中的代码 这里的代码主要写的是从数据库中查询获得值  如果短时间高并发下次key 过期 那么大量的请求会到数据库中  造成数据库压力很大 这就是缓存击穿问题 一个key过期 数据库存在数据  我们可以使用分布式锁去解决这一问题 因为分布式锁 只能允许一个进程中的一个线程去访问数据库 这样对数据库的压力会大大减少 减少数据库的连接数  这样别的连接就能连接到数据库 可以减少sql的执行时间  分布式锁 我们对该id 进行加锁 如果获得到了锁 则执行查询数据库   如果未获得到则重新执行该方法   查询数据库并写回redis 这里会有一个问题 如果数据库中也不存在 那么 放入该缓存的为null 下一次进来还会重写进行加锁 查询数据库  这里就是缓存穿透问题  查询的key 不存在  这里我们可以 直接创建一个object对象 并设置过期时间 也可以 使用布隆过滤器 对key 进行校验判断该key 存不存在 最终返回   还有一个缓存雪崩  缓存雪崩是指 大量的key 在同一时间进行过期  我们可以对key 进行随机过期世界进行解决。

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
对于 Redis 热点数据缓存,可以使用 Redis缓存功能来提高系统性能和响应速度。热点数据指的是频繁被访问的数据,通过将这些数据缓存在内存中,可以避免频繁地从数据库中读取,从而减少数据库的压力。 在 Redis 中,可以使用以下两种常见的方式来实现热点数据缓存: 1. 缓存数据存储在 Redis 的字符串类型中:将需要缓存数据序列化为字符串,并使用一个唯一的键来存储在 Redis 中。当需要访问该数据时,先从 Redis 中尝试获取,如果获取不到,则从数据库中读取,并将读取到的数据存储到 Redis 中以供下次使用。这样就可以实现数据的快速读取和缓存更新。 2. 缓存数据存储在 Redis 的哈希类型中:将需要缓存数据组织为一个哈希表,其中每个字段对应一个属性或字段,并使用一个唯一的键来存储在 Redis 中。当需要访问该数据时,同样先从 Redis 中尝试获取,如果获取不到,则从数据库中读取,并将读取到的数据以哈希表的形式存储到 Redis 中。这种方式可以更灵活地处理复杂的数据结构。 需要注意的是,为了保证缓存的一致性和有效性,需要在适当的时机进行缓存的更新和失效操作。例如,在数据更新之后,需要及时更新 Redis 中的缓存数据,以保证缓存数据库的一致性。另外,还可以设置合适的缓存过期时间,避免缓存数据过期但仍然被使用的情况发生。 总的来说,通过 Redis热点数据缓存可以提高系统的性能和响应速度,减少数据库的压力,但需要注意缓存的一致性和有效性的处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值