使用Redis时哪种方法更好?

时间:2018-01-15 15:52:49

标签: redis

我面临以下问题:

我不想跟踪给用户的任务,我想将此状态存储在Redis中。

我能做到:

1)创建名为" dispatched_tasks"持有许多对象(用户名,任务)

2)创建名为dispatched_tasks的许多(潜在的数千个)列表:通常包含少量对象的用户名(任务)

哪种方法更好?如果我只想到我的安慰,我会选择第二个,因为有时候我将不得不搜索特定的用户任务,而第二种方法是免费的。

但Redis怎么样?哪种方法会更高效?

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

Redis支持不同类型的数据结构,如here所示。您可以采取不同的方法:

情景1:

使用列表数据类型,您的列表将包含您的问题的所有任务/用户组合。但是,访问和删除任务以O(n)时间复杂度运行(它必须遍历列表才能到达元素)。如果您的用户有很多任务,这会对性能产生影响。

使用套装: 与列表类似,但您可以在O(1)中添加/删除/检查是否存在,并且集合元素是唯一的。因此,如果您添加另一个已存在的用户名/任务,则无法添加它。

情景2:

数据类型不会更改。唯一的区别是redis中会有更多的密钥,这会增加内存占用量。

来自FAQ

  

单个Redis实例可容纳的最大密钥数是多少?哈希,列表,集,排序中的最大元素数   设定吗

     

Redis最多可以处理232个密钥,并且在实践中经过测试可以处理   每个实例至少有2.5亿个密钥。

     

每个哈希,列表,集合和有序集合可以容纳232个元素。

     

换句话说,你的限制很可能是你的可用内存   系统

     

Redis的内存占用情况是什么?

     

为您提供一些示例(全部使用64位实例获得):

     

空实例使用~3MB内存.1百万个小键 - >   字符串值对使用~85MB的内存.1百万个密钥 - >哈希   value,表示具有5个字段的对象,使用~160 MB的   记忆。

测试你的用例是微不足道的   redis-benchmark实用程序生成随机数据集并检查   INFO memory命令使用的空间。