Redis - 存储并获取有限的密钥和详细信息

时间:2015-09-01 04:25:30

标签: java redis

每个类别都有大量的对象。

我想把所有这些对象都用键作为类别 然后我想从这个键中获取前4个对象的详细信息,然后像在分页中一样获取接下来的4个。

为此,我尝试使用hkeys

存储所有具有类别的对象ID

将所有obejctids放入hset:

 hset mycategory objectdid1 "objectdid1"
 hset mycategory objectdid2 "objectdid2"
 hset mycategory objectdid3 "objectdid3"

将所有客观细节放在hmset中:

hmset objectdid1 title "george"
hmset objectdid2 title "george1"
hmset objectdid3 title "george2"

获取hkeys:

hkeys mycategory 

我想要获得前2个键然后接下来2个想要运行分页。还有其他任何方式我可以实现这一切。谢谢!

2 个答案:

答案 0 :(得分:2)

我相信你需要使用redis的scan功能

对于您的哈希集,您需要专门使用HSCAN

只要确保count只控制行为,你也可以在调用扫描时得到0个键,因此只考虑返回光标时的扫描迭代重置

有关详细信息,请查看我附加的扫描文档链接。

示例代码

ScanParams params = new ScanParams();
params.count(2);

for (int i = 0; i < 10; i++) {
  jedis.hset("foo", "a" + i, "a" + i);
}

ScanResult<Map.Entry<String, String>> result = jedis.hscan("foo", SCAN_POINTER_START, params);

assertFalse(result.getResult().isEmpty());

取自Jedis Tests

答案 1 :(得分:0)

您需要将序列化对象存储在哈希中,并在排序集或列表中添加这些对象标识符,然后分别使用zrangelrange获取分页标识符,然后将它们传递给{ {1}}命令。

例如:

hmget

然后,为了从0到10个第一个对象获取页面:

zadd ordered 1 1, 2 2
hmset objects 1 "{ 'id': 1 }", 2 "{ 'id': 2 }"

一旦你已经获得有序的对象标识符:

zrange ordered 0 10