如何根据传递的密钥从redis缓存中获取对象列表?
我正在探索cachemanager.net以获取redis缓存。我已经完成了这些例子。但我找不到任何与基于传递的密钥获取对象列表相关的示例。
var lst =cache.Get("Key_1");
它只返回一个对象。
但我希望这样。我在缓存中存储了1000个对象,其密钥名称为Key_1
,Key_2
,Key_3
..... Key_1000
。如果我将Key_*
作为密钥传递,我想获得1000个对象的列表。
答案 0 :(得分:0)
您可以使用redis哈希代替。您可以使用hgetall命令检索该哈希值中的所有值。
或者如果你想使用普通键值对,你必须编写一个lua脚本来实现它。
local keys = redis.call('keys','key_*')
return redis.call('mget',keys)
生产中不建议使用密钥,因为它是阻塞的。
您可以使用scan命令而不是键来获取与该模式匹配的所有键,然后按照相同的步骤来实现相同的目标。
答案 1 :(得分:0)
CacheManager不提供搜索键的任何功能或通过通配符获取许多键。这根本不是缓存如何工作。
正如Karthikeyan所指出的,在Redis中你可以使用keys
运算符,但这不是一个好的解决方案,只能用于手动调试。其他缓存系统甚至没有类似的东西,因此CacheManager也无法提供该功能。希望有意义;)
使用CacheManager,您可以将所有对象存储在一个缓存键中并缓存列表。如果您使用redis,那可能会有一些限制,因为序列化可能会成为一个问题。
或者,您可以单独存储每个对象并在循环中检索它们。 redis客户端也会在CacheManager中优化某些内容,如果你有2层缓存,性能会随着时间的推移而变得更好。