如何对jfinal的redis cache做扩展

我用jfinal redis的时候发现Redis.use返回的cache其实支持redis的方法还在少数,很多都不支持,比如我需要用pipline去做一些流水线的工作cache就没有


一般的方法可能是我Redis.use().GetJedis()后用Jedis去做pipline,这样一般情况可能可以解决的,但是这个pipline的hset只能支持(string,string,string)的函数模型,而我想缓存controller 需要(string,string,controller)。


在jfinal redis cache 的hset中有封装一层先转成byte,再转string,而cache并没有pipline的方法供我去调用,所以我即使获取了jedis还需要把cache的参数转换的代码keyToBytes那部分拷贝过来,一方面代码冗余了,第二写法也不好看,维护成本也高


我现在想去实现一个自己的MyCache的类集成Cache去添加一个pipline的接口,但是我自己的MyCache又加入不到RedisPlugin中,plugin start后是直接add 他自己的cache


我想问,如果我想扩展一些redis的方法到redis cache中怎么做比较好?


评论区

JFinal

2017-07-16 10:26

redis 有一个 Cache 类,其中有很多方法,相当于是 API,一是如果 redis 后续增加了 API,那么理论上来说 redis plugin 也需要相应升级跟上 jedis 的升级。二是 Cache 类是确实没有完全支持 jedis 中的方法,因为 jedis 中的方法太多了,有些我自己也没有用过,或者用的人少,当时就没有做进去

要支持更加全面的 jedis 功能,可以考虑下面两种方式
1:做一个 RedisExt 扩展类,里面依赖 Redis、Cache 的相关功能获取 Jedis 对象,去实现一些功能
2:改 jfinal redis 插件源代码,在 Cache 中添加实现

jfinal 后续版本也会根据需求来添加更多 API

yjjdick1990

2017-07-16 10:47

@JFinal 波总意思是我直接去继承redis plugin写一个RedisPluginExt去扩展我自己的方法,然后在plugins.add(new RedisPluginExt())是吗

JFinal

2017-07-16 10:54

直接接写一个 RedisExt 类,然后里面直接添加一些你自己需要的方法去用就好,用的时候这样 RedisExt.xxx(...);

小99

2018-01-18 20:39

@JFinal 波总,JedisPoolConfig为啥不开放出来,让自己配置,自己设置里面的参数

JFinal

2018-01-18 20:41

@小99 一直都是开放的, RedisPlugin.getJedisPoolConfig() 即可

热门反馈

扫码入社