我是 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 无架构。我们将您需要的称为数据存储方法。
一种可能的方法是使用 HSET
或 HMSET
通过 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 1
和 2
的用户,如果 10
排名包含在内.
关于redis - Redis中的过滤元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33191034/