1

如何根据传递的密钥从 redis 缓存中获取对象列表?

我正在探索 cachemanager.net 的 redis 缓存。我已经浏览了这些例子。但是我找不到任何与根据传递的键获取对象列表相关的示例。

var lst =cache.Get("Key_1");

它只返回一个对象。

但我想要这样。我已经在缓存中存储了 1000 个对象,其键名如Key_1, Key_2, Key_3..... 如果我作为 KeyKey_1000传递,我想获得 1000 个对象的列表。Key_*

4

2 回答 2

1

CacheManager 不提供任何功能来搜索键或通过通配符获取许多键。这根本不是缓存的工作方式。

正如 Karthikeyan 指出的那样,在 Redis 中您可以使用keys运算符,但这不是一个好的解决方案,只能用于手动调试。其他缓存系统甚至没有这样的功能,因此 CacheManager 也无法提供该功能。希望这是有道理的;)

使用 CacheManager,您可以将所有对象存储在一个缓存键中并缓存列表。如果你使用 redis,那可能会有一些限制,因为序列化可能会成为一个问题。

或者,您分别存储每个对象并在循环中检索它们。redis 客户端会优化某些东西,另外,在 CacheManager 中,如果你有 2 层缓存,随着时间的推移性能会变得更好。

于 2016-06-16T06:51:51.683 回答
0

您可以改用 redis 哈希。您可以使用 hgetall 命令检索该哈希中的所有值。

http://redis.io/commands#hash

或者如果你想使用一个普通的键值对你必须编写一个 lua 脚本来实现它。

local keys = redis.call('keys','key_*')
return redis.call('mget',keys)

Keys 在生产中是不可取的,因为它是阻塞的。

您可以使用扫描命令而不是键来获取与该模式匹配的所有键,然后按照相同的过程来实现相同的目的。

于 2016-06-15T08:09:38.790 回答