Ted*_*eid 5 performance insert redis data-structures jedis
使用redis的,有一些命令来检索整个数据结构(LRANGE为列表,SMEMBERS对于套,ZRANGE为有序集合,和HGETALL为散列)。
仅散列具有使用单个命令插入多个项目的方法(HMSET)。
我所看到的所有示例都显示仅一次将一个项目添加到列表(通过RPUSH或LPUSH)或一组(通过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)
我在想,使用带有MULTI和EXEC的事务可以将其转换为单个请求,但是对于重复的键却无济于事。
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使用另一个更好的库)。
设置交易在这里没有帮助。事务的目的是确保命令同时执行,这样服务器上就永远不会有一半的列表。他们仍然一次发送一个。
多个命令真的会导致性能问题吗?1000 个项目实际上并没有那么多,只要您不执行诸如为每个项目打开新连接之类的操作,就不应该出现任何延迟问题。
| 归档时间: |
|
| 查看次数: |
1518 次 |
| 最近记录: |