你好,我的业务场景是这样的,我的多租户是在webSession中存了一个租户id,根据这个租户id来做数据隔离,缓存隔离等操作。并且用到了多级缓存,于是自定义写了一个KeyConvert,但是发现取本地缓存的时候无问题,但是如果取第二级也是就redis的时候有问题。
建议将AbstractExternalCache的buildKey逻辑改为AbstractEmbeddedCache一致
a64a0gku1#
buildKey的目的就是为了把它转成字节数组,如果已经是byte[]或者String就没有必要转了。
你看看设置统一的keyPrefix能不能解决问题,如果不行就自己想办法改改吧。
vmpqdwk32#
目前我已经自己改了代码暂时解决这个问题,只是感觉自定义生成key这个场景应该挺多的,强烈建议keyPrefix开放一个接口出来,提供一个自定义生成的方案
nwo49xxi3#
😄 这个buildKey的确令人头大, 租户相关的prefix在key为string和byte[]的时候直接不走keyConveror了.
作者考虑加一个keyPrefix的接口吧, 现有的keyPrefix只能静态. 对于动态的prefix目前没有办法支持.
olhwl3o24#
提供一个接口,如果你提供的key convertor实现了这个接口,byte[]和String都走key convertor,否则就继续走以前的逻辑(和以前兼容),可以吗?
bhmjp9jg5#
我觉得可以,反正目的是需要能够自定义key就可以了。感谢作者大大
jutyujz06#
改了,接口就是KeyConvertor,以前这个接口只是放常量的。你们看看行不行,可以我就发个版本。
6f0db39
nmpmafwu7#
这个比想象的要复杂一点,因为RefreshCache在做自动刷新的时候会以byte[]为key来存取数据,并且它假定byte[]不会被转换(其实ExternalKeyUtil.buildKeyAfterConvert被调用了两次,把prefix加了两遍,但是不影响运行效果,不改了)。
所以我补了一个提交,可以先用2.7.3-SNAPSHOT试,没有问题的话过几天在发布版本。
00bcbb3
7条答案
按热度按时间a64a0gku1#
buildKey的目的就是为了把它转成字节数组,如果已经是byte[]或者String就没有必要转了。
你看看设置统一的keyPrefix能不能解决问题,如果不行就自己想办法改改吧。
vmpqdwk32#
buildKey的目的就是为了把它转成字节数组,如果已经是byte[]或者String就没有必要转了。
你看看设置统一的keyPrefix能不能解决问题,如果不行就自己想办法改改吧。
目前我已经自己改了代码暂时解决这个问题,只是感觉自定义生成key这个场景应该挺多的,强烈建议keyPrefix开放一个接口出来,提供一个自定义生成的方案
nwo49xxi3#
😄 这个buildKey的确令人头大, 租户相关的prefix在key为string和byte[]的时候直接不走keyConveror了.
作者考虑加一个keyPrefix的接口吧, 现有的keyPrefix只能静态. 对于动态的prefix目前没有办法支持.
olhwl3o24#
提供一个接口,如果你提供的key convertor实现了这个接口,byte[]和String都走key convertor,否则就继续走以前的逻辑(和以前兼容),可以吗?
bhmjp9jg5#
提供一个接口,如果你提供的key convertor实现了这个接口,byte[]和String都走key convertor,否则就继续走以前的逻辑(和以前兼容),可以吗?
我觉得可以,反正目的是需要能够自定义key就可以了。感谢作者大大
jutyujz06#
改了,接口就是KeyConvertor,以前这个接口只是放常量的。你们看看行不行,可以我就发个版本。
6f0db39
nmpmafwu7#
这个比想象的要复杂一点,因为RefreshCache在做自动刷新的时候会以byte[]为key来存取数据,并且它假定byte[]不会被转换(其实ExternalKeyUtil.buildKeyAfterConvert被调用了两次,把prefix加了两遍,但是不影响运行效果,不改了)。
所以我补了一个提交,可以先用2.7.3-SNAPSHOT试,没有问题的话过几天在发布版本。
00bcbb3