Redisでよく見られるアプリケーションシーン
3916 ワード
文書ディレクトリ
一般的な適用シーン
ここでは、適用シーンを簡単に記録するだけで、各適用シーンの使用の詳細を最適化する必要があります.
1.キャッシュ
Redisは他のキャッシュに比べて非常に大きな利点があり、複数のデータ型をサポートすることです.
データ型
説明
string
文字列、最も簡単なk-vストレージ
hash
hash形式、valueはfieldとvalueで、ID-Detailのようなシーンに適しています.
list
簡単なlist、シーケンスリスト、トップまたは末尾のデータ挿入をサポート
set
無秩序list、検索速度が速く、交差、並列、差分処理に適している
sorted set
整列set
2.ランキング
ランキングは、最近、最も暑い、クリック率が最も高い、活発度が最も高いなどの条件を示すtopリストなど、得点別にソートされます.整列集合sorted set
を用いることができる.
3.カウンタ
データ統計の需要は非常に普遍的であり,原子の増加によってカウントを維持する.例えば、いいね数、コレクション数、共有数など.
使用するコマンド:
コマンド#コマンド#
説明incr
じこぞうかincrby
カスタムステップサイズdecr
自己減算decrby
自己減算ステップのカスタマイズ
4.最も暑い前のN本のデータ
list
を使用して、制限されたセットで使用されるコマンドを実装できます.
コマンド#コマンド#
説明lpush
リストkeyのヘッダーに1つ以上の値valueを挿入ltrim
1つのリストをトリム(trim)すると、指定した区間内の要素のみがリストに保持され、指定した区間内でない要素は削除されます.
5.分散ロック
Redisシングルスレッドの機能を使用して使用するコマンド:
コマンド#コマンド#
説明NX
正常に設定できないPX
ミリ秒の有効期限
取得したコマンド:SET resource_name my_random_value NX PX 30000
ロックされたLuaスクリプトの削除if redis.call("get",KEYS[1]) == ARGV[1] then
return redis.call("del",KEYS[1])
else
return 0
end
6.購読発行
RedisはPUBLISH
,SUBSCRIBE
などのコマンドによりサブスクリプションとパブリッシュモードを実現
7.分散セッション
セッションキャッシュにRedisを使用します.たとえば、WebセッションをRedisに保存します.
8.制限速度
まずkeyの現在の値を取得し、制限を超えていない場合はINCRインクリメントを実行し、keyが存在しない場合はredisのトランザクションを使用してkeyと有効期限を初期化します.GET
+ INCR
+ EXPIRE
疑似コード:count = redis.GET(key)
if redis return nil {
redis.MULTI
redis.INCR(key)
redis.EXPIRE(key, expire_time)
redis.EXEC
count = 1
}
if count > limit {
return
} else {
redis.INCR(key)
}
9.キュー、ブロックキュー
Redisは良いメッセージキューとして使用することができ、listのlpop
およびlpush
インタフェースを通じてキューの書き込みと消費を行い、自身の性能が良いことで大部分の問題を解決することができる.lpush
+brpop
がキューをブロックします.
しかし,使用は提唱されず,メッセージミドルウェアとしてrabbitmqなどのサービスがより推奨される.
10.ユーザーラベル
set
を使用すると、ユーザーにラベルを追加できます.また、交差、並列化などの操作によって、一部のソーシャルニーズを実現できます.
11.乱数、抽選
set
のspop
/srandmember
を使用して乱数に使用されるコマンドを生成します.
コマンド#コマンド#
説明spop
コレクション内のランダム要素を削除して返しますsrandmember
コレクション内のランダム要素を返します
12.Webユーザーのアクセス履歴
独立したユーザーごとのWebサイトへのアクセス履歴
SET resource_name my_random_value NX PX 30000
if redis.call("get",KEYS[1]) == ARGV[1] then
return redis.call("del",KEYS[1])
else
return 0
end
count = redis.GET(key)
if redis return nil {
redis.MULTI
redis.INCR(key)
redis.EXPIRE(key, expire_time)
redis.EXEC
count = 1
}
if count > limit {
return
} else {
redis.INCR(key)
}
setbit unique:users:2018-09-19 ${userId} 1
のうち${userId}
はオフセット量getbit unique:users:2018-09-19 8
bitcount unique:users:2018-09-19
bitop and unique:users:2018-09-19-20 unique:users:2018-09-19 unique:users:2018-09-20
bitops unique:users:2018-09-19-20 1
13.地理的位置
Redisは3.2以降、地理的位置GEO機能を追加し、地理的位置信頼を格納して近くの位置を注入したり、揺らしたりするなど、地理的位置に依存する機能を実現することをサポートしています.参照先:https://blog.csdn.net/zhang_Red/article/details/82775136