844 Star 3K Fork 927

GVPJbootProjects / jboot

 / 详情

缓存类型ehredis情况下,Jboot.me().getCache().getKeys()永远为ehcache的结果

已完成
创建于  
2017-09-20 17:02

1、当ehcache为空,redis非空时,getKeys 返回空
2、当ehcache非空,redis非空时,getKeys 返回ehcache.getkeys结果

查看源码:

        switch (message.getAction()) {
            case JbootEhredisMessage.ACTION_PUT:
                ehcache.remove(message.getCacheName(), message.getKey());
                break;
            case JbootEhredisMessage.ACTION_REMOVE:
                ehcache.remove(message.getCacheName(), message.getKey());
                break;
            case JbootEhredisMessage.ACTION_REMOVE_ALL:
                ehcache.removeAll(message.getCacheName());
                break;
        }

每次cache.put的时候,都会remove其他集群cache,而每次cache.get的时候都没有写入到ehcache,导致虽然使用的是二级缓存,但在集群环境下因为只有cache.put的实例在get时会查询ehcache,其他示例都是直接查询的redis,二级缓存与直接用redis并无太大区别。

所以建议:

1、cache.getKeys 直接返回 redis 结果
2、cache put 的时候同步 去 put 集群其他实例 ehcache 或 cache.get 的时候 put ehcache。

评论 (3)

Rlax 创建了任务

看来只支持单节点,多节点之间本地缓存不会同步的是么?

Michael Yang 关闭了任务

已经按建议修改,多谢。

登录 后才可以发表评论

状态
负责人
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
参与者(3)
61279 fuhai 1578915942 7637 rlaxuc 1578914503
Java
1
https://gitee.com/JbootProjects/jboot.git
git@gitee.com:JbootProjects/jboot.git
JbootProjects
jboot
jboot

搜索帮助