春天许多缓存的缺点

nav*_*ave 5 spring caching redis

由于无法基于部分密钥逐出条目的限制,我正在考虑使用缓存名称作为我的部分密钥并驱逐缓存中的所有(只有一个)条目的解决方法.例如,假设有两个键值对,如下所示:

"123 @ name1" - > value1,"124 @ name2" - > value2

理想情况下,在驱逐时,我想删除包含字符串"123"的所有键.但是,由于不支持,我正在考虑的解决方法是具有以下内容:

"123"缓存:"name1" - > value1

"124"缓存:"name2" - > value2

然后在驱逐时,我只需指定删除"123"缓存中的所有键

当然,这样做的缺点是会有很多不同的缓存.对此有任何性能损失吗?

从阅读本文来看,似乎Redis至少只使用缓存名称作为前缀.因此,它不会在其下创建多个单独的缓存.但我想验证一下我的理解.

如果有帮助,我也希望使用Redis作为我的底层缓存提供程序.

Dhr*_*hak 1

您可以使用几种方法来克服这个问题:

  1. 使用分组数据结构,如集合、排序集合和哈希:它们中的每一个都支持非常大量的成员元素。因此您可以使用它们来存储缓存项,并进行相关查找。但是,与直接键值查找相比,请务必检查此类查找的性能差异(非常小)。一旦您想要驱逐一组类型相似的缓存键,您只需从 Redis 中删除该数据结构键即可。

  2. 使用 Redis 数据库编号:您需要编辑 redis.conf 以增加可能的 Redis 数据库编号的最大数量。Redis 数据库只是提供键值可以位于其中的命名空间的数字。要将相似的项目分组,您可以将它们放入相同的数据库编号中,并在需要刷新该组键时使用单个命令清空数据库。这里需要注意的是,虽然您可以使用相同的 redis 连接,但您必须通过 redis SELECT命令切换数据库