gpt4 book ai didi

redis - redis slave 上 info 命令列出的过期键数与我看到的不一致

转载 作者:IT王子 更新时间:2023-10-29 06:09:36 24 4
gpt4 key购买 nike

当我在 redis-cli 中针对 redis 3.2.4 服务器运行 info 命令时,它会显示过期时间:

expires=223518

但是,当我随后运行 keys * 命令并为每个键请求 ttl 并且只打印出 ttl > 0 的键时,我只看到几百。

我认为 expires 是对过期 key 数量的计数,但我什至不在这个数字的数量级内。

有人能准确说明 expires 的意思吗?这是否包括即将过期和之前已过期但尚未被驱逐的 key ?


更新:

这是我计算过期 key 数量的方法:

  task count_tmp_keys: :environment do
redis = Redis.new(timeout: 100)
keys = redis.keys '*'
ct_expiring = 0

keys.each do |k|
ttl = redis.ttl(k)
if ttl > 0
ct_expiring += 1
puts "Expiring: #{k}; ttl is #{ttl}; total: #{ct_expiring}"
STDOUT.flush
end
end

puts "Total expiring: #{ct_expiring}"
puts "Done at #{Time.now}"
end

当我运行这个脚本时,它显示我的总到期时间为 78

当我运行信息时,它显示 db0:keys=10237963,expires=224098,avg_ttl=0

因为 224098 比 78 大了那么多,所以我很困惑。是否有更好的方法让我获得所有 225k 过期 key 的列表?

另外,我的平均 ttl 是 0 怎么办?你不希望它是非零的吗?


更新

我有新的信息和一个简单的、100% 本地重现的情况!

重现:在您的笔记本电脑上本地设置两个 redis 进程。让一个成为另一个的奴隶。在从进程上,设置以下内容:

config set slave-serve-stale-data yes
config set slave-read-only no

现在,连接到从站(不是主站)并运行:

set foo 1
expire foo 10

10 秒后,您将无法再访问 foo,但 info 命令仍会显示您有 1 个 key 过期,平均 ttl 为 0。

有人可以解释这种行为吗?

最佳答案

expires 包含将过期的具有 TTL 的现有 key ,不包括已经过期的 key 。示例(为简洁起见,省略了 info 命令中的额外信息):

127.0.0.1:6379> flushall
OK
127.0.0.1:6379> SETEX mykey1 1000 "1"
OK
127.0.0.1:6379> SETEX mykey2 1000 "2"
OK
127.0.0.1:6379> SETEX mykey3 1000 "3"
OK
127.0.0.1:6379> info
# Keyspace
db0:keys=3,expires=3,avg_ttl=992766
127.0.0.1:6379> SETEX mykey4 1 "4"
OK
127.0.0.1:6379> SETEX mykey5 1 "5"
OK
127.0.0.1:6379> info
# Keyspace
db0:keys=3,expires=3,avg_ttl=969898
127.0.0.1:6379> keys *
1) "mykey2"
2) "mykey3"
3) "mykey1"
127.0.0.1:6379>

鉴于在您的情况下,您询问的是奴隶的 key 到期时间,根据 https://github.com/antirez/redis/issues/2861 :

keys on a slave are not actively expired, and thus the avg_ttl is never calculated

根据https://groups.google.com/forum/#!topic/redis-db/NFTpdmpOPnc :

avg_ttl is never initialized on a slave and thus it can be what ever arbitrary value resides in memory at that place.

因此,info 命令在从站上的行为不同是可以预料的。

关于redis - redis slave 上 info 命令列出的过期键数与我看到的不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45844944/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com