redis - 当相应的状态在一段时间不活动后被认为是 'off' 时,如何取消设置 redis 位集中的位?

标签 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

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

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

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

最佳答案

不,你不能过期。

相反,您只能使 key 过期。所以为了达到你的目的,当连接建立时,你可以设置一个带超时的键。当你想获取连接总数时,使用 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详情。

关于redis - 当相应的状态在一段时间不活动后被认为是 'off' 时,如何取消设置 redis 位集中的位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59977844/

相关文章:

具有可靠性的 Redis Pub/Sub

spring - 如何从数据库加载数据到redis缓存?

redis - 仅当 key 存在时如何重新分配hset

redis - 多个 Redis 数据库有什么意义?

redis - Heroku 崩溃(似乎是 Sidekiq/Redis )

python - 带有 Redis 代理的 celery : Is it possible to have more 10k connection

redis - 比较 1000 万套彼此

java - 转换为父对象会更改对象引用?

node.js - 如何为redis请求设置 Node 超时

amazon-web-services - 从 ElasticBeanstalk EC2 到 Redis (ElastiCache) 的连接失败