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

最近在看 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,每个线程都去执行一遍费时的计算,其实也是对资源的浪费;最好的办法是只有一个线程去执行,其他线程等待,计算一次就够了;但是此功能基本上都交给使用者来处理,很少有本地缓存有这种功能。

今日霍州(www.jrhz.info)©️

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

猜你喜欢

苹果又出现致命Bug照片一放大就变红,百万用户中招了(苹果又出现致命病毒了吗)

起因是部分苹果用户发现自己将『安卓』手机拍摄照片传输到 iPhone 后,放大图片会出现异常的一层红色滤镜,但缩略图却是正常的。 但问题是,部分用户反映自己“复原”后放大,红色滤镜还会重现......也就是说,…

苹果又出现致命Bug照片一放大就变红,百万用户中招了(苹果又出现致命病毒了吗)

Elon Musk's Wealth Tops $600 Billion for First Time as SpaceX Confirms 2026 IPO with $800 Billion Valuation

The current secondary offering allows employees to sell around $2billion worth of stock, with SpaceX p…

Elon Musk's Wealth Tops $600 Billion for First Time as SpaceX Confirms 2026 IPO with $800 Billion Valuation

『刘涛』魅力无限,躺在台球桌上的照片非常勾魂(『刘涛』美么)

其中一张,她竟然就这么随性地半躺在台球桌上,姿势放松得像在家里的沙发上,眼神里带着点平时少见的俏皮和不在意。 可这组台球照,像一颗小石子,“啪”地一下,轻轻敲在了这层水晶罩上。『刘涛』这组意外走红的照片,之所以能…

『刘涛』魅力无限,躺在台球桌上的照片非常勾魂(『刘涛』美么)

华为乾崑以“墨脱精神”铺就科技之路,通向更安全美好的出行生活

辅助驾驶行业曾是一片无人涉足的技术荒原,华为乾崑正是这片荒原上的拓荒者。这份坚守换来了市场与用户的双重认可:截至2025年11月底,华为乾崑智驾累计辅助驾驶总里程超63.8亿公里,辅助泊车使用次数超3.5亿次…

华为乾崑以“墨脱精神”铺就科技之路,通向更安全美好的出行生活

因长得太漂亮,7次拒绝导演要求遭打压,如今43岁才等到掌声(因长得太漂亮怎么说)

『娱乐圈』️里好看的女演员从来就不缺,被人夸赞为“太漂亮”的女演员,实际上也有很多。 七次之后,她就被很多“懂行的人”默默地记住了名字。 这是『娱乐圈』️里最为狠厉的一种惩处方式:不将你驱赶离开,却让你陷入无法好好生活下…

因长得太漂亮,7次拒绝导演要求遭打压,如今43岁才等到掌声(因长得太漂亮怎么说)