与此类似,但需要哈希解决方案而不是普通键: 如何使用Redis以原子方式删除与模式匹配的键
我有一堆哈希,前缀如下:"prefix:"
在每个散列下都有一堆键,如:"cc_XX",其中"XX"是2个字母的代码.
我需要一些循环遍历所有redis哈希值,并删除每个cc_XX子键的一些方法,并且我正在寻找一种cli/lua方法来做到这一点(两者都不是很好).
任何建议将不胜感激.
我正在计划将C#ASP.Net Web应用程序移动到Azure(当前托管在单个专用服务器上),并且正在查看缓存选项.目前,因为我们一次只运行一个应用程序实例,所以我们有一个"进程内"缓存来减轻SQL DB的某些相同请求.
当管理员/服务对数据库的这些部分进行更改时,此过程是清除缓存的某些部分,例如,我们有一个用户表,我们将拥有像"User.{0}"这样的键返回单个用户记录/对象和"Users.ForeignKey.{0}"返回与外键相关的所有用户.如果我们更新单个用户记录,那么我们删除"User.1"键(如果userid = 1)并且轻松删除所有列表集合,因为它们可能已经更改.我们通过按模式删除键来完成此操作,这意味着只删除受影响的键,并保留所有其他键.
我们一直计划将此迁移到Azure一段时间,当我们第一次开始查看Azure Redis缓存服务不可用的所有内容时,至少是受支持的,因此我们查看了基于AppFabric的Azure缓存服务.使用这个我们决定我们将使用DataCache区域来分隔不同的对象类型,然后只刷新受影响的区域,不像我们当前的方法那样精确但是没问题.现在,由于Redis已经到了现场,我们一直在关注它,如果可能的话,我更愿意使用它.但是,为了达到同样的目的,我们必须为每个'Region'/ section提供单独的Redis缓存,根据我的理解,这意味着我们将从Azure支付许多小型Redis缓存服务实例.考虑到我们需要10个以上可单独冲洗的部分到缓存,这将花费很多.
任何人都知道如何使用Redis实现与Azure DataCache区域类似的东西,或者你能否提出一些明显可能让我失踪的东西.
很抱歉这么长的问题/解释,但我发现很难解释我在没有背景/背景的情况下想要实现的目标.
谢谢,加雷斯
更新:
我已经发现了一些的bash命令,可以做到通过模式删除键,用'键的命令包括的工作在这里和LUA脚本EVAL命令在这里.
我打算使用StackExchange.Redis客户端进行交互,有没有人知道在使用StackExchange.Redis时如何使用这些类型的命令或替代方法(按模式删除键)?
感谢阅读,加雷斯
我已经在这个问题中尝试过方法,但是由于我在集群模式下工作,因此它不起作用,redis告诉我:
(错误)CROSSSLOT请求中的键未哈希到同一插槽
我想获得密钥匹配模式.
ex)测试:*
我考虑Keys命令.但它的时间复杂性太长了.
ex)键测试:*=>它出现在头顶上.
我的Redis版本是2.6.16
还有另外一种方法吗?