【发布时间】:2018-11-29 05:14:15
【问题描述】:
由于limitation 无法基于部分键逐出条目,我正在考虑使用缓存名称作为我的部分键并逐出缓存中的所有(只有一个)条目的解决方法.例如,假设有 2 个键值对,如下所示:
"123@name1" -> 值1, "124@name2" -> 值2
理想情况下,在驱逐时,我想删除所有包含字符串“123”的键。但是,由于这不受支持,我正在考虑的解决方法是:
“123”缓存:“name1”-> value1
“124”缓存:“name2”-> value2
然后在驱逐时,我会简单地指定删除“123”缓存中的所有键
当然,这样做的缺点是会有很多不同的缓存。这有任何性能损失吗?
通过阅读this,Redis 似乎至少只使用缓存名称作为前缀。所以它不会在它下面创建多个单独的缓存。但我想验证一下我的理解。
如果有帮助,我也希望使用 Redis 作为我的底层缓存提供程序。
【问题讨论】:
-
Redis 方面没有惩罚。从 Spring(通过您提供的链接,我假设您正在谈论它)方面我不知道。
-
@Imaskar 您能否详细说明为什么 Redis 方面没有处罚?是不是如上所示缓存名只是前缀?
-
我的意思是缓存的值将只是 Redis 中的键,而 Redis 中的键检索是恒定的时间。 spring-data-redis 使用了多少技术密钥我不知道,现在无法检查。太忙了,抱歉。
-
看看
redisTemplate.opsForHash().put(cache_name, cache_key, data)。这就是@DhruvPathak 答案的 p1 所暗示的。