redis - 在闲置一段时间后将相应状态视为 'off'时,如何取消Redis位集中的位?

我发现使用以下方法计算 Activity 连接数非常容易

redis_sip = redis.Redis(host="localhost", port=6379, db=0)
redis_sip.setbit(skey, 1, 1)
redis_sip.setbit(skey, 2, 1)
redis_sip.setbit(skey, 3, 0)
redis_sip.setbit(skey, 4, 1)
print(redis_sip.bitcount(skey)) # shows me 3 connections

但是,要使其正常工作,我需要能够为每个单独的位设置一个TTL。

即,当远程代理建立连接时,我可以将位设置为1。如果支持按位到期,那么在一段时间不 Activity 之后,该位将被翻转。

在Redis中完全可行吗?如果不是,什么是替代品?

最佳答案

不,你不能过期。

相反,您只能使密钥失效。因此,为了实现您的目标,当建立连接时,可以设置带有超时的密钥。如果要获取连接总数,请使用DBSIZE命令。

// agent 1 establishes a connection, set a timeout of 60s
SET 1 1 EX 60
// agent 2 establishes a connection, set a timeout of 60s
SET 2 2 EX 60
/// agent 1 closes the connection
DEL 1
// total connections
DBSIZE

另外,您应小心使用 SETBIT命令。如果具有较大ID(例如100000000)的代理建立连接,则在设置相应的位时,Redis需要分配大量内存,并且可能会阻塞一段时间。有关详细信息,请参见 doc