
缓存
文章平均质量分 66
weixin_43831204
记录每一点进步
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
缓存与数据库双写一致四种解决方案
先删除缓存,再更新数据库该方案在线程A进行数据更新操作,线程B进行查询操作时,有可能出现下面的情况导致数据不一致:线程A删除缓存线程B查询数据,发现缓存数据不存在线程B查询数据库,得到旧值,写入缓存线程A将新值更新到数据库这样一来,缓存中的数据仍然是旧值如果线程B执行的是更新操作,线程B查询得到的是旧值,A更新到数据库新值,然后B基于旧值计算写入了计算后的值,A的更新操作被抹去了,这种情况下属于更新数据事务原子性问题,需要用分布式锁来解决。先更新数据库,再删除缓存当缓存失效时,线程B原原创 2021-02-24 16:19:12 · 473 阅读 · 0 评论 -
常见的缓存淘汰策略
常见的缓存淘汰策略是FIFO、LRU、LFU首先,我们来说说FIFO:FIFO,意思是First in First out,中文翻译为先进先出,新插入的数据放在FIFO队列的尾部,数据在FIFO队列中顺序移动,淘汰FIFO队列中头部的数据LRU:LRU,意思是Least Recently Used,中文翻译为最近很少使用,根据数据的历史访问记录来进行淘汰,如果数据最近被访问过,那么将来被访问的几率也就更高新数据插入链表的头部,每当缓存数据被访问,则数据移动到链表头部。当链表满的时候,将链表尾部原创 2020-10-08 15:04:18 · 389 阅读 · 0 评论 -
guava实现多级缓存(2)
上一篇写到的guava的使用,但是扩展起来需要入侵业务代码不是很方便guava实现多级缓存(1)这里抽象了一层,需要扩展直接继承就好了,直接贴代码接口import java.util.Map;/** * wxy * @param <K> * @param <V> */public interface ILocalCache <K, V> { /** * 从缓存中获取数据 * @param key * @ret原创 2020-06-24 11:03:30 · 352 阅读 · 0 评论 -
guava实现多级缓存(1)
1. 为何要使用多级缓存日常工作中,时常要面对抽奖活动,奖励发放,商品秒杀等大流量高并发的场景。高并发场景面对的第一个问题是DB的IO瓶颈。 这时比较通用缓存方式是加一层redis,用内存的性能来解决IO的瓶颈。但是引入Redis就一劳永逸了嘛?不是的,相对应的高并发场景又会引发Redis热KEY和大KEY的问题,造成带宽拉胯。这时可以在做一层本地缓存。那么问题又来了,本地缓存没有过期时间啊,因此就可以用GUAVA CACHE来解决,本质上他就是封装了一个过期时间,至于过期策略,一般有三种,定时删除原创 2020-06-12 13:42:39 · 721 阅读 · 0 评论