Redisのリスト内のアイテムの有効期限を設定する方法
1934 ワード
Redisは偉大なツールであり、メモリにリストを格納するのに適しています.
しかし、リストをすばやく検索し、リストの各項目を一定時間後に期限切れにする必要がある場合は、どうすればいいですか?
まず、異なる類似keyを使用してデータを格納することはもちろんできません.その後、
Redisは直接このことをする方法を提供していませんが、これはできます!最後にRedisのListデータ構造を用いたとは限らないが.
質問:
cmdbデータ収集では、APIに認証機能を追加したいのですが、誰もが勝手にデータを提出してくれないので、受信するので認証が必要です.
tonadouの検証方法を参照します.
1.サービス側は、クライアントが同じkeyを共同で維持する.クライアントは、データを送信するときにtokenを携帯します.このtokenは、このkey+クライアントの現在時刻、MD 5暗号化後の文字列、およびクライアントの現在時刻のタイムスタンプから構成される.
2.サービス側は、keyの意外なメンテナンスに加えて、期限切れのメンテナンスを行います.例えば10秒です.クライアントtokenが来ると.
1)tokenのクライアントのタイムスタンプを取り出し,有効期限を10秒減算し,サーバ側の現在時刻と比較する.クライアントのこの時間がサービス側の現在の時間から10秒減算された後よりも小さい場合.では、この時間が長すぎるので、直接リンクしてはいけません.
2)クライアントのタイムスタンプと自分でメンテナンスしたkeyを持って,同じ暗号化後.この暗号化された値がすでにアクセスされているかどうかを判断します.これをredisで解決します訪問したら再訪問は許されない
3)最後に比較すると,サービス側とクライアントの暗号化値が同じかどうかは,同じように通過する.そしてこの暗号化された値をredisに追加します.
そして私はネット上でこの文章を見つけて、2つの方法を説明しました.
Redisの集合:「無秩序な文字列の集合」で、その項目には次のような特徴があります.唯一の(重複するデータが追加されるとredisは黙々と拒否する) は無秩序であり、任意の方法(redisにおいて)で をソートすることはできない.
Redis秩序化集合:「秩序化された文字列集合」、その項目には次のような特徴があります.は、集合と同様に、各項目が一意の である所有積分(項の積分は一意である必要はない) ポイント順(インデックス付き) 2つの解決方法:
1.整列集合
クエリの順序付けされた集合は非常に速いです.redisはリストを集合に変換するので、アクセスすると順序付けされています.
Redisドキュメントの説明に従います.
もちろん、秩序化されたセットの各アイテムに期限を設定することはできません.
秩序化されたセットに追加される各アイテムについて、scoreをUnix Timestampに設定します.このtimestampは期限切れを表します.次に、期限切れのデータを定期的に削除するタイミングタスクを追加します.
2.複数の集合および有効期限
このスキームは通常の集合を用いる.
セットごとにTTLを設定することはできませんが、セット全体にTTLを設定することはできます.したがって、各期間のデータを1つのセットに置くことができます.そして、このセットに期限を設定します.
転載先:https://www.cnblogs.com/chengege/p/11075023.html
しかし、リストをすばやく検索し、リストの各項目を一定時間後に期限切れにする必要がある場合は、どうすればいいですか?
まず、異なる類似keyを使用してデータを格納することはもちろんできません.その後、
keys
コマンドを使用して、類似keyのすべてのデータを取得します.このような費用は受け入れられない.Redisは直接このことをする方法を提供していませんが、これはできます!最後にRedisのListデータ構造を用いたとは限らないが.
質問:
cmdbデータ収集では、APIに認証機能を追加したいのですが、誰もが勝手にデータを提出してくれないので、受信するので認証が必要です.
tonadouの検証方法を参照します.
1.サービス側は、クライアントが同じkeyを共同で維持する.クライアントは、データを送信するときにtokenを携帯します.このtokenは、このkey+クライアントの現在時刻、MD 5暗号化後の文字列、およびクライアントの現在時刻のタイムスタンプから構成される.
2.サービス側は、keyの意外なメンテナンスに加えて、期限切れのメンテナンスを行います.例えば10秒です.クライアントtokenが来ると.
1)tokenのクライアントのタイムスタンプを取り出し,有効期限を10秒減算し,サーバ側の現在時刻と比較する.クライアントのこの時間がサービス側の現在の時間から10秒減算された後よりも小さい場合.では、この時間が長すぎるので、直接リンクしてはいけません.
2)クライアントのタイムスタンプと自分でメンテナンスしたkeyを持って,同じ暗号化後.この暗号化された値がすでにアクセスされているかどうかを判断します.これをredisで解決します訪問したら再訪問は許されない
3)最後に比較すると,サービス側とクライアントの暗号化値が同じかどうかは,同じように通過する.そしてこの暗号化された値をredisに追加します.
そして私はネット上でこの文章を見つけて、2つの方法を説明しました.
Redisの集合:「無秩序な文字列の集合」で、その項目には次のような特徴があります.
Redis秩序化集合:「秩序化された文字列集合」、その項目には次のような特徴があります.
1.整列集合
クエリの順序付けされた集合は非常に速いです.redisはリストを集合に変換するので、アクセスすると順序付けされています.
Redisドキュメントの説明に従います.
“ , , Redis O(log(N)) 。 , Redis , “
もちろん、秩序化されたセットの各アイテムに期限を設定することはできません.
score
で秩序化された集合をクエリーできます.ここで、scroeは秩序化された集合メンバーの順序を指します.デフォルトは小さいから大きいまでです.秩序化されたセットに追加される各アイテムについて、scoreをUnix Timestampに設定します.このtimestampは期限切れを表します.次に、期限切れのデータを定期的に削除するタイミングタスクを追加します.
2.複数の集合および有効期限
このスキームは通常の集合を用いる.
セットごとにTTLを設定することはできませんが、セット全体にTTLを設定することはできます.したがって、各期間のデータを1つのセットに置くことができます.そして、このセットに期限を設定します.
転載先:https://www.cnblogs.com/chengege/p/11075023.html