合并从缓存返回的List,引发缓存变空。

发布于 2021-12-07 01:50:39 字数 1523 浏览 893 评论 1

public static List<Record> getUserSubscribe(String dsname, Map<String, Object> paraMap, boolean cacheable, String clearCachePWD) {
        //获取用户订阅的服务。数据库中用户订阅的服务是有数据的,所以不应该打印111的。
        List<Record> userSubscribeList = DbUtil.filterFind(dsname, 110, 0, 30, cacheable, paraMap, clearCachePWD);
        if(userSubscribeList.isEmpty()){//用户订阅为空,返回默认服务
            System.out.println("111");
          //获取默认服务默
            return DbUtil.filterFind(dsname, 111, 0, 11, cacheable, paraMap, clearCachePWD);
        } else {//用户订阅不为空时,合并系统强制推荐的服务。
            System.out.println("222");
//            //获取系统强制推荐的服务
            List<Record> sysTjList = DbUtil.filterFind(dsname, 158, 0, 8, cacheable, paraMap, clearCachePWD);
            //找出相同的服务
            List<Record> sameList = new ArrayList<Record>();
            //这里省略找出相同服务代码
            //去重
            userSubscribeList.removeAll(sameList);

            //合并方法1:直接把去重后的用户订阅合并到系统强制推荐的服务里。
            //使用这个方法合并。就会有问题:运行前两次是正常的,都不会打印111。但第三次就会打印111了。
            sysTjList.addAll(userSubscribeList);
            return sysTjList;
            
            //合并方法2:没有问题
//          List<Record> allList = new ArrayList<Record>();
//          allList.addAll(sysTjList);
//          allList.addAll(userSubscribeList);
//          return allList;
        }

以上代码逻辑简单说明:

就是把从缓存里取出来的两个list对像,使用addAll合并时,调用两次后,第三次结果就变空集合了。

使用第二种方法合并就不会有问题。

实在找不出问题存在,有人知道的不。。

只使用的是j2cache当缓存。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

孤檠 2021-12-08 08:20:17

你是去重那儿删掉了。第一次进去,系统强制的推荐的服务和缓存中的没有重复的;第二次进去,userSubscribeList不变,但是sysTjList中包含了userSubscribeList中的数据,去重后,就把缓存中的数据删掉了;第三再进去,缓存肯定就没数据了

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文