当相应状态在一段时间不活动后被视为“关闭”时,如何取消设置 Redis 位集中的某个位?

Ant*_*ong 3 redis

我发现使用以下方法很容易计算活动连接数

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
Run Code Online (Sandbox Code Playgroud)

但为了实现这一点,我需要能够为每个单独的位设置一个 TTL。

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

这在Redis中可行吗?如果不是,有什么替代方案?

for*_*ack 5

不,你不能过期一点。

相反,您只能使密钥过期。所以为了达到你的目的,当连接建立时,你可以设置一个带有超时的密钥。当你想获取总连接数时,使用该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
Run Code Online (Sandbox Code Playgroud)

另外,你应该小心SETBIT指挥。如果一个id较大的agent,比如100000000,建立连接,在设置相应位时,Redis需要分配大量内存,并且可能会阻塞一段时间。有关详细信息,请参阅文档。