odoo 集群频繁更新静态资源包,并失效缓存
频繁的更新会影响服务的性能
发生该事件的核心代码
def lookup(self, method, *args, **kwargs): d, key0, counter = self.lru(args[0]) key = key0 + self.key(*args, **kwargs) try: r = d[key] counter.hit += 1 return r except KeyError: counter.miss += 1 value = d[key] = self.method(*args, **kwargs) return value except TypeError: counter.err += 1 return self.method(*args, **kwargs)
目前认为由于两个服务器之间还存在某些数据,未完成共享,比如上方中的key 数据, 目前看起来还是存储在内存中的, 没有在redis 中存储, 结果就会导致两边的服务器查不到相应的缓存数据
系统在没有找到key值的情况下会执行method方法,也就是IrQWeb._get_asset_nodes
,会调用清理缓存的功能
self.key(*args, **kwargs)
是对应方法传入的参数,_get_asset_nodes
传入的参数就是:'web.assets_backend', 'en_US', True, False, False, False, (None,)
key 的示例值如下:
('ir.qweb', <function IrQWeb._get_asset_nodes at 0x00000000085E8E18>, 'web.assets_backend', 'en_US', True, False, False, False, (None,))
其中使用了方法对象,存储的是一个地址值, 不同的服务器,在使用的时候自然会使用不同的地址,就导致key 的不一样, 尝试更改key 的值.
解决方案如下:
一个模型下的方法应该不会有重复的,所以直接将对象更改为方法名即可,即使用字符串
更改后的代码如下: (添加了 __name__
))
def lru(self, model): counter = STAT[(model.pool.db_name, model._name, self.method)] return model.pool.cache, (model._name, self.method.__name__), counter
本文来自博客园,作者:那时一个人,转载请注明原文链接:https://www.cnblogs.com/qianxunman/p/17009311.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
2020-12-28 postgres 新增或者更新语句
2019-12-28 apt 镜像源快速替换