使用Redis Hashes存储问题/答案对

时间:2012-04-27 09:58:34

标签: hash redis

应用程序有一个包含用户表的MySQL数据库。每个用户都拥有自己的Redis Hash。每个用户拥有的Redis Hash包含问题/答案字符串的键/值对。例如(在Ruby中):

user = User.find(1)
question = "What colour is the sky?"
answer = "Blue"
user_hash = Redis::HashKey.new(user.id)
user_hash[question] = answer
user_hash[question] # returns answer

现在,用户需要能够为每个问题存储多个答案,例如:

question = "What colour is the sky?"
answers = ["Blue", "Grey", "Red"]

此外,该应用程序将对每个用户哈希范围内的问题/答案组执行方法,例如搜索包含特定单词的用户问题字符串。

1)此时Redis Hash是应用程序的相应数据类型,如果是,2)处理具有多个答案的问题/答案对的最佳方法是什么?

1 个答案:

答案 0 :(得分:2)

您应该将这些视为3个对象 - 用户,问题和答案。然后,它们之间的关系变得简单。用户有问题,问题有答案。

现在,在Redis中很容易对此进行建模。

  • 对象用户,问题和答案存储在哈希
  • 问题将包含id,text,userid,date_asked,date_modified等字段
  • 答案将包含id,text,userid,questionid等字段

然后您需要存储问题的答案。使用键question:$id:answers创建Redis列表。这将是答案ID的列表。

要根据关键字进行搜索,您应为每个关键字创建一个Redis集。在此Set中,存储包含此单词的问题的ID。

例如,sadd tag:java 123 232 4231表示问题123,232和4231中包含java。同样,为每个关键字添加这样的一组。

然后,要过滤包含java和redis的问题,只需在tag:javatag:redis上设置交集。