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 中是否可行?如果不是,什么是替代品?
解决方案
不,你不能过期。
相反,您只能使密钥过期。所以为了达到你的目的,当连接建立时,你可以设置一个带超时的键。当您想获取连接总数时,请使用该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 需要分配大量的内存,并且可能会阻塞一段时间。有关详细信息,请参阅文档。
推荐阅读
- ruby-on-rails - Rails 5:如何处理 simple_form 中的序列化字符串数组?
- reactjs - 未找到商店 - Redux RevTools
- autodesk-forge - PushPine ObjectID 与 ForgeViewer 中选定的 ObjectID 不同
- ffmpeg - 选择生成波形图像时要使用的音轨
- java - 具有邻接矩阵的未加权图上的最长路径
- tensorflow - 具有 NNAPI 委托的 tensorflow lite 的多个实例
- python - opencv显示带视频的图像,没有图像背景
- java - 在 jOOQ 中的枚举上按 CASE 排序 - 没有显式类型比较器
- dialogflow-es - 如何将 Dialogflow 分析器发送到电子邮件
- swift - 在 Swift 中获取时区缩写