Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
计算redis键,而不在Ruby中获取它们_Ruby_Count_Redis - Fatal编程技术网

计算redis键,而不在Ruby中获取它们

计算redis键,而不在Ruby中获取它们,ruby,count,redis,Ruby,Count,Redis,我在Redis中保留了一个在线用户列表,其中一个键对应一个用户。按键设置为15分钟后超时,因此我要做的就是查看过去15分钟内大约有多少用户处于活动状态,我可以做: redisCli.keys('user:*').count 问题是,随着密钥数量的增加,在计数之前获取所有密钥所需的时间明显增加。有没有一种方法可以在不首先获取所有密钥的情况下对密钥进行计数?Redis没有一个API,用于仅对具有特定模式的密钥进行计数,因此它在ruby客户端中也不可用 我可以建议使用另一个数据结构来读取来自的用户数

我在Redis中保留了一个在线用户列表,其中一个键对应一个用户。按键设置为15分钟后超时,因此我要做的就是查看过去15分钟内大约有多少用户处于活动状态,我可以做:

redisCli.keys('user:*').count

问题是,随着密钥数量的增加,在计数之前获取所有密钥所需的时间明显增加。有没有一种方法可以在不首先获取所有密钥的情况下对密钥进行计数?

Redis没有一个API,用于仅对具有特定模式的密钥进行计数,因此它在ruby客户端中也不可用

我可以建议使用另一个数据结构来读取来自的用户数

例如,您可以使用redis,在redis中,您可以将每个用户的最后一个TTL的时间戳设置为
分数
,然后您可以调用
zcount
,以获取当前活动用户数:

redisCli.zcount('active_users', 15.minutes.ago.to_i, Time.now.to_i)
您不时需要通过以下方式清理旧值:

redisCli.zremrangebyscore 'active_users', 0, 15.minutes.ago.to_i 

Redis没有一个API只用于计算具有特定模式的键,因此它在ruby客户端中也不可用

我可以建议使用另一个数据结构来读取来自的用户数

例如,您可以使用redis,在redis中,您可以将每个用户的最后一个TTL的时间戳设置为
分数
,然后您可以调用
zcount
,以获取当前活动用户数:

redisCli.zcount('active_users', 15.minutes.ago.to_i, Time.now.to_i)
您不时需要通过以下方式清理旧值:

redisCli.zremrangebyscore 'active_users', 0, 15.minutes.ago.to_i 

Redis没有一个API只用于计算具有特定模式的键,因此它在ruby客户端中也不可用

我可以建议使用另一个数据结构来读取来自的用户数

例如,您可以使用redis,在redis中,您可以将每个用户的最后一个TTL的时间戳设置为
分数
,然后您可以调用
zcount
,以获取当前活动用户数:

redisCli.zcount('active_users', 15.minutes.ago.to_i, Time.now.to_i)
您不时需要通过以下方式清理旧值:

redisCli.zremrangebyscore 'active_users', 0, 15.minutes.ago.to_i 

Redis没有一个API只用于计算具有特定模式的键,因此它在ruby客户端中也不可用

我可以建议使用另一个数据结构来读取来自的用户数

例如,您可以使用redis,在redis中,您可以将每个用户的最后一个TTL的时间戳设置为
分数
,然后您可以调用
zcount
,以获取当前活动用户数:

redisCli.zcount('active_users', 15.minutes.ago.to_i, Time.now.to_i)
您不时需要通过以下方式清理旧值:

redisCli.zremrangebyscore 'active_users', 0, 15.minutes.ago.to_i 

有一种替代方法可以直接索引集合或排序集合中的键,即使用新的索引。它取决于用例、内存/速度权衡以及所需的计数精度


另一种方法是使用Redis Hyperlogs,请参见和。

有一种方法可以直接索引集合或排序集合中的键,即使用新的。它取决于用例、内存/速度权衡以及所需的计数精度


另一种方法是使用Redis Hyperlogs,请参见和。

有一种方法可以直接索引集合或排序集合中的键,即使用新的。它取决于用例、内存/速度权衡以及所需的计数精度


另一种方法是使用Redis Hyperlogs,请参见和。

有一种方法可以直接索引集合或排序集合中的键,即使用新的。它取决于用例、内存/速度权衡以及所需的计数精度


另一种选择是使用Redis Hyperlogs,请参见和。

Ruby中可能存在的不能使用
wc-l
的副本,因此这并不能回答我的问题
wc-l
与执行
.count
完全一样-最重要的一点是,Redis中没有只获取计数的API,因此,在ruby中也没有办法做到这一点,因为它只是包装了公共API。再看看这个帖子:我正在使用RedisCloud,所以我怀疑我能否说服他们修补redis。无论如何,谢谢你可以和我们谈论任何事情,但是@UriAgassi的Set/Sorted Set答案是这样的:)可能的重复在Ruby中不能使用
wc-l
,所以这并不能回答我的问题
wc-l
与执行
完全一样。count
-底线IMHO,就是在_redis_ `中没有只获取计数的API,所以在ruby中也没有这样做的方法,因为它只是包装了公共API。再看看这个帖子:我正在使用RedisCloud,所以我怀疑我能否说服他们修补redis。无论如何,谢谢你可以和我们谈论任何事情,但是@UriAgassi的Set/Sorted Set答案是这样的:)可能的重复在Ruby中不能使用
wc-l
,所以这并不能回答我的问题
wc-l
与执行
完全一样。count
-底线IMHO,就是在_redis_ `中没有只获取计数的API,所以在ruby中也没有这样做的方法,因为它只是包装了公共API。再看看这个帖子:我正在使用RedisCloud,所以我怀疑我能否说服他们修补redis。无论如何,谢谢你可以和我们谈论任何事情,但是@UriAgassi的Set/Sorted Set答案是这样的:)可能的重复在Ruby中不能使用
wc-l
,所以这并不能回答我的问题
wc-l
与执行
完全一样。count
-底线IMHO,就是在_redis_ `中没有只获取计数的API,所以在ruby中也没有这样做的方法,因为它只是包装了公共API。再看看这个帖子:我正在使用RedisCloud,所以我怀疑我能否说服他们修补redis。无论如何,谢谢你可以和我们谈论任何事情,除了@urigassi的Set/Sorted Set答案就是这样:)