使用Redis哈希值来存储问题答案对。

问题描述 投票:2回答:1

一个应用程序有一个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)处理具有多个答案的问题答案对的最佳方法是什么?

hash redis
1个回答
2
投票

你应该把这些看作是3个对象--用户、问题和答案。然后,它们之间的关系就变得简单了。用户有问题,问题有答案。

现在,在Redis中很容易建模。

  • 对象User、Question和Answer被存储在一个哈希中
  • 问题会有id、text、userid、date_asked、date_modified等字段。
  • 答案会有id、text、userid、questionid等字段。

然后你需要为一个问题存储答案。创建一个带有键的Redis列表 question:$id:answers. 这将是一个答案id的列表。

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

例如 sadd tag:java 123 232 4231 表示123、232和4231题中有java。同理,为每个关键词添加这样一个集合。

然后,如果要过滤包含java和redis的问题,只需在 tag:javatag:redis.

© www.soinside.com 2019 - 2024. All rights reserved.