jetcache icon indicating copy to clipboard operation
jetcache copied to clipboard

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

Open pengliang0601 opened this issue 3 years ago • 7 comments

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

pengliang0601 avatar Dec 10 '22 07:12 pengliang0601

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

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

areyouok avatar Dec 10 '22 13:12 areyouok

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

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

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

pengliang0601 avatar Dec 10 '22 13:12 pengliang0601

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

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

xrayw avatar Jan 04 '23 13:01 xrayw

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

areyouok avatar Jan 05 '23 02:01 areyouok

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

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

pengliang0601 avatar Jan 05 '23 02:01 pengliang0601

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

https://github.com/alibaba/jetcache/commit/6f0db39bf05020fa000f9ce5f49bd048d223fb9c

areyouok avatar Jan 05 '23 02:01 areyouok

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

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

https://github.com/alibaba/jetcache/commit/00bcbb3f9ed073ffd3d845c656bba6d8878fd1a0

areyouok avatar Jan 05 '23 07:01 areyouok