Weed3 一个微型ORM框架(只有0.1Mb哦)
源码:https://github.com/noear/weed3
源码:https://gitee.com/noear/weed3
缓存控制,是查询中的重点
框架提供的是控制服务。而非缓存服务本身,了解这个很重要。
缓存控制需要两个重要的接口定义:
- 1.缓存服务适配接口 ICacheService
(平常用它的加强版 ICacheServiceEx)
//用它可以包装各种缓存服务
public interface ICacheService {
void store(String key, Object obj, int seconds);
Object get(String key);
void remove(String key);
int getDefalutSeconds();
String getCacheKeyHead();
}
/** weed3内置了三个实现类:
*EmptyCache,空缓存
*LocalCache,本地缓存
*SecondCache,二级缓存容器(可以把两个 ICacheService 拼到一起,变成一个二级缓存服务;多嵌套一下就是三级缓存服务了)
*/
- 2.在缓存服务上进行的操控接口:ICacheController
public interface ICacheController<T> {
//使用哪个缓存服务
T caching(ICacheService service);
//是否使用缓存
T usingCache(boolean isCache);
//使用缓存并设置时间
T usingCache(int seconds);
//为缓存添加标签
T cacheTag(String tag);
}
有了上面的基础后,现在开始使用缓存控制
- 1.先搞个服务实例出来
ICacheService cache = new LocalCache();
- 2.用起来
使用缓存,时间为默认(会自动产生稳定的缓存key)
db.table("test").select("*").caching(cache).getMapList();
使用缓存,并缓存30s
db.table("test")
.caching(cache).usingCache(30) //也可以放在table() 和 select()之间
.select("*").getMapList();
给缓存加个tag(tag 相当于 缓存key的虚拟文件夹)
db.table("test")
.caching(cache)
.usingCache(30).cacheTag('test_all') //这是tag,不是key
.limit(10,20)
.select("*").getMapList();
*3.精细控制
根据查询结果控制缓存时间
db.table("test").where("id=?",10)
.caching(cache)
.select("*").getItem(UserModel.class,(cu,m)->{
if(m.hot > 2){
uc.usingCache(60 * 5); //热门用户缓存5分钟
}else{
uc.usingCache(30);
}
});
- 4.缓存清除
以一个分页查询为例
db.table("test").limit(20,10)
.caching(cache).cacheTag("test_all")
.select("*").getMapList();
db.table("test").limit(30,10)
.caching(cache).cacheTag("test_all")
.select("*").getMapList();
//不管你有多少分页,一个tag把它清光
cache.clear("test_all");
- 5.缓存更新
这个极少用(需要单项更新的缓存,建议用redis)
db.table("test").where("id=?",10)
.caching(cache).cacheTag("test_"+10)
.select("*").getItem(UserModel.class);
cache.update("test_"+10,(UserModel m)->{
m.sex = 10;
return m;
});
框架的缓存控制,也是极为自由的哟。应该是的吧?哈合。
缓存服务的可用情况
1.内置缓存服务
- org.noear.weed.cache.EmptyCache // 空缓存
- org.noear.weed.cache.LocalCache // 轻量级本地缓存(基于Map实现)
- org.noear.weed.cache.SecondCache // 二级缓存(组装两个 ICacheServiceEx 实现)
2.扩展缓存服务
- org.noear.weed.cache.ehcache.EhCache // 基于ehcache封装
<dependency>
<groupId>org.noear</groupId>
<artifactId>weed3.cache.ehcache</artifactId>
<version>3.2.1.1</version>
</dependency>
- org.noear.weed.cache.j2cache.J2Cache // 基于国人开发的J2Cache封装
<dependency>
<groupId>org.noear</groupId>
<artifactId>weed3.cache.j2cache</artifactId>
<version>3.2.1.1</version>
</dependency>
- org.noear.weed.cache.memcached.MemCache // 基于memcached封装
<dependency>
<groupId>org.noear</groupId>
<artifactId>weed3.cache.memcached</artifactId>
<version>3.2.1.1</version>
</dependency>
- org.noear.weed.cache.redis.RedisCache // 基于redis封装
<dependency>
<groupId>org.noear</groupId>
<artifactId>weed3.cache.redis</artifactId>
<version>3.2.1.1</version>
</dependency>
- 也可以自己封装个 ICacheServiceEx …