应用程序有一个包含用户表的 MySQL 数据库。每个用户都有自己的 Redis 哈希值。每个用户拥有的 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 哈希此时是否适合应用程序的数据类型?如果是,2) 处理具有多个答案的问题/答案对的最佳方法是什么?
最佳答案
您应该将它们视为 3 个对象 - 用户、问题和答案。那么,他们之间的关系就变得简单了。用户有问题,问题有答案。
现在,在 Redis 中对此进行建模很容易。
- 对象 User、Question 和 Answer 存储在哈希中
- 问题将包含 id、text、userid、date_asked、date_modified 等字段
- 答案将包含 id、text、userid、questionid 等字段
然后您需要存储问题的答案。使用键 question:$id:answers
创建 Redis 列表。这将是答案 ID 列表。
要根据关键字进行搜索,您应该为每个关键字创建一个 Redis 集。在此集合中,存储包含该单词的问题的 ID。
例如,sadd tag:java 123 232 4231
表示第123、232、4231题中有java。同样,为每个关键字添加这样一个集合。
然后,要过滤包含 java 和 redis 的问题,只需对 tag:java
和 tag:redis
进行集合交集即可。
关于hash - 使用 Redis 哈希来存储问题/答案对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10348585/