春季许多缓存的缺点

时间:2018-06-20 06:51:56

标签: spring caching redis

由于limitation无法根据部分键逐出条目,我考虑了一种解决方法,将缓存名称用作我的部分键并逐出其中的所有(只有一个)条目缓存。例如,假设有2个键/值对,如下所示:

“ 123 @ name1”-> value1, “ 124 @ name2”-> value2

理想情况下,在逐出时,我想删除所有包含字符串“ 123”的键。但是,由于不支持此操作,因此我正在考虑的解决方法是:

“ 123”缓存:“名称1”->值1

“ 124”缓存:“ name2”-> value2

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

当然,这样做的缺点是会有许多不同的缓存。是否有任何性能损失?

通过阅读this,看来Redis至少仅使用缓存名称作为前缀。因此,它不会在其下面创建多个单独的缓存。但我想证明我的理解。

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

1 个答案:

答案 0 :(得分:1)

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

  1. 使用诸如集合,排序集合和散列之类的data structures分组:它们每个都支持大量的成员元素。因此,您可以使用它们来存储缓存项,并进行相关查找。但是,与直接键值查找相比,在这种查找上确实要经历性能差异(会很小)。 一旦您要退出一组相似类型的缓存键,只需从redis中删除该数据结构键即可。

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