2

应用程序有一个 MySQL 数据库,其中包含一个用户表。每个用户都有自己的 Redis Hash。每个用户拥有的 Redis 哈希都包含问题/答案字符串的键/值对。例如(在 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)处理具有多个答案的问题/答案对的最佳方法是什么?

4

1 回答 1

2

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

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

  • 对象用户、问题和答案存储在散列中
  • 问题将包含 id、text、userid、date_asked、date_modified 等字段
  • 答案将包含 id、text、userid、questionid 等字段

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

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

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

然后,要过滤包含 java 和 redis 的问题,只需在tag:java和上做一个集合交集tag:redis

于 2012-04-27T10:34:48.817 回答