一个应用程序有一个MySQL数据库,其中包含一个Users表,每个User有自己的Redis Hash。每个用户都有自己的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"]
同时,应用程序将对通过每个User Hash范围内的问题答案组执行方法,例如搜索包含某些单词的User问题字符串。
1)此时Redis Hash是否是适合应用程序的数据类型,如果是,2)处理具有多个答案的问题答案对的最佳方法是什么?
你应该把这些看作是3个对象--用户、问题和答案。然后,它们之间的关系就变得简单了。用户有问题,问题有答案。
现在,在Redis中很容易建模。
然后你需要为一个问题存储答案。创建一个带有键的Redis列表 question:$id:answers
. 这将是一个答案id的列表。
要根据关键字进行搜索,你应该为每个关键字创建一个Redis集。在这个Set中,存储包含这个词的问题的id。
例如 sadd tag:java 123 232 4231
表示123、232和4231题中有java。同理,为每个关键词添加这样一个集合。
然后,如果要过滤包含java和redis的问题,只需在 tag:java
和 tag:redis
.