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

Ted*_*eid 5 performance insert redis data-structures jedis

使用redis的,有一些命令来检索整个数据结构(LRANGE为列表,SMEMBERS对于套,ZRANGE为有序集合,和HGETALL为散列)。

仅散列具有使用单个命令插入多个项目的方法(HMSET)。

我所看到的所有示例都显示仅一次将一个项目添加到列表(通过RPUSHLPUSH)或一组(通过SADD / ZADD)。

我要解决的更具体的问题是创建包含数据库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
Run Code Online (Sandbox Code Playgroud)

我在想,使用带有MULTIEXEC事务可以将其转换为单个请求,但是对于重复的键却无济于事。

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
Run Code Online (Sandbox Code Playgroud)

是否缺少我可以在单个命令中将元素添加到列表/集中的元素,或者无需每次都重复键?

如果那很重要的话,我也使用jedis客户端库(或者如果可以从JVM使用另一个更好的库)。

Tom*_*son 4

设置交易在这里没有帮助。事务的目的是确保命令同时执行,这样服务器上就永远不会有一半的列表。他们仍然一次发送一个。

多个命令真的会导致性能问题吗?1000 个项目实际上并没有那么多,只要您不执行诸如为每个项目打开新连接之类的操作,就不应该出现任何延迟问题。