jetcache 多租户多级缓存下string类型key不走keyConvertor问题

0s7z1bwu  于 3个月前  发布在  其他
关注(0)|答案(7)|浏览(89)

你好,我的业务场景是这样的,我的多租户是在webSession中存了一个租户id,根据这个租户id来做数据隔离,缓存隔离等操作。并且用到了多级缓存,于是自定义写了一个KeyConvert,但是发现取本地缓存的时候无问题,但是如果取第二级也是就redis的时候有问题。

建议将AbstractExternalCache的buildKey逻辑改为AbstractEmbeddedCache一致

a64a0gku

a64a0gku1#

buildKey的目的就是为了把它转成字节数组,如果已经是byte[]或者String就没有必要转了。

你看看设置统一的keyPrefix能不能解决问题,如果不行就自己想办法改改吧。

vmpqdwk3

vmpqdwk32#

buildKey的目的就是为了把它转成字节数组,如果已经是byte[]或者String就没有必要转了。

你看看设置统一的keyPrefix能不能解决问题,如果不行就自己想办法改改吧。

目前我已经自己改了代码暂时解决这个问题,只是感觉自定义生成key这个场景应该挺多的,强烈建议keyPrefix开放一个接口出来,提供一个自定义生成的方案

nwo49xxi

nwo49xxi3#

😄 这个buildKey的确令人头大, 租户相关的prefix在key为string和byte[]的时候直接不走keyConveror了.

作者考虑加一个keyPrefix的接口吧, 现有的keyPrefix只能静态. 对于动态的prefix目前没有办法支持.

olhwl3o2

olhwl3o24#

提供一个接口,如果你提供的key convertor实现了这个接口,byte[]和String都走key convertor,否则就继续走以前的逻辑(和以前兼容),可以吗?

bhmjp9jg

bhmjp9jg5#

提供一个接口,如果你提供的key convertor实现了这个接口,byte[]和String都走key convertor,否则就继续走以前的逻辑(和以前兼容),可以吗?

我觉得可以,反正目的是需要能够自定义key就可以了。感谢作者大大

jutyujz0

jutyujz06#

改了,接口就是KeyConvertor,以前这个接口只是放常量的。你们看看行不行,可以我就发个版本。

6f0db39

nmpmafwu

nmpmafwu7#

这个比想象的要复杂一点,因为RefreshCache在做自动刷新的时候会以byte[]为key来存取数据,并且它假定byte[]不会被转换(其实ExternalKeyUtil.buildKeyAfterConvert被调用了两次,把prefix加了两遍,但是不影响运行效果,不改了)。

所以我补了一个提交,可以先用2.7.3-SNAPSHOT试,没有问题的话过几天在发布版本。

00bcbb3

相关问题