1、基本用法
Redis与Cache联合起来可以非常方便地使用Redis服务,Redis对象通过use()方法来获取到Cache对象,Cache对象提供了丰富的API用于使用Redis服务,下面是具体使用示例:
public void redisDemo() {
// 获取名称为bbs的Redis Cache对象
Cache bbsCache = Redis.use("bbs");
bbsCache.set("key", "value");
bbsCache.get("key");
// 获取名称为news的Redis Cache对象
Cache newsCache = Redis.use("news");
newsCache.set("k", "v");
newsCache.get("k");
// 最先创建的Cache将成为主Cache,所以可以省去cacheName参数来获取
bbsCache = Redis.use(); // 主缓存可以省去cacheName参数
bbsCache.set("jfinal", "awesome");
}
以上代码中通过”bbs”、”news”做为use方法的参数分别获取到了两个Cache对象,使用这两个对象即可操作其所对应的Redis服务端。
通常情况下只会创建一个RedisPlugin连接一个redis服务端,使用Redis.use().set(key,value)即可。
注意:使用 incr、incrBy、decr、decrBy 方法操作的计数器,需要使用 getCounter(key) 进行读取而不能使用 get(key),否则会抛反序列化异常。同理:incrBy(key, value) 操作不能使用 set(key, value) 。
2、新用法(建议)
高版本jfinal 针对 Redis、Cache 这两个类新增了 call 方法,该方法直接暴漏出 Jedis 对象供使用,可以绕过序列化、反序列化过程
// 使用 lambda 开放 Jedis API
Long ret = Redis.call(j -> j.incrBy("key", 1));
Long ret = Redis.call(jedis -> {
return jedis.incrBy("key", 1);
});
如果配置了多个 cache 可以通过 Redis.use(...) 先获取对应的 cache 对象再进行操作
// 指定 cacheName 参数再操作
Long ret = Redis.use("mycache").call(j -> j.incrBy("key", 1));
// Redis.use() 不带参表示获取默认 cache
Long ret = Redis.use().call(j -> j.incrBy("key", 1));
存入String 以外类型数可以将其先转成 json 再操作
User user = dao.findById(userId);
String userJson = JsonKit.toJson(user);
Redis.call(jedis -> {
return jedis.set("user", userJson);
});
// 或者简化为下面代码
Redis.call(j -> j.set("user", JsonKit.toJson(user)));
以上call 用法,不涉及对象的序列化、反序列化,直接操作 jedis 对象,在当下 json 非常普及的背景下是 jfinal 官方推荐的使用方法
版权声明:「DDKK.COM 弟弟快看,程序员编程资料站」本站文章,版权归原作者所有
JFinal 官方 | https://jfinal.com