Cache
Java手写实现渐进式redis缓存工具。

前言

本节,主要实现类似 guava-cache 中的 removeListener 删除监听器,和类似 redis 中的慢日志监控的 slowListener。

删除监听器

在两种场景下删除数据是对用户透明的:

  1. size 满了之后,进行数据淘汰。

  2. expire 过期时,清除数据。

这两个特性对用户本来应该是无感的,不过用户如果关心的话,也可以通过添加删除监听器来获取到相关的变更信息。

实现思路

为了实现删除的监听,我们需要找到删除的位置,然后调用监听器即可。

evict 驱除

每次 put 数据时,检查 size 是否达到最大的限制,如果达到,则进行 evict 淘汰。

expire 过期

用户指定 expire 时间之后,回后台异步执行刷新。

接口定义

统一定义删除监听的接口

1
2
3
public interface ICacheRemoveListener<K, V> {
void listen(final ICacheRemoveListenerContext<K, V> context);
}

简单实现