应用程序有一个包含用户表的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)处理具有多个答案的问题/答案对的最佳方法是什么?
答案 0 :(得分:2)
您应该将这些视为3个对象 - 用户,问题和答案。然后,它们之间的关系变得简单。用户有问题,问题有答案。
现在,在Redis中很容易对此进行建模。
然后您需要存储问题的答案。使用键question:$id:answers
创建Redis列表。这将是答案ID的列表。
要根据关键字进行搜索,您应为每个关键字创建一个Redis集。在此Set中,存储包含此单词的问题的ID。
例如,sadd tag:java 123 232 4231
表示问题123,232和4231中包含java。同样,为每个关键字添加这样的一组。
然后,要过滤包含java和redis的问题,只需在tag:java
和tag:redis
上设置交集。