对于许多java服务,我们使用AWS ElastiCache作为Spring Cache抽象和spymemcached集成的分布式缓存。
在一个服务中,我看到的行为是我得到的结果与我预期的不同,导致ClassCastException。确切地说:我有一个缓存键,因此我期望一个List,但我得到的是Type2的结果。
我们已经定义了许多缓存,其中一些使用相同的缓存密钥:
Cache1:
cacheKey -> List<Type1>
Cache2:
cacheKey -> Type2
由于它们位于不同的缓存中,因此当我们使用基于哈希的简单缓存时,这是有效的。有了ElastiCache / Memcached,但似乎我们并没有真正有不同的缓存(从我所知的memcached中可以理解 - 这并不多)。
我原本期望spymemcached通过操作缓存键来处理这个问题,因此应用程序不需要知道实际的缓存实现(这可以通过操作缓存键并为它们添加缓存名称来实现)。 / p>
从几个调试会话和我看到的错误,情况似乎并非如此。
我特意看了这堂课:
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()方法以缓存名称为前缀。
所以我的问题是:
此外,还有任何其他想法!谢谢!