weed3-2.3.3.查询的缓存控制是什么

发布时间:2021-06-24 14:35:57 作者:chen
来源:亿速云 阅读:114

本篇内容主要讲解“weed3-2.3.3.查询的缓存控制是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“weed3-2.3.3.查询的缓存控制是什么”吧!

Weed3 一个微型ORM框架(只有0.1Mb哦)

源码:https://github.com/noear/weed3 源码:https://gitee.com/noear/weed3

缓存控制,是查询中的重点

框架提供的是控制服务。而非缓存服务本身,了解这个很重要。

缓存控制需要两个重要的接口定义:
//用它可以包装各种缓存服务
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 拼到一起,变成一个二级缓存服务;多嵌套一下就是三级缓存服务了)
 */
public interface ICacheController<T> {
    //使用哪个缓存服务
    T caching(ICacheService service);
    //是否使用缓存
    T usingCache(boolean isCache);
    //使用缓存并设置时间
    T usingCache(int seconds);
    //为缓存添加标签
    T cacheTag(String tag);
}
有了上面的基础后,现在开始使用缓存控制
ICacheService cache = new LocalCache();

使用缓存,时间为默认(会自动产生稳定的缓存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);
    }
  });

以一个分页查询为例

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");

这个极少用(需要单项更新的缓存,建议用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.内置缓存服务

2.扩展缓存服务

<dependency>
  <groupId>org.noear</groupId>
  <artifactId>weed3.cache.ehcache</artifactId>
  <version>3.2.1.1</version>
</dependency>
<dependency>
  <groupId>org.noear</groupId>
  <artifactId>weed3.cache.j2cache</artifactId>
  <version>3.2.1.1</version>
</dependency>
<dependency>
  <groupId>org.noear</groupId>
  <artifactId>weed3.cache.memcached</artifactId>
  <version>3.2.1.1</version>
</dependency>
<dependency>
  <groupId>org.noear</groupId>
  <artifactId>weed3.cache.redis</artifactId>
  <version>3.2.1.1</version>
</dependency>

要不要自己封装个?

到此,相信大家对“weed3-2.3.3.查询的缓存控制是什么”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

推荐阅读:
  1. MySQL之查询缓存
  2. 查询mysql的缓存优化详解

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

上一篇:Java命名规范有哪些

下一篇:Java变量命名规范有哪些

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》