redis - Redis中的过滤元素

标签 redis

我是 Redis 的新手,所以请原谅这个问题。

我正在尝试制作一个哈希列表。例如(在 JSON 中):

{
  userList: [ 
    { id: 1, name: 'Foo', ranking: 10 },
    { id: 2, name: 'Bar', ranking: 5 }
  ]
}

然后我想:

  • 检索排名低于 10 的所有哈希值(用户)。
  • 删除所有排名为0的哈希。

你如何在 Redis 中实现最后一个模式?可能吗?

如何过滤元素并删除其中的一些元素?

最佳答案

How do you implement the last schema in Redis? Is it possible?

Redis 无架构。我们将您需要的称为数据存储方法

一种可能的方法是使用 HSETHMSET通过 id 添加这些 JSON 对象,其中它们的 id 是,JSON 文本是。我们将此哈希称为 users:byid

这是问题的第一部分。现在您可以通过 id 获取对象。

现在的下一个问题是您想要在您称为排名 的范围内检索对象。为此,您需要使用 ZADD 将您的对象存储在有序集合中。已排序的集合按分数排序,并且项目与分数一起存储。这听起来非常适合您的用例!

实际上,您要将对象 ID 存储在整个排序集中:

zadd users:byranking 10 1 5 2

...其中 10 是分数(即您的实际排名值),1 是 id 等等。

那么,如何按排名过滤项目?使用 ZRANGEBYSCORE :

  • 通过排名在 0 到 10 之间,不包括 10。zrangebyscore users:byranking 0 (10
  • 通过排名在 0 到 10 之间,包括 10。zrangebyscore users:byranking 0 10

所谓的 ZRANGEBYSCORE 将为您提供检索到的用户的 ID。你如何获得他们的 JSON 文本?使用 HMGET :

 HMGET users:byid 1 2

...这将同时获得 id 12 的用户,如果 10 排名包含在内.

关于redis - Redis中的过滤元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33191034/

相关文章:

node.js - Kue 是否使用 Redis 订阅任何 (*) 模式?

python - Redis "ResponseError: unknown command ' 50 2'"

redis - 查询redis数据

Redis 出队率在网络上慢 10 倍

c# - Redis Server 失败,Socket 失败,超出输出缓冲区限制,我该如何增加限制?

java - 我可以在 redis 中多次放置整个列表值而不是 "RightPush"一个项目吗?

django - 如何调整 celery 设置,使 Redis 不使用太多内存? celery 任务 RESULT_EXPIRES?

redis - redis数据访问的key设计

ruby-on-rails - Rails 开发环境 Resque.enqueue 不创建作业

performance - 执行redis操作的Go代码中缺少毫秒