Redis在概念上与我使用的传统SQL数据库不同,我试图弄清楚它是否适合我的项目......我一直在环顾四周,但似乎无法找到我的问题的答案.
我有一组我需要存储的用户,每个用户都有一个唯一的ID和几个与之关联的值(例如他们的名字).看起来我可以简单地将它们存储为哈希:
user:fef982dcfe1a7bcba4849b4c281bba95
"username" "andrewm" "name" "Andrew"
Run Code Online (Sandbox Code Playgroud)
我还有一堆我要存储的邮件,每个邮件都有一些属性,例如发件人和收件人:
message:1a7bcba4849b4c281bfef98a952dcfeb
"sender" "fef982dcfe1a7bcba4849b4c281bba95" "recipient" "82dcfe1a7bcba4849b4c281bba95fef9" "message" "Hi!"
Run Code Online (Sandbox Code Playgroud)
我的问题是,我将如何检索由特定用户发送的所有消息(由其散列指定).我应该使用传统的关系数据库,还是像MongoDB这样的NoSQL数据库(我之前使用过)?如果是这样,有没有人对高性能商店有任何建议?我不会做任何真正的搜索(即MySQL LIKE
查询) - 只是键值查找,真的.
Did*_*zia 10
使用Redis对这些数据进行建模当然是可能的,但您需要考虑数据结构和访问路径.使用Redis时,不会隐式管理访问路径(与RDBMS/MongoDB中的索引一样).
对于提供的示例,您可以:
user:<user hash> -> hash of user properties
user:<user hash>:sent -> set of <msg hash>
user:<user hash>:received -> set of <msg hash>
message:<msg hash> -> hash of message properties
Run Code Online (Sandbox Code Playgroud)
添加/删除消息意味着在添加/删除消息对象本身之上保持对应于发件人和收件人的*:sent和*:received集.
检索给定用户的已发送或已接收消息只是一个SMEMBERS命令,如果要同时检索消息的属性,则为SORT:
# Get a list of message hash codes only in one roundtrip
smembers user:<user hash>:received
# Get a list of message contents in one roundtrip
sort user:<user hash>:received by nosort get message:*->sender get message:*->message
Run Code Online (Sandbox Code Playgroud)
有关使用排序的基本原理,请参阅:
注1:使用Redis最好使用整数作为键而不是UUID或哈希码(特别是在集合中),因为它们以更有效的方式存储.
注意2:如果您需要订购消息,则必须使用列表而不是集合.结果是只能删除最旧的消息,并且只能以有效的方式添加新设置的消息.您可能还要为所有消息添加全局列表.
归档时间: |
|
查看次数: |
13866 次 |
最近记录: |