2016-08-13 2 views
0

ли следующее поведение ожидается в Redis, версии: 2.8.19:Redis ключа истечь фактически не удаляется

127.0.0.1:6380> set fooxyz 1 
OK 
127.0.0.1:6380> ttl fooxyz 
(integer) -1 
127.0.0.1:6380> expire fooxyz 3 
(integer) 1 
(1.98s) 
127.0.0.1:6380> ttl fooxyz 
(integer) 0 
127.0.0.1:6380> ttl fooxyz 
(integer) 0 
(0.96s) 
127.0.0.1:6380> ttl fooxyz 
(integer) 0 
127.0.0.1:6380> ttl fooxyz 
(integer) 0 
127.0.0.1:6380> get fooxyz 
"1" 

Как вы можете видеть, я установить истекает ключ fooxyz, он достигает 0, но тогда он никогда не удаляется. Я по-прежнему могу получить значение fooxyz после истечения времени.

Можно ли ожидать? Будет ли он в конечном итоге удален/сбор мусора?

Согласно redis documentation,

Ключ активно истек просто, когда некоторый клиент пытается получить к нему доступ, и ключ найден, чтобы быть истекло.

И все же здесь у меня есть пример активной попытки получить ключ, и он не истекает.

ответ

0

esilver, я не могу воспроизвести вашу проблему в v3.2.2, ленивому истекают отлично работает для меня:

127.0.0.1:6379> set fooxyz 1 
OK 
127.0.0.1:6379> ttl fooxyz 
(integer) -1 
127.0.0.1:6379> expire fooxyz 3 
(integer) 1 
127.0.0.1:6379> ttl fooxyz 
(integer) -2 
127.0.0.1:6379> get fooxyz 
(nil) 
+0

Согласны ли вы, что неоднократно получать ТТЛ 0 для ключа странно Кроме того - это на процесс Redis, что следящая мастер, но не является readonly, то есть я также могу написать подчиненному. Считаете ли вы, что это может быть связано? – esilver

+0

Да, это странно. И я все еще не могу воспроизвести его в перезаписываемом подчиненном. –

0

@esilver Да, это странно. И я до сих пор не могу Репрографический его на записываемый ведомым :(

127.0.0.1:6000> info replication 
# Replication 
role:slave  <======= 
master_host:127.0.0.1 
master_port:6001 
master_link_status:up 
master_last_io_seconds_ago:1 
master_sync_in_progress:0 
slave_repl_offset:24786 
slave_priority:100 
slave_read_only:0  <======= 
connected_slaves:0 
master_repl_offset:0 
repl_backlog_active:0 
repl_backlog_size:1048576 
repl_backlog_first_byte_offset:0 
repl_backlog_histlen:0 
127.0.0.1:6000> set fooxyz 1 
OK 
127.0.0.1:6000> ttl fooxyz 
(integer) -1 
127.0.0.1:6000> expire fooxyz 3 
(integer) 1 
127.0.0.1:6000> ttl fooxyz 
(integer) -2 
127.0.0.1:6000> get fooxyz 
(nil) 
Смежные вопросы