JFinal中redis插件的一个反馈

今天用了JFinal的Redis插件总体感觉非常方便,先给JFinal开源团队点个赞!

Config配置文件中我加入了2个Redis构造方法并add,具体为RedisPlugin 类中的
public RedisPlugin(String cacheName, String host, int port, int timeout, String password)
除了两个cacheName(分别是"ca"和"cb")不同以外,其他参数完全相同。

然后呢我先在ca中 set了一个testKey 值为vvv,但从cb库中取值返回的并不是null而是ca中的vvv,请问这里是cb默认同步了ca的缓存吗?如果是的话如何将这种默认缓存策略关闭。

String s1 = Redis.use("ca").set("testKey", "vvv");//返回"OK"
String s2 = Redis.use("ca").get("testKey");//返回"vvv"
String s3 = Redis.use("cb").get("testKey");//返回"vvv" 但我并未对cb中set任何值

ps:我想应用在如下业务场景中:
(ca与cb的key都是用户的id)
ca cacheName里面放用户对应的余额
cb cacheName里面放用户对应的积分

评论区

张露露

2017-07-09 23:25

群里不敢@JFinal 生怕大大把我毒打一顿XD

aywcyc

2017-07-10 11:35

下个redis客户端调试下

JFinal

2017-07-10 11:46

如果构造 RedisPlugin 时所使用的 String host, int port, int timeout, String password这些参数都相等,意味着两个 RedisPlugin 实例指向的是同一个地方,对这同一个地方进行读写自然就有关联

创建多个 RediPlugin 的关键是,要么让 host 或者 port 值不同,证明指向的是不同的 redis 服务端。要么让 host port 全相同,但是 int database 这个参数不同,证明是指向的同一个 redis 服务端的不同库。

青峰大辉

2017-07-10 11:51

我同意楼上观点

giegie

2017-07-10 14:17

我可不可以这么理解 这个cacheName就是相当于 这个连接的 别名?连接由(IP + port + database)决定。

JFinal

2017-07-10 14:27

@giegie 如果你的 ip + port + database 全一样,那么这个 cacheName 就仅相当于一个别名了

张露露

2017-07-10 14:55

@JFinal 之前我一直认为cacheName可以作为区分数据存放区域的名字,但在同ip同port同database的情况下程序无法区分。
所以如果想在同一个redis服务中,且按文中ps所述需求,只能用int dataBase这个参数按来区分数据库(数据存放的区域)来实现。

热门反馈

扫码入社