【问题标题】:fetch all keys from redis which are having some string into it从redis中获取所有包含一些字符串的键
【发布时间】:2014-03-27 06:08:21
【问题描述】:

我将一些数据存储在redis 中,并带有以下给定键
我已经将一些密钥存储到 redis 中,例如

key1 = https://abc.net/v/140225014843/css/ key2 = https://abc.net/v/153729007613/css/ key3 = https://abc.net/v/240125414249/css/ key4 = https://abc.net/v/140225014843/css/:tokens key5 = https://abc.net/v/240125414249/css/:tokens

现在我有 data = 140225014843 我想获取密钥,它的价值是里面有数据。
示例:key1 里面有数据,所以我想从 redis 获取 key1。 我正在使用 django-redis。

编辑:
Key4 也有数据,但我只想获取那些模式类似于 key1 的键。

【问题讨论】:

  • 我使用了 red.keys("<i>140225014843</i>")。但是这里的输出即将到来 ['<a href="/default/index/tourl?u=aHR0cHM6Ly9hYmMubmV0L3YvMTQwMjI1MDE0ODQvY3NzLzp0b2tlbnM%3D" rel="nofollow" target="_blank">abc.net/v/14022501484/css/:tokens</a>', '@ 987654322@&gt; .... 我只想要 '<a href="/default/index/tourl?u=aHR0cHM6Ly9hYmMubmV0L3YvMTQwMjI1MDE0ODQvY3NzLzwvY29kZQ%3D%3D" rel="nofollow" target="_blank">abc.net/v/14022501484/css/&lt;/code</a>&gt; 的值
  • 如何命名你的key在redis中非常重要。在上述结构中,我认为 key 对您尝试执行的操作没有任何用处。您要做的是从模式匹配值中获取密钥,这会消除密钥的所有目的。 URL 中的这些数字是什么(例如 140225014843)?数据的大小是多少?你能改变数据结构吗?
  • 数据结构已经更好了。在一次操作中,我得到了数据的价值。像数据 = 140225014843 。数据与 redis 中的其他键映射。像 redis.hget('abc.net', data)... 在这里我可以获取数据的值,所以我想从数据中获取存储到 redis 中的版本化 url(key1)。
  • 完全正确!!!我的意思是。如果您的密钥应该是 140225014843 并且 SET 包含所有具有 140225014843 的 url,那会更好吗。这样做您将获得 O(1) 性能
  • 感谢您的建议。这是更好的方法

标签: redis django-redis


【解决方案1】:

您应该重新考虑命名密钥的方式,因为这是一个重要的决定。

您可以为您拥有的每个 data 值使用 List,该值是 key,该数据值的“路径”是列表。

例如,您可以这样做:

redis> RPUSH 140225014843 "css/"
redis> RPUSH 153729007613 "css/"
redis> RPUSH 240125414249 "css/"
redis> RPUSH 140225014843 "css/:tokens"
redis> RPUSH 240125414249 "css/:tokens"

根据数据中的可变部分,您可以调整此方法。例如,如果“css/”总是存在,那么你可以省略它。

此外,您可能不希望列表中有重复项,在这种情况下,您应该改用 Set

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-19
    • 2016-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-09
    • 1970-01-01
    相关资源
    最近更新 更多