基础资料数据存在缓存,缓存管理清除后正常原创
金蝶云社区-Running
Running
51人赞赏了该文章 752次浏览 未经作者许可,禁止转载编辑于2023年12月08日 20:36:19

基础资料数据存在缓存,缓存管理清除后正常


1、基础资料以视图作为数据源,视图数据发生改变时,基础资料存在缓存

  • 问题现象

image.png

image.png

image.png


  • 排查步骤

    可通过勾选“禁用缓存”属性解决。

image.png

image.png


2、通过SQL更新基础资料数据,结果系统内对应基础资料未同步更新

  • 问题现象

    二开插件通过SQL脚本修改基础资料数据,但是前台对应基础资料未同步更新。

image.png


  • 排查步骤

    二开插件修改数据同时,也需要通过代码清除对应基础资料缓存,具体可参考:

https://vip.kingdee.com/article/185759531572440832?productLineId=1&isKnowledge=2 


3、二开插件代码清除基础资料数据缓存,但是不生效

  • 问题现象

    调用CacheUtil.ClearCache(ctx.GetAreaCacheKey(), tableName)方法清除缓存不成功。

image.png


  • 排查步骤

    CacheUtil.ClearCache() 方法第一个参数是【区AreaCacheKey】隔离标识,常见的传参有 ctx.GetAreaCacheKey() 跟 ctx.GetDBCacheKey() 两个。

    反编译看的话,ctx.GetAreaCacheKey() 代表的是:DBId + IsMultiOrg + UserLocale.LCID(账套ID+是否多组织+登录语言ID),而ctx.GetDBCacheKey() 代表的则是:DBId + IsMultiOrg(账套ID+是否多组织)。对比两者的差异,区别在于是否区分多语言,ctx.GetDBCacheKey()没有多语言隔离。

    早期版本,标准产品数据缓存的Area区,用的是 ctx.GetAreaCacheKey() 作为隔离标识,直到22年9月份版本开始不区分多语言,原因是数据缓存默认加载全部语言数据,不存在语言的区别,出于性能优化考虑,数据缓存改用  ctx.GetDBCacheKey() 作为Area区。

    即22年9月之前的版本可以用 CacheUtil.ClearCache(ctx.GetAreaCacheKey(), tableName) 方法清除缓存,22年9月及之后的版本需改用 CacheUtil.ClearCache(ctx.GetDBCacheKey(), tableName) 方法清除数据缓存。


图标赞 51
51人点赞
还没有人点赞,快来当第一个点赞的人吧!
图标打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!