java吧 关注:1,241,546贴子:12,713,210
  • 13回复贴,共1

关于Google的Cache缓存值没有调用put方法却更新的问题

只看楼主收藏回复

如题,刚刚写了半天的帖子,发表后不知道为什么整个帖子都不见了,只能再写一遍,慢慢发。


IP属地:云南1楼2023-08-17 17:03回复
    ....为什么内容就是发不出来


    IP属地:云南4楼2023-08-17 17:08
    回复

      问题描述如图所示


      IP属地:云南5楼2023-08-17 17:12
      回复
        代码如图所示:




        IP属地:云南6楼2023-08-17 17:14
        回复
          后续经过测试,为了防止业务逻辑修改到缓存中的值,必须使用反射复制一个新的List(重新声明一个变量都不行,要反射产生一个新的List实例),让业务流程操作新的List,才不会影响到缓存中的数据。
          但是反射毕竟消耗资源,有没有别的方法解决?或者是我使用缓存的方法不对?我试了一下cn.hutool.cache.Cache,也有相同的问题。


          IP属地:云南7楼2023-08-17 17:20
          回复
            有无懂哥


            IP属地:云南8楼2023-08-17 17:23
            收起回复
              一粘代码就被删除,还是怪我提到谷歌?


              IP属地:云南来自iPhone客户端9楼2023-08-17 17:29
              回复
                这个缓存其实就是Map,拿了个引用地址,你更新了对象属性,缓存的引用肯定也更新了


                IP属地:河北来自手机贴吧12楼2023-08-17 18:36
                收起回复
                  这不是必然的嘛,你对象是同一个引用,修改了肯定同步更新了啊。参考mybatis的二级缓存,每次get缓存,都是是把对象重新序列化了一遍


                  IP属地:湖南来自iPhone客户端13楼2023-08-17 19:02
                  回复
                    如果需要修改从缓存中的值,就是要序列化出来一个新的对象供使用,说占用内存,所以缓存本身就不允许你放太多,要有淘汰策略的


                    IP属地:湖南来自iPhone客户端14楼2023-08-17 19:05
                    回复
                      不要觉得什么反射,序列化影响效率,你不做,你使用的框架在内部做了千千万万次。


                      IP属地:湖南来自iPhone客户端15楼2023-08-17 19:06
                      收起回复