使用 redis,有许多命令可以检索整个数据结构(列表为 LRANGE,集合为 SMEMBERS,有序集合为 ZRANGE,散列为 HGETALL). 只有散列有一个方法(HMSET)才能用一个命令插入多个项目. 我见过的所有例子都显
只有散列有一个方法(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
我认为使用带有MULTI和EXEC的transaction有助于将其转换为单个请求,但这对重复的密钥没有帮助.
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个项目实际上并不多,只要您没有为每个项目打开新连接,就不会出现任何延迟问题.