如何设计一个本地缓存( 四 )
如何实现
以上大致介绍了实现一个本地缓存我们都有哪些需要考虑的地方 , 当然可能还有其他没有考虑到的点;下面继续看看关于每个点都应该如何去实现 , 重点介绍一下思路;
1.数据结构
本地缓存最常见的是直接使用Map来存储 , 比如guava使用ConcurrentHashMap , ehcache也是用了ConcurrentHashMap , Mybatis二级缓存使用HashMap来存储:
Map<Object Object> cache = new ConcurrentHashMap<Object Object>()
Mybatis使用HashMap本身是非线程安全的 , 所以可以看到起内部使用了一个SynchronizedCache用来包装 , 保证线程的安全性;
当然除了使用Map来存储 , 可能还使用其他数据结构来存储 , 比如redis使用了双端链表 , 压缩列表 , 整数集合 , 跳跃表和字典;当然这主要是因为redis对外提供的接口很丰富除了哈希还有列表 , 集合 , 有序集合等功能;
2.对象上限
本地缓存常见的一个属性 , 一般缓存都会有一个默认值比如1024 , 在用户没有指定的情况下默认指定;当缓存的数据达到指定最大值时 , 需要有相关策略从缓存中清除多余的数据这就涉及到下面要介绍的清除策略;
推荐阅读
- 明日方舟|明日方舟:早露皮肤的攻击动作设计得很出彩,化身成白熊的指挥员
- 小鱼人|如何在新赛季稳定上分?善于抓失误的小鱼人,值得认真练上一波
- 设计师|魔兽世界:9.1.5刚上线,就要9.2了?来看设计师爆料的更多细节
- 雷神|原神:曾经有一个强力五星角色,却因各种“流言蜚语”,擦肩而过
- 阴阳师|阴阳师SR川猿强度如何 是否值得抽卡 改变斗技环境 大佬的新玩具
- 手机游戏|梦幻西游手游:活力如何换金币 一切都已给出 就看你的选择
- 次世代|韩国战队全军覆没,斗鱼选手实力强大,一人击溃一个队
- 手机游戏|LOL手游第一个世界赛,破晓杯火热开战,DKG能紧随EDG夺冠吗?
- 华佗|三国杀:两位\奶爸\,朱治与华佗比,强度如何呢?
- 亲朋上分|《亲朋上分》266391亲朋下分亲朋上下分永劫无间崔三娘技能介绍 崔三娘如何获得更多技能