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

9 浏览
0 Comments

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

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

user = User.find(1)
question = "天空是什么颜色?"
answer = "蓝色"
user_hash = Redis::HashKey.new(user.id)
user_hash[question] = answer
user_hash[question] # 返回答案

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

question = "天空是什么颜色?"
answers = ["蓝色", "灰色", "红色"]

此外,应用程序将在每个用户Hash的范围内执行一些方法,例如搜索包含特定单词的用户问题字符串。

1)在此阶段,Redis Hash是否是适当的数据类型?如果是,2)处理具有多个答案的问题/答案对的最佳方法是什么?

0
0 Comments

使用Redis Hashes存储问题/答案对的原因是为了简化User、Question和Answer之间的关系。用户拥有问题,问题拥有答案。在Redis中建模这种关系是很容易的。

具体的解决方法是:

1. 将User、Question和Answer对象存储在一个Hash中。

2. Question会有一些字段,比如id、text、userid、date_asked、date_modified等。

3. Answer会有一些字段,比如id、text、userid、questionid等。

4. 为每个问题创建一个Redis列表,键为question:$id:answers,其中存储答案的id。

5. 为每个关键词创建一个Redis集合。在这个集合中,存储包含该关键词的问题的id。

例如,sadd tag:java 123 232 4231表示问题123、232和4231都包含关键词java。类似地,为每个关键词添加一个集合。

6. 然后,要筛选包含java和redis的问题,只需对tag:javatag:redis进行集合交集操作。

至于User、Question和Answer对象是否应该具有自己的Hash,文章中并没有明确提到,因此无法确定。

0