繁体   English   中英

在redis中创建中到大型列表/ set / zset / hash的最有效方法是什么?

[英]What's the most efficient way to create a medium to large list/set/zset/hash in redis?

使用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

我认为使用具有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

是否有一些我缺少的东西可以让我在单个命令中添加元素到列表/集合,或者每次都不重复键?

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM