gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 05:58:19 26 4
gpt4 key购买 nike

使用 redis ,有许多命令可以检索整个数据结构(LRANGE 用于列表,SMEMBERS 用于集合,ZRANGE 用于排序集合,HGETALL 用于散列)。

只有哈希有一个方法(HMSET)用一个命令插入多个项目。

我见过的所有示例都显示一次只向列表(通过 RPUSHLPUSH )或集合(通过 SADD/ZADD )添加一个项目。

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

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

目前,我正在遍历列表并为每个元素调用适当的添加方法。这具有通过线路发出多个请求并每次都重复 key 的缺点。

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

我认为使用 transactionMULTIEXEC可以帮助把它变成一个单一的请求,但这对重复的键没有帮助。

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 个项目实际上并没有那么多,只要您没有为每个项目打开新连接之类的操作,就不会有任何延迟问题。

关于performance - 在 Redis 中创建中型到大型列表/集合/zset/哈希的最有效方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4665759/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com