【问题标题】:Using Redis to store array of hashes使用 Redis 存储哈希数组
【发布时间】:2015-08-14 00:51:58
【问题描述】:

我刚刚开始研究 Redis,希望能够存储一个哈希数组,我可以在其中弹出一个随机键/值,然后在需要时将其放回。

所以在 Ruby 中我会有这样的东西

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

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

@user = users.shuffle!.pop

然后把它放回数组中

users.push(@user)

使用 Redis 的想法是我有两个进程(基于 Ruby 的应用程序)需要同时共享一个用户池。一旦一个用户完成了一个进程,我希望它把它放回池中。

谁能指出我正确的方向

谢谢

【问题讨论】:

  • 如果我理解正确的话,您需要从 Redis 中随机拉出一个 Key/Value 对,并阻止它,即在进程 1 完成之前没有其他进程可以使用它?

标签: arrays ruby redis hash


【解决方案1】:

您可以Redis Hash 存储用户信息,Redis Set 将所有这些哈希值存储在一起。

步骤:

  1. 使用 HSET 命令制作 redis 哈希: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 how to store associative array

参考资料:

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

【讨论】:

  • 感谢您的回答,在我完成随机用户后,我可以再次设置哈希并将其添加回用户吗?一旦用户完成了设置,这个想法就会重新填充.. 我想我明白了,这些参考资料会有所帮助
  • 无需重新设置哈希。如果您不编辑用户信息。由于您的所有进程都将访问集合中的用户,因此只需弹出并添加到集合中就足够了:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-01
  • 1970-01-01
  • 2012-05-08
  • 2015-05-26
  • 2012-07-02
相关资源
最近更新 更多