数字营销 h5 网站开发,微网站在线制作,网页设计心得体会600字,视频直播app开发三种更新策略 内存淘汰是Redis内存的自动操作#xff0c;当内存快满了就会触发内存淘汰。超时剔除则是在存储Redis时加上其有限期(expire)#xff0c;有限期一过就会自动删除掉。而主动更新则是自己编写代码去保持更新#xff0c;所以接下来研究主动更新策略。 主动更新策略… 三种更新策略 内存淘汰是Redis内存的自动操作当内存快满了就会触发内存淘汰。超时剔除则是在存储Redis时加上其有限期(expire)有限期一过就会自动删除掉。而主动更新则是自己编写代码去保持更新所以接下来研究主动更新策略。 主动更新策略 结论从上面可以得知我们一般是要删除缓存而不是更新 结论从上面得知我们是要先操作数据库再操作缓存
总结主动更新策略的读写操作 代码实现 OverrideTransactional//加注解实现事务的原子性public Result updatesh(Shop shop) {Long id shop.getId();if(id null){return Result.fail(id错误);}//1先更新数据库updateById(shop);//2删除缓存stringRedisTemplate.delete(CACHE_SHOP_KEY id);return Result.ok();} 三种缓存的问题 缓存穿透 请求的数据既不在Redis中也不在数据库中导致每次请求都会打到数据库例如id-1 解决的方法①缓存空对象把这个攻击的请求给一个NULL对象存到缓存中并设置TTL使下次攻击命中②布隆过滤器以位图来表示数据是否存在如果存在就放行否则直接拒绝访问但是准确性不能保证 缓存雪崩 大量的Redis缓存同时失效或者Redis服务器宕机导致大量的请求打到数据库 解决的方法①存缓存的时候使用随机的TTL有效期②利用Redis集群提高高可用性③给业务添加多级缓存使用nginx缓存 redis缓存 其他缓存不同层使用不同的缓存可靠性更强去缓解Redis宕机带来的后果 缓存击穿 缓存击穿问题也叫热点key问题缓存的热点key失效导致大量的请求该热点的访问全部都打到数据库 解决的方法①互斥锁多个线程进行查询都会进行Redis重构导致性能大大降低所以使用锁机制只有一个线程获得锁并且完成Redis重构其他的线程在此时间内进行等待②逻辑过期即久缓存存进Redis中不设置TTL过期时间而是以逻辑时间来标识 互斥锁解决缓存击穿的思路获得锁与释放锁的操作通过Redis中的setnx来实现只有该键不存在的时候才可以获得锁该键存在即表示有线程在操作Redis重构。 逻辑过期解决缓存击穿的思路设置一个字段表示其逻辑过期时间存在Redis中而数据是不加TTL的当我们去查询Redis时就判断这个逻辑字段是否过期然后再进行返回或者重构操作