
Redis
文章平均质量分 77
小璐乱撞xllz
Java
展开
-
Redis工具类(解决缓存穿透、缓存击穿)
该工具类包含以下功能:1.将任意对象存储在 hash 类型的 key 中,并可以设置 TTL2.将任意对象存储在 hash 类型的 key 中,并且可以设置逻辑过期时间3.将空对象存入 hash 类型的 key 中,并且可以设置超时时间4.缓存空对象解决缓存穿透5.布隆过滤器解决缓存穿透6.布隆过滤器+缓存空对象解决缓存穿透7.互斥锁解决缓存击穿8.逻辑过期解决缓存击穿以下是关键代码。原创 2024-10-26 19:26:17 · 374 阅读 · 0 评论 -
解决Redis缓存击穿(互斥锁、逻辑过期)
本质就是让所有线程在缓存未命中时,需要先获取互斥锁才能从数据库查询并重建缓存,而未获取到互斥锁的,需要不断循环查询缓存、未命中就尝试获取互斥锁的过程。采用逻辑过期的方式时,key 是不会过期的,而这里由于是热点 key,我们默认其是一定存在于 redis 中的(可以做缓存预热事先加入 redis),因此如果 redis 没命中,就直接返回空。这里先预热,将 id 为 1 的数据加入,并且让过期字段为过去的时间,即表示此数据已过期。可以看到部分结果返回的旧数据,而部分结果返回的是新数据。原创 2024-10-26 14:56:51 · 903 阅读 · 0 评论 -
解决Redis缓存穿透(缓存空对象、布隆过滤器)
这里选择使用布隆过滤器存储存在于数据库中的 id,原因在于,如果存储了不存在于数据库中的 id,首先由于 id 的取值范围很大,那么不存在的 id 有很多,因此更占用空间;相反,如果存储的是数据库中存在的 id,那么即使少数不存在的 id 被判为了存在,由于数据库中确实没有对应的 id,那么也会返回空,最终结果还是正确的。由于布隆过滤器有一定的误判率,所以这里可以进一步优化,如果出现误判情况,即原本不存在于数据库中的 id 被判为了存在,就用缓存空对象的方式将其缓存到 redis 中。原创 2024-10-25 22:22:04 · 1346 阅读 · 0 评论 -
基于Redis实现共享Session登录
添加刷新拦截器的原因在于,如果用登录校验拦截器进行刷新工作,由于排除了部分路径,因此如果用户一直访问这些被排除的部分路径,会导致用户 token 的有效期不会被刷新。登录、注册时,需要使用手机号将验证码取出,并且以随机 token 作为 key,用户信息作为 value 保存用户数据,这里的用户数据用 hash 类型保存。这里使用随机 token 而不使用手机号作为 key 的目的在于,浏览器是需要存储这个 key 的,以便校验登录状态,如果使用手机号会不安全。1.发送短信验证码的接口。原创 2024-10-24 22:52:09 · 1261 阅读 · 0 评论