我正在尝试使用spring-memcached
. 文档建议使用对象作为键,我需要在我的域类中有一个带有 @CacheKeyMethod 注释的方法。
但问题是我在不同场景中使用相同的域类,并且在每种情况下生成的密钥具有不同的逻辑。例如,User
其中一个场景的类要求键在city
and方面是唯一的gender
,但在另一种情况下,它要求在用户方面是唯一的email
,它本质上是您的查找所基于的。
虽然用户的电子邮件将决定城市和性别,所以我也可以在第一种情况下使用电子邮件作为键,但这意味着每个用户都有单独的缓存条目,而缓存的数据将相同,只要性别和城市相同,这有望大幅提高命中率(想想你可以期望有多少用户是来自班加罗尔的男性)。
有没有办法可以定义不同的键。如果生成密钥的逻辑可以从域类本身外部化,那就太好了。
我阅读了文档并发现某些东西称为CacheKeyBuilder
和/或CacheKeyBuilderImpl
可以解决问题,但我不明白如何继续。
编辑.. 好的..我有一个线索!CacheKeyBuliderImpl 所做的是,它调用 defaultKeyProvider 实例上的 generateKey 方法,该方法在提供的域类的方法上查找 @cachekeyannotation 并执行找到的方法以获取密钥。
因此,CacheKeyBuilderImpl
用自定义 Impl 替换 或用KeyProvider
你的替换 CacheKeyBuilderImpl 中的默认实现可能会解决问题……但是 keyprovider 引用是硬连线到 DefaultKeyProvider 的。
任何人都可以帮助我实现 CacheKeyBuilder(关于不同方法的作用;文档没有说明)以及如何注入它以代替通常的 CacheKeyBuilderImpl