1. 组件设定缓存过期时间
public List queryorder(order vo)
if(缓存为空){
list= queryByCache(vo);//从数据库中读取数据
}
return list;
}
2. 代码设定缓存逻辑过期,可脱库运行
方法是利用时间戳,査询默认以 缓存数据为主,每次设置数据的时候放入一个时间戳,每次读取数据的时候用系统当前时间和上次设置的这个时间做对比。如下面代码示例所示,比如超过5分钟,那么就再查一次数据库,然后重新更新到缓存中。这种方式与设置 Redis超时时间方式的主要区别在于:过期时间是逻辑过期。当然Reids t中的数据第一次还是从DB中心获取的,但这样可以保证 Redis里面永远有数据,一般是对DB的一种容错方法,当DB“挂掉”的时候用户还可以请求 Redis中的数据。
public List queryorder(Order vo){
//从缓存中查询数据
list= queryByCache(vo);
if(1ist=nul1l当前时间距离上次查询时间超过了5分钟){
//第一次査询的时候11st为null
1ist= queryByDb(vo);//从数据库中读取数据
//封装更新 Redis数据和时间的方法
setredis(1ist,当前时间);
}
return list;
}
3. 根据数据热度不同,设置多级缓存
可以通过使用 JVM Cache作为应用内的一级缓存,一般是体积小、访问频率大的更适合这种 JVM Cache方式,再将一套Reis作为二级 remote缓存(一般存储活跃的热点业务数据),最外层三级 Redis作为持久化缓存。
JVM Cache:
使用static关键字开辟内存与搜索时间复杂度为O(1)的HashMap来存储数据提高读取效率;然后实现相应的缓存写入、更新、读取、删除等逻辑;