Redis: ハッシュにExpireを実装する

作成日 2011年10月28日  ·  44コメント  ·  ソース: redis/redis

こんにちは、ハッシュのキーに有効期限を設定できるかどうか知りたいですか?
たとえば、接続されているメンバーのリストをハッシュに入れ、各キーの有効期限を5分にします。

出来ますか?

ありがとう、そして私の英語を前もって申し訳ありません。

よろしく、マックス

最も参考になるコメント

まあ、私はほとんど一度にハッシュ全体を期限切れにしたくありません。 つまり、実際には、ハッシュを一連のキーに分割することを提案しています。 それは機能しますが、同じ引数を使用して、なぜハッシュが必要なのかを尋ねることができますか? 論理的に関連するすべてのキーをグループ化することには、計り知れない価値があります。 それ以外の場合は、キーを格納するセットを介してそのアカウンティングを実行する必要があり、参照整合性の問題が発生します。 それはすべて実行可能ですが、ハッシュ内の個々のキーの期限切れをサポートしないことは、redisのかなり大きな省略のように感じます。 そして私は、N人の異なる人々にMの異なる方法でそれを解決させることに価値があるとは確信していません。

全てのコメント44件

こんにちは、それは不可能です。その特定のフィールドに別のトップレベルキーを使用するか、ファイルされた別のフィールドと一緒に有効期限付きで保存し、両方をフェッチして、それがまだ有効かどうかをアプリケーションに認識させます。現在の時刻。

redis 127.0.0.1:6379> hset expire:me name tom
(整数)0
redis 127.0.0.1:6379> hget expire:me name
「トム」

redis 127.0.0.1:6379>期限切れexpire:me 10
(整数)1
redis 127.0.0.1:6379> ttl expire:me
(整数)8

..。
..。
..。

redis 127.0.0.1:6379> ttl expire:me
(整数)-1
redis 127.0.0.1:6379> hget expire:me name
(なし)

だからそれは動作します

個々のフィールドを期限切れにすることがリクエストだと思います。 ハッシュ全体を期限切れにすることは、他のキーを期限切れにすることと同じです。

はい、私もこの要件を満たしています。 個々のフィールドを期限切れにすることは可能ですか?

有効期限が異なる複数のハッシュを作成することに特定の問題はありますか?

まあ、私はほとんど一度にハッシュ全体を期限切れにしたくありません。 つまり、実際には、ハッシュを一連のキーに分割することを提案しています。 それは機能しますが、同じ引数を使用して、なぜハッシュが必要なのかを尋ねることができますか? 論理的に関連するすべてのキーをグループ化することには、計り知れない価値があります。 それ以外の場合は、キーを格納するセットを介してそのアカウンティングを実行する必要があり、参照整合性の問題が発生します。 それはすべて実行可能ですが、ハッシュ内の個々のキーの期限切れをサポートしないことは、redisのかなり大きな省略のように感じます。 そして私は、N人の異なる人々にMの異なる方法でそれを解決させることに価値があるとは確信していません。

Kevin Menard&JohanBergströmに感謝します。 実際、私はここで説明さました:https ://github.com/antirez/redis/issues/242、そしてサルヴァトーレからのコメントを読みました。
すべてのフィールドを次のようなキーに分割すると、 hashkey :field1

よろしく、
鄧春平

これは非常に問題があります。 ハッシュ内の特定のキーを期限切れにしたい理由は、キャッシュされた設定をハッシュに保存しているためです。 キーを設定した後、自動的に期限切れにしたい。 同時に、すべての設定が更新されている場合は、ハッシュ全体を強制終了できる必要があります。 したがって、リストでこれらの設定を取得し、リストを強制終了する機能が必要です。 設定のすべてのインスタンスを見つけることなく

bjoshuanoahでも同じ問題が発生します。現在、ハッシュの代わりにttlでキーを使用しています。例:
ハッシュ:ハッシュ名A-キーB-値C
キー値:キーA_B-値C

この機能の欠如は技術的に不可能ですか、それとも設計の選択ですか?

設計の選択は、実装を許可しない実装につながります。

:+1:

redis自体はサポートしていません。この関数はあまりにも便利です。

今日まで、redisはこの機能を実装する予定はありませんでした:-(

redis 127.0.0.1:6379> hset expire:me name tom
(整数)0
redis 127.0.0.1:6379> hget expire:me name
「トム」

redis 127.0.0.1:6379>期限切れexpire:me 10
(整数)1
redis 127.0.0.1:6379> ttl expire:me
(整数)8

..。
..。
..。

redis 127.0.0.1:6379> ttl expire:me
(整数)-1
redis 127.0.0.1:6379> hget expire:me name
(なし)

だからそれは動作します

ハッシュテーブルにはフィールドが1つしかないのですが、複数のフィールドについてはどうでしょうか。 それは正しく機能しません!

@ oylz-この機能リクエストの本来の目的は、キー全体ではなく、ハッシュ内の特定のフィールドの有効期限を許可することだと思います。

@itamarhaber
どのようにこのようなaboule ?:
hset expire:me name1 tom1
hset expire:me name2 tom2
hset expire:me name3 tom3

ttl expire:me 10

ハッシュテーブル(expire:me)全体が期限切れになります。

@oylz完全なハッシュが期限切れになることはわかっています。 それは機能しますが、ここではハッシュの1つのフィールドについて話します( @itamarhaberがすでに説明したように)。 たとえば、あなたの場合、name1フィールドを5秒後に、name2を10秒後に、name3を15秒後にどのように期限切れにすることができますか? ここでどのユースケースが議論されているのかが明確になったことを願っています。

@ nomi-ramzan
本当に分かりますか? @itamarhaberが言ったように、「この機能リクエストの本来の目的は、キー全体特定のフィールドの有効期限を許可することだと思います。」

@ nomi-ramzan
申し訳ありませんが、最初に間違って返信しました必要があります。
例えば:
_redis 127.0.0.1:6379> hset expire:me name tom
(整数)0
redis 127.0.0.1:6379> hget expire:me name
「トム」

redis 127.0.0.1:6379>期限切れexpire:me 10
(整数)1
redis 127.0.0.1:6379> ttl expire:me
(整数)8

..。
..。
..。

redis 127.0.0.1:6379> ttl expire:me
(整数)-1
redis 127.0.0.1:6379> hget expire:me name
(なし)

だからそれは動作します_

これは2020年です、Redisはこれを調べる必要があります

当社は、有効期限ハッシュフィールド機能を実装しています
ベースredis4.0

この機能をネイティブに提供すると非常に役立ちます。
ありがとう。

私はまだこれを待っています

信じられない! Redisはまだそれを実装していません!

ここでも同じですが、ハッシュフィールドに有効期限を設定する機能があると便利です

+1

信じられない! Redisはまだそれを実装していません!

この機能の+1

Redisの世界を発見したので、次の形式でキャッシュを保存することを想像しました。
1)各ハッシュテーブル-私のAPIメソッドです
2)ハッシュテーブルの行-メソッドの入力パラメーターのハッシュ関数であり、値はメソッドの応答です。

この機能の+1

この機能の+1

+1

+1

+1

+1

ハッシュで有効期限が切れるキーが実装されていない特定の理由はありますか?

これがまだ実装されていない理由は、この機能に必要な時間(CPU)とスペース(RAM)の複雑さが増しているためです。 とはいえ、決して決して言わないでください。

時間計算量は多項式時間のオーダーで進んでいますか? しかし、RAMを集中的に使用する理由は何ですか?

この機能が実装されていれば、redisの人気が大幅に高まると確信しています

この機能の+1

+1

+1

このページは役に立ちましたか?
0 / 5 - 0 評価