Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance 什么';在redis中创建中大型列表/集合/zset/哈希的最有效方法是什么?_Performance_Data Structures_Insert_Redis_Jedis - Fatal编程技术网

Performance 什么';在redis中创建中大型列表/集合/zset/哈希的最有效方法是什么?

Performance 什么';在redis中创建中大型列表/集合/zset/哈希的最有效方法是什么?,performance,data-structures,insert,redis,jedis,Performance,Data Structures,Insert,Redis,Jedis,使用,有许多命令可以检索整个数据结构(用于列表、集合、排序集合和散列) 只有hash有一个方法()可以用一个命令插入多个项 我看到的所有示例都显示了一次只向列表(通过或)或集合(通过/)添加一个项目 我想解决的更具体的问题是创建包含数据库ID的列表和排序集,这些列表对于每个用户都是唯一的,并且包含几百到几千个ID 它们通常从数据库查询中收集,在内存中稍加处理,然后存储在redis中,用于分页(列表)或执行基于集合的操作以检索子集(集合和排序集合) 目前,我正在遍历列表,并为每个元素调用适当的ad

使用,有许多命令可以检索整个数据结构(用于列表、集合、排序集合和散列)

只有hash有一个方法()可以用一个命令插入多个项

我看到的所有示例都显示了一次只向列表(通过或)或集合(通过/)添加一个项目

我想解决的更具体的问题是创建包含数据库ID的列表和排序集,这些列表对于每个用户都是唯一的,并且包含几百到几千个ID

它们通常从数据库查询中收集,在内存中稍加处理,然后存储在redis中,用于分页(列表)或执行基于集合的操作以检索子集(集合和排序集合)

目前,我正在遍历列表,并为每个元素调用适当的add方法。这样做的缺点是通过网络发出多个请求,并且每次都重复密钥

redis> RPUSH employee:ids 1000
(integer) 1
redis> RPUSH employee:ids 1001
(integer) 2
redis> RPUSH employee:ids 1002
(integer) 3
redis> RPUSH employee:ids 1003
(integer) 4
redis> del employee:ids
(integer) 1
我认为使用with and可以帮助将其转换为单个请求,但对于重复键则没有帮助

redis> MULTI
OK
redis> RPUSH employee:ids 1000
QUEUED
redis> RPUSH employee:ids 1001
QUEUED
redis> RPUSH employee:ids 1002
QUEUED
redis> RPUSH employee:ids 1003
QUEUED
redis> RPUSH employee:ids 1004
QUEUED
redis> EXEC
1. (integer) 1
2. (integer) 2
3. (integer) 3
4. (integer) 4
5. (integer) 5
我是否缺少一些可以在单个命令中向列表/集合添加元素的内容,或者不必每次重复该键


如果有必要的话,我也在使用jedis客户端库(或者如果我可以从JVM中使用另一个库,那就更好了)。

设置事务在这里没有帮助。事务的目的是确保命令同时执行,这样服务器上就不会有半个列表。他们还是一次只派一个


多个命令真的会导致性能问题吗?1000个项目实际上并不多,只要你不为每个项目打开新连接,就不会有任何延迟问题。

我承认我有点担心性能,但我没有对当前应用程序进行任何重要的负载测试。我有一部分只是想知道我是否做得“对”,或者当我手头有一个我想在redis中得到的列表/集合时,我是否遗漏了什么。如果迭代并一次添加一个是这样做的,我对此很满意。我可能会把补丁交给绝地武士来添加一些方法,这些方法将获取一个现有的列表/集合,并为我在列表中旋转。不,你不会遗漏任何东西。批量添加是我可以看到的东西,在将来被添加到redis中,但这并不是一个足够显著的改进来获得优先级-在本地套接字速度下,19字节不会有太大的区别。向客户添加支持是一个好主意。在发送下一个项目之前,您也可以不等待响应——它使得错误处理更加困难,但是如果您有延迟问题,应该给您一个与单个命令相同的性能。作为旁注,您可能会考虑排序集而不是分页列表——列表访问时间随偏移量线性增加,而排序集的访问时间始终与日志集的大小成正比。列表最适合用于堆栈和队列,您通常只在其两端进行访问。