如何使用RedisSentinel

麻烦问一下,JFinal中如何能够集成RedisSentinel。

我看到有一篇文章介绍JFinal的集成方案,https://my.oschina.net/aixiaohua/blog/710734

但是要修改JFinal本身的Cache。有没有不修改JFinal本身源码情况下的集成方案?

评论区

JFinal

2017-11-05 23:06

jfinal 3.2 版本中的 RedisPlugin 里面的属性与方法全都做成了 protected,所以可以通过继承 RediPlugin 来用上 RedisSentinel

datianxia

2017-11-06 10:56

刚看了一下 3.2里面只有几个属性是protected的, 方法都是public的

JFinal

2017-11-06 15:06

@datianxia protected 与 public 都可以通过继承来覆盖扩展

i++

2020-05-14 07:51

@JFinal 可以继承,但我们公司好多项目用了jfinal,然后好多代码里引用了Cache这个类。现在要加集群功能,如果用继承的方式,那些有引用到Cache的类都要换成新的Cache类。所有功能代码都要重新测试,评审。真是个灾难啊。

JFinal

2020-05-14 09:56

@i++ Cache 类无法直接获取,一般是通过 CacheKit.use() 或者 CacheKit.put(...) 来间接引用的 Cache,所有继承扩展是可以的

况且加集群功能根本不需要继承扩展,只需要通过 CacheKit.getCacheManager() 得到 CacheManager,往里头添加 ehcache 的监听器实现缓存同步就可以了

这里对 ehcache 做缓存同步,不要做成数据多节点复制,而是做成某节点数据有变化则发广播让其它节点 remove 掉缓存数据,让下载读取的时候去数据库读

参考 oschina 的 j2cache 中对于 ehcache 广播用法:
https://www.oschina.net/p/j2cache
https://v.youku.com/v_show/id_XNzAzMTY5MjUy.html

JFinal

2020-05-14 10:01

@i++ 此外 ehcache 的集群还可以仅仅通过修改 ehcache.xml 配置就可以实现,无需改动 jfinal 源码,也无需继承扩展

i++

2020-05-14 10:36

@JFinal 您好!感谢您的及时回复。我们用的Cache是com.jfinal.plugin.redis.Cache。不是net.sf.ehcache.Cache。一个是redis的。一个是ehcache的。两个东西。 如jfinal官方文档中:Cache bbsCache = Redis.use("bbs");这样用的。

JFinal

2020-05-14 10:42

@i++ RedisPlugin 可以使用 Redis.addCache(....) 事先放入自己的 Cache 继承类,完全接管原有功能

热门反馈

扫码入社