使用Redis存储哈希数组

6

我刚开始接触Redis,想要存储一个哈希数组,在需要时可以随机弹出一个key/value对,之后再放回去。

在Ruby中,我会这样写:

users = [{ username: "user1", password: "password"}, { username: "user2", password: 'password'}]

如果我想从数组中获取一个随机的键/值对象,我会像这样做:

@user = users.shuffle!.pop

然后将其放回到数组中。
users.push(@user)

使用Redis的想法是我有两个进程(基于Ruby的应用程序)需要同时共享一组用户。 一旦一个进程完成了对一个用户的操作,我希望它将其放回池中。
请问有人可以给我指点方向吗?
谢谢。

如果我理解正确,您需要随机从Redis中提取一个键值对并进行阻塞,即在进程1完成之前,其他进程无法使用它? - Mangat Rai Modi
1个回答

13
您可以使用 Redis Hash 存储用户信息,使用 Redis Set 将所有这些哈希值存储在一起。
步骤:
  1. 使用HSET命令创建Redis Hash: HMSET userId_653 username "Tom" password "gd36e3hd38d3jdj3yd3hd38"
  2. 将此哈希添加到名为users的集合中:SADD users userId_653。该集合包含所有用户。
  3. 从集合中获取一个随机用户密钥:SRANDMEMBER users。它将返回userId_653
  4. 使用HGET userId_653 username从哈希中获取相应的值
  5. 如果需要弹出密钥,则只需在第3步后执行SPOP users,并在第4步处理后再次执行SADD
更好地理解类似的问题:如何在Redis中存储关联数组 参考资料:

PS: 我没有 Ruby 的经验。寻找适合的 Redis Ruby API,以支持所有这些操作!


1
谢谢您的回答,我完成随机用户后,只需重新“SET”哈希并将其添加回用户中即可吗? 这个想法是一旦完成用户操作,集合就会被重新填充。 我想我明白了,这些参考资料会有所帮助。 - Richlewis
不需要重新设置哈希。如果您没有编辑用户信息。由于所有进程都将从集合中访问用户,因此仅弹出和添加集合即可 :) - Mangat Rai Modi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接