对于许多 java 服务,我们使用 AWS ElastiCache 作为由 Spring Cache 抽象和 spymemcached 集成的分布式缓存。
在一项服务中,我看到我得到的结果类型与我预期的不同,导致 ClassCastException。准确地说:我有一个缓存键,因此我期望一个列表,但我得到的是 Type2 的结果。
我们定义了许多缓存,其中一些使用相同的缓存键:
Cache1:
cacheKey -> List<Type1>
Cache2:
cacheKey -> Type2
由于它们位于不同的缓存中,因此当我们使用简单的基于 hashmap 的缓存时,这很有效。但是,对于 ElastiCache/Memcached,我们似乎并没有真正的不同缓存(从我对 memcached 的了解来看,这很有意义——这并不多)。
我本来希望 spymemcached 通过操作缓存键来解决这个问题,这样应用程序就不需要知道实际的缓存实现(这可以通过操作缓存键并在它们前面加上缓存名称 ie 来完成)。
从一些调试会话和我看到的错误来看,情况似乎并非如此。
我专门研究了这个类:
com.google.code.ssm.spring.SSMCache
L82: value = cache.get(getKey(key), null);
L154: private String getKey(final Object key) {
L155: return key.toString();
L156: }
我本来希望 getKey() 方法以缓存名称为前缀。
所以我的问题是:
- 我是否正确理解这里发生了什么?
- 是否可以使用 spymemcached 进行配置以使其以预期的方式运行?
此外,任何其他想法都可以接受!谢谢!