本地缓存设计思想与注意事项

之前在写MyBatis文章时介绍过关于一级缓存和二级缓存的设计,本文通过结合MyBatis设计的思想以及其他框架的设计,来介绍一下关于本地缓存的设计方案和注意事项。

1、哪些数据需要被缓存?

本地内存资源非常宝贵,要合理利用,一般那些经常被访问的,但是又不经常被修改的数据,即读多写少的数据,比如字典、标签、定期更新的统计数据等等。

2、缓存容量

由于内存资源的稀缺,一般不能无上限的使用本地缓存,这样不仅会造成内存不足,还有可能导致频繁的FullGC。

3、过期策略

既然容量有上限,那么就要制定一些过期策略保证容量不超上限。
MyBatis默认使用LRU算法(最近最少使用,看重的是访问时间)。
参考Redis等其他的过期策略还有:设置过期时间到期自动清除、定时清除、随机清除、按照过期时间清除、LFU(最不常用,看重的是访问频次)、FIFO。

4、提供缓存访问的API

对缓存的操作应该提供一套简单易用的方法,便于使用者方便、快捷的使用。

5、线程安全问题

本地缓存一般都会作为全局访问的变量,那么就由必要在设计时考虑他的线程安全问题,简单的场景下一般我们可以使用ConcurrentHashMap,也可以参考MyBatis的设计,直接在对缓存访问的方法上包装了synchronized关键字。
在这里插入图片描述

6、缓存的一致性

在集群环境下,保证集群中每台服务器缓存的一致性是必须要做的事情,本地缓存可以参考分布式缓存一致性的解决方案进行设计,比如可以通过拿到集群中所有的服务节点,然后进行每个节点的缓存同步。

7、缓存持久化

关持久化一般本地缓存没有必要做持久化,有需要的话可以参考Redis的持久化设计方案。

8、缓存预热

本地缓存数据量一般都不会太大,可以直接在服务启动时就加载,或者提供接口、操作界面控制数据加载到缓存中。

文本主要就介绍这些考虑方案,关于缓存穿透、雪崩等问题就不做详细描述了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码拉松

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值