需求分析
项目中经常会遇到这种场景:一份数据需要在多处共享,有些数据还有时效性,过期自动失效。比如手机验证码,发送之后需要缓存起来,然后处于安全性考虑,一般还要设置有效期,到期自动失效。我们怎么实现这样的功能呢?
解决方案
使用现有的缓存技术框架,比如redis,ehcache。优点:成熟,稳定,功能强大;缺点,项目需要引入对应的框架,不够轻量。
如果不考虑分布式,只是在单线程或者多线程间作数据缓存,其实完全可以自己手写一个缓存工具。下面就来简单实现一个这样的工具。
先上代码:
import java.util.HashMap; import java.util.Map; import java.util.concurrent.*; /** * @Author: lixk
* @Date: 2018/5/9 15:03
* @Description: 简单的内存缓存工具类 */
public class Cache { //键值对集合
private final static Map<String, Entity> map = new HashMap<>(); //定时器线程池,用于清除过期缓存
private final static ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor(); /** * 添加缓存
*
* @param key 键
* @param data 值 */
public synchronized static void put(String key, Object data) {
Cache.put(key, data, 0);
} /** * 添加缓存
*
* @param key 键
* @param data 值
* @param expire 过期时间,单位:毫秒, 0表示无限长 */
public synchronized static void put(String key, Object data, long expire) { //清除原键值对
Cache.remove(key); //设置过期时间
if (expire > 0) {
Future future = executor.schedule(new Runnable() {
@Override public void run() { //过期后清除该键值对