Redis适用于需要以很高的频率访问和更新数据并且可以从数据结构(哈希,集,列表,字符串或排序集)的使用中受益的用例。它可以满足非常具体的用例。如果您有一个非常灵活的搜索之类的通用用例,那么为此目的而构建的某种东西(例如elasticsearch或SOLR)会更好地为您服务。
就是说,如果您必须在Redis中执行此 *** 作,这就是我的 *** 作方式(假设用户可以共享姓名和电话号码):
name:some_name -> set([id1, id2, etc...])name:some_other_name -> set([id3, id4, etc...])phone:some_phone -> set([id1, id3, etc...])phone:some_other_phone -> set([id2, id4, etc...])id1 -> {'name' : 'bob', 'phone' : '123-456-7891', etc...}id2 -> {'name' : 'alice', 'phone' : '987-456-7891', etc...}
在这种情况下,我们将为每个名称(以“ name:”为前缀)和每个电话号码(以“
phone:”为前缀)创建一个新密钥。每个键都指向一组ID,这些ID具有用户想要的所有信息。例如,在搜索电话时,您将执行以下 *** 作:
HGETALL 'phone:123-456-7891'
然后遍历结果,并以您选择的语言返回每个信息(在本示例中为名称)的任何信息(您可以在Redis框上的服务器端Lua中完成整个 *** 作,以更快地进行 *** 作并避免网络往返第四,如果您愿意):
for id in results: HGET id 'name'
您需要付出的代价是,拥有给定电话号码的用户数量在
O(m)哪里
m,由于对速度的优化,这将是对Redis的非常快速的 *** 作。在您的情况下,这可能会适得其反,因为您可能不需要这么快的时间,并且您希望进行灵活的搜索,但这就是您要这样做的方式。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)