我需要为我的项目提供有关Redis数据类型的建议。该项目是一个torrent跟踪器(ruby
,简单sinatra-based
),具有纯内存数据存储,用于存储有关对等体的当前信息。我觉得这就是Redis的制作方式。但我坚持为此选择合适的数据类型。现在我倾向于以下设置:
将list
用于播种机。实际上我最好需要一个环形缓冲区来获得连续的播种机范围(具有给定的大小和起始位置),并在下次保存新的起始位置。
将sorted set
用于leechers。每个leecher的得分为downloaded/(downloaded+left)
,因此我也可以为任何特定情况提取范围。
set和list中的所有字符串值都是对等数据的字符串(bencoded)表示。
我在上面的设置中实际缺少的是:
为播种机存储偏移量的必要性,因此数据访问需要同步。
在列表中查找特定播种机的未知方法。在这里,我可以从set
中受益,但之后我将无法一次性提取一系列项目。
(一般问题)需要设置/列表成员的TTL(如果客户端在此之前关闭但未发送任何数据)。可能的选择是使每个peer
成为普通的字符串键/值(字符串或散列),给它TTL,在销毁时订阅并在相应的列表或集合中删除它。
你有什么建议?有什么实际建议吗?