通过 HashMap 实现本地缓存

引言

本地缓存在我们的工作中是比较常见的一种技术手段,不管是分布式缓存,还是本地缓存,或多或少我们都会使用到,本地缓存比较常用的数 Guava 缓存。
今天我们不聊 Guava,而是聊一聊怎样通过 HashMap 来实现一个本地缓存。

实现

通过 HashMap 实现本地缓存相当简单,废话不多说,先上代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
public enum UserCache {

instance;

// 日志记录器
private final static org.apache.logging.log4j.Logger log = org.apache.logging.log4j.LogManager.getLogger(UserCache.class);

HashMap<Integer, String> UserMap = new HashMap<>();

static {
UserCache.instance.init();
}

/**
* 初始化缓存
*
*/
public void init() {

log.info("初始化 User 缓存初始化开始...");

// web容器中获取上下文
WebApplicationContext context = ContextLoader.getCurrentWebApplicationContext();
IUserDao UserDao = (IUserDao) context.getBean("UserDaoImpl");

List<User> Users = UserDao.selectAll();
int count = 0;
for (User User : Users) {
count++;
UserMap.put(User.getUserId(), JSON.toJSONString(User));
}

if (Users.size() != count) {
log.error("User 数据未完全加载!");
}
log.info("共计加载:" + count);
log.info("初始化 User 缓存初始化结束!");

}

public HashMap<Integer, String> getPhoneAttr() {
return UserMap;
}
}

代码是不是相当简单,聪明的你一定能看懂这段代码。那么,请聪明的你再猜猜,我是怎么刷新缓存的?对了,就是定时器,用定时器去定时的刷新缓存。
整个设计跟实现是不是都很简单啊?

文章目录
  1. 1. 引言
  2. 2. 实现
,