我对Redis相当新,我到目前为止都喜欢它。我有一个关于在Redis中实现图形的想法,查看它,当然,它已经完成了,但我有几个问题。
Twitter使用FlockDB和Redis (source)将他们的密钥和值与推文,粉丝等联系起来.Pinterest为每个用户(他们的粉丝,引脚等)使用Redis列表来加载请求的数据{{3}通过浏览列表并抓取所请求的密钥。我非常有兴趣以Pinterest的方式使用Redis。我找到了代码说明(source)。
这是我无法弄清楚的:
所有这些数据(跟随者列表,引脚列表等)都需要存储在可以保留数据的第二个数据库中。不需要经常保留Redis'列表数据和其他数据库的数据同步?有一个简单的方法吗?
对于像Pinterest这样的每个用户,不会使用Redis列表,与像FlockDB这样的解决方案相比,内存密集吗?
如果我误解了任何源信息,我道歉。如果有人对此概念有所了解,那将会很有帮助。提前谢谢。
PS:我的应用程序关系和提要是社交网络式的。与前面提到的Twitter / Pinterest完全不同。
更新:
我不确定这个问题是否会得到解答,但我会用我学到的信息对其进行更新。我已经配置了一个Cassandra集群写入表中的所有物理对象和Redis集群来存储高度流量的列表(数据关系),否则它们将成为SQL或CQL中的自己的连接表(许多关系表,如{ {1}})。这非常有效,因为 A。 Cassandra对二级索引不是很好,并且无法在单个查询中查找多个二级索引值,所以使用Redis设置,我基本上可以提供Cassandra要读取的所需主要ID的列表, B. Cassandra最好用作写作>阅读工具,因此Redis通过为Cassandra提供必要的主要ID来消除大量负担,几乎消除了针对单组信息的多个查询, C。(再次使用二级索引)考虑一下扫描整个表格的值与获取简单密钥及其设定值的性能。 D。(维护)这是可能的,我正在构建后台脚本,将近乎过期的低使用率Redis集串行化为Cassandra列(再次使用Redis获得它的强度:内存,以及Cassandra的强度:日志记录),然后在请求(过期后)后将这些序列化集合写回Redis。
我仍然想知道在Redis中缓存哪些信息以及在Cassandra中保留什么。我无法在Redis中保留所有数据关系(尽管我很喜欢),因为我的潜在社交图已经非常庞大。例如,我应该在Redis中保留最近读取/写入的对象以及具有这些对象ID的提要吗?这将占用大量内存,但它会降低Cassandra对较新对象的读取。或者我应该在Redis中保持主要关系(关注者,关注提要,阻止用户,喜欢帖子等)?我更喜欢第二条路线,但它意味着更多的查询Cassandra的实际物体,我想在不花费一百万美元在RAM中消除它。我应该选择在Redis中保留哪些对象/关系?我从代码示例中学到了很多,所以如果你碰巧找到类似的东西,我会很感激。如果您有任何想法,请告诉我您的想法!谢谢。
答案 0 :(得分:0)
所有这些数据(跟随者列表,引脚列表等)都需要存储 第二个可以保存数据的数据库。不会花很多钱 工作/维护以不断保持Redis的列表数据和其他 数据库的数据同步?有一个简单的方法吗?
Redis具有内置持久性,因此您不需要第二个DB来保存数据。 最简单的方法是使用Redis Persistence