15

存続可能時間が0に達しても、Redisサーバーはキーを削除しません。

サンプルコードは次のとおりです。

redis-cli
>SET mykey "ismykey"
>EXPIRE mykey 20
#check TTL
>TTL mykey
>(integer) 17
> ...
>TTL mykey
>(integer) -1
#mykey chould have expired:
>EXISTS mykey
>(integer) 1
>#oh still there, check its value
>GET mykey
>"ismykey"

redisによる情報の戻りを確認すると、0個のキーの有効期限が切れていると表示されます。

何か案が?

ありがとう。

4

1 に答える 1

22

'...'を実行しているので、確実に言うのは難しいですが、その部分でmykeyを設定していると思います。これにより、有効期限が効果的に削除されます。

EXPIREマニュアルから

タイムアウトは、キーがDELコマンドを使用して削除された場合、またはSETまたはGETSETコマンドを使用して上書きされた場合にのみクリアされます。

また、TTLからの-1応答について

戻り値

整数応答:秒単位のTTL、またはキーが存在しないかタイムアウトがない場合は-1。

編集:この動作はRedis2.8で変更されていることに注意してください

Redis 2.8以降、エラーが変更された場合の戻り値:
キーが存在しない場合、コマンドは-2を返します。
キーは存在するが、有効期限が関連付けられていない場合、コマンドは-1を返します。

つまり、キーが存在する場合、それは永続的であるように見えます。つまり、有効期限が設定されていません。

編集:REDISスレーブサーバーでキーを作成すると、これを再現できるようです。通常、スレーブでローカルにキーを作成しないため、スレーブはマスター入力なしでキーを削除しません。これはここに当てはまりますか?

ただし、マスターに接続されたスレーブはキーを個別に期限切れにすることはありませんが(ただし、マスターからのDELが来るのを待ちます)、データセットに存在する期限切れの完全な状態を取得するため、スレーブがマスターマスターとして完全に機能し、キーを個別に期限切れにすることができます。

于 2012-08-07T15:31:26.960 に答える