【蓝因子教育】关于设计一个本地缓存

【蓝因子教育】关于设计一个本地缓存

最近在看 Mybatis 的源码,刚好看到缓存这一块,Mybatis 提供了一级缓存和二级缓存;一级缓存相对来说比较简单,功能比较齐全的是二级缓存,基本上满足了一个缓存该有的功能;当然如果拿来和专门的缓存框架如 ehcache 来对比可能稍有差距;本文我们将来整理一下实现一个本地缓存都应该需要考虑哪些东西。

考虑点

考虑点主要在数据用何种方式存储,能存储多少数据,多余的数据如何处理等几个点,下面我们来详细的介绍每个考虑点,以及该如何去实现;

1. 数据结构

首要考虑的就是数据该如何存储,用什么数据结构存储,最简单的就直接用 Map 来存储数据;或者复杂的如 redis 一样提供了多种数据类型哈希,列表,集合,有序集合等,底层使用了双端链表,压缩列表,集合,跳跃表等数据结构;

2. 对象上限

因为是本地缓存,内存有上限,所以一般都会指定缓存对象的数量比如 1024,当达到某个上限后需要有某种策略去删除多余的数据;

3. 清除策略

上面说到当达到对象上限之后需要有清除策略,常见的比如有 LRU (最近最少使用)、FIFO (先进先出)、LFU (最近最不常用)、SOFT (软引用)、WEAK (弱引用) 等策略;

4. 过期时间

除了使用清除策略,一般本地缓存也会有一个过期时间设置,比如 redis 可以给每个 key 设置一个过期时间,这样当达到过期时间之后直接删除,采用清除策略 + 过期时间双重保证;

5. 线程安全

像 redis 是直接使用单线程处理,所以就不存在线程安全问题;而我们现在提供的本地缓存往往是可以多个线程同时访问的,所以线程安全是不容忽视的问题;并且线程安全问题是不应该抛给使用者去保证;

6. 简明的接口

提供一个傻瓜式的对外接口是很有必要的,对使用者来说使用此缓存不是一种负担而是一种享受;提供常用的 get,put,remove,clear,getSize 方法即可;

7. 是否持久化

这个其实不是必须的,是否需要将缓存数据持久化看需求;本地缓存如 ehcache 是支持持久化的,而 guava 是没有持久化功能的;分布式缓存如 redis 是有持久化功能的,memcached 是没有持久化功能的;

8. 阻塞机制

在看 Mybatis 源码的时候,二级缓存提供了一个 blocking 标识,表示当在缓存中找不到元素时,它设置对缓存键的锁定;这样其他线程将等待此元素被填充,而不是命中数据库;其实我们使用缓存的目的就是因为被缓存的数据生成比较费时,比如调用对外的接口,查询数据库,计算量很大的结果等等;这时候如果多个线程同时调用 get 方法获取的结果都为 null,每个线程都去执行一遍费时的计算,其实也是对资源的浪费;最好的办法是只有一个线程去执行,其他线程等待,计算一次就够了;但是此功能基本上都交给使用者来处理,很少有本地缓存有这种功能。

特别声明:[【蓝因子教育】关于设计一个本地缓存] 该文观点仅代表作者本人,今日霍州系信息发布平台,霍州网仅提供信息存储空间服务。

猜你喜欢

扎克伯格新布局:Meta AI转战用户空闲时间,放弃与ChatGPT正面较量(扎克伯格最新动态)

ChatGPT凭借其卓越的生产力工具属性和先发优势,迅速赢得了大量用户,并稳固了市场领导者的地位。他认为,未来最有价值的工具将是那些能够深入理解用户、洞察其需求并提供个性化帮助的“个人超级智能”。 这一战略转…

扎克伯格新布局:Meta AI转战用户空闲时间,放弃与ChatGPT正面较量(扎克伯格最新动态)

《来不及说我爱你》限免重映!慕容沣尹静琬再掀民国虐恋风潮(来不及说我爱你免费全集在线观看)

七年时光流转,这部被誉为“民国爱情天花板”的经典之作,如今竟在多家主流视频平台全集免费开放,慕容沣与尹静琬那段烽火乱世中的刻骨爱恋,再度席卷而来。 李小冉的尹静琬,则如乱世中一枝清雅的白玉兰。让慕容四少那霸道…

《来不及说我爱你》限免重映!慕容沣尹静琬再掀民国虐恋风潮(来不及说我爱你免费全集在线观看)

4-ARM-PEG-MethoxyAzide:具有3臂的叠氮基和1臂的甲氧基

叠氮基团(-N₃):三个臂末端修饰有叠氮基团,具有高反应活性,可参与点击化学反应(如铜催化的叠氮-炔环加成反应,CuAAC),生成稳定的三唑环结构,适用于生物偶联、药物递送和材料合成。 稀释:在使用前,将4…

4-ARM-PEG-MethoxyAzide:具有3臂的叠氮基和1臂的甲氧基

数据库基础知识 数据库中数据的最小存取单位是数据项(数据库基础学习)

随着计算机的内容大小对数据库系统性能的影响是非常明显的,内存大就可以建立较多较大的程序工作区或数据缓冲区,以管理更多的数据文件和控制更多的程序过程,进行比较复杂的数据管理和更快地进行数据操作。 数据库管理…

数据库基础知识 数据库中数据的最小存取单位是数据项(数据库基础学习)

优酷三部硬核剧集齐聚十月,任嘉伦龚俊王鹤棣,你最期待谁?(优酷三部硬核剧有哪些)

这三部剧的题材含金量十足,涵盖了热血武侠、权谋虐恋与悬疑刑侦,足见优酷势必再次推出一系列引人瞩目的佳作。 《暗河传》以黑帮权谋与武侠精神的深度融合为基础,围绕江湖中神秘的杀手组织“暗河”展开故事,巧妙打破了传…

优酷三部硬核剧集齐聚十月,任嘉伦龚俊王鹤棣,你最期待谁?(优酷三部硬核剧有哪些)