
缓存
文章平均质量分 93
snail-jie
问题驱动,慢慢沉淀
展开
-
线上redis分布式锁使用不当导致单号重复问题分析
背景 前天,同事反馈说之前redis分布式锁有问题导致单号重复了,后面换成redission后就一切正常。基于这样的现象,对此进行分析问题驱动下面的代码经分析,发现了三个问题1.1 过期处理1.2 不可重入1.3 应用宕机处理@Aspect@Component("redisLockAspect")public class RedisLockAspectBack { //获取P4jSyn注解 P4jSyn lockInfo = getLockInf原创 2021-12-30 09:23:35 · 1373 阅读 · 2 评论 -
Redis源码分析事件驱动之SET操作
前言对于Redis而言,服务器需要处理两类事件:1.1 文件事件:Redis服务器通过套接字与客户端连接,而文件事件就是服务器对套接字操作的抽象1.2 时间事件:Redis 服务器中的一些操作(比如 serverCron 函数)需要在给定的时间点执行,而时间事件就是服务器对这类定时操作的抽象Redis基于Reactor模式开发自己的网络事件处理器(文件事件处理器 file event handler)2.1 文件事件处理器使用 IO 多路复用程序来同时监听多个套接字,并根据套接字目前执行的任务来原创 2021-09-15 22:33:40 · 155 阅读 · 0 评论 -
Caffeine的Window TinyLfu算法分析
概括通过put操作将数据放入data属性中(ConcurrentHashMap)创建AddTask任务,放入(offer)写缓存:writeBuffer从writeBuffer中获取任务,并执行其run方法,追加记录频率:frequencySketch().increment(key)往window区写入数据W-TinyLFU 整体设计本部分参考了泥瓦匠BYSocket的文章,文章链接:https://jishuin.proginn.com/p/763bfbd358a0判断一个缓存的好坏原创 2021-06-17 14:24:05 · 1821 阅读 · 0 评论 -
Caffeine基于容量的驱逐策略分析
基于容量的示例 // 基于缓存内的元素个数进行驱逐 LoadingCache<Key, Graph> graphs = Caffeine.newBuilder() .maximumSize(10) .build(key -> createExpensiveGraph(key));如果你的缓存容量不希望超过某个特定的大小,那么记得使用Caffeine.maximumSize(long)缓存将会尝试通过基于就近度和频率的算原创 2021-06-14 21:35:13 · 1704 阅读 · 0 评论