【redisの基礎】redisの10種類のデータ型

序文

Xu Zhu 兄弟の提案を受け入れます。今後、redis に関する一連の記事が公開される予定です

この記事では、Redis7 データ型の使用率が高い操作について説明します。Redis7 データ型のすべての操作については、コマンド | Redisを参照してください。

前の記事:redisを知る【redisのインストール・使い方・アンインストール】_頑張って頑張るmlxのブログ - CSDNブログ

ご質問がございましたら、いつでもプライベートメッセージをお送りください~


目次

redis キー (キー)

redis 文字列 (文字列)

Redis リスト (リスト)

Redis ハッシュ (ハッシュ)

Redis コレクション (セット)

Redis 順序付きコレクション Zset (ソートされたセット)

Redis ビットマップ (ビットマップ)

Redis カーディナリティ統計 (HyperLogLog)

Redis 地理空間 (GEO)

Redis流(Stream)

Redis ビットフィールド (ビットフィールド)


redis キー (キー)

一般的に使用される redis コマンドのリスト:

キーの一般的なコマンドの詳細は次のとおりです:
 key * #現在の k= ライブラリ内のすべてのキーを表示します。

あるキーが存在するかどうかを判断します (redis 命令では、0 は 0 件の命令がクエリされた (条件を満たす命令が見つからなかった) ことを意味し、1 はクエリが成功したことを意味します)


type key # 現在のキーのデータ型を表示します


del key #指定されたキーを削除します


unlink key #ノンブロッキング削除。キースペースのメタデータからキーを削除するだけです。後続の非同期操作では実際の削除は実行されません。現時点では、このコマンドについてある程度の印象を持っていれば十分です。これについては後ほど詳しく説明します。


ttl key #クエリしたキーの有効期限が切れた秒数を確認します -1 は有効期限が切れないことを意味します -2 は期限切れであることを意味します


キーの有効期限を設定する秒数 #キーの有効期限を設定します


move key [0-15] #現在のデータベースのキーを指定したデータベースに移動します。redis にはデフォルトで 16 のデータベースがあります。 select
[0-15] #データベースを切り替えます [0-15]、デフォルトは 0、添え字は 0 を超えます-15 の範囲ではエラーが報告されます。


dbsize # 現在のデータベース内のキーの数を表示します


lushdb #現在のライブラリを空にします。使用には注意してください


flashall #16 のデータベースを空にする場合は注意が必要です

この操作は非常に危険であるため、ここでは説明しません。 

help @type は、ヘルプ ドキュメントの種類を表示します。

注: 操作する命令では大文字と小文字が区別されませんが、手動で設定したキーでは大文字と小文字が区別されます。

redis 文字列 (文字列)

文字列は Redis の最も基本的なデータ型です。キーは値に対応します。文字列データはバイナリ セーフです。つまり、jpg ファイルやファイルを含むあらゆるデータを保存できます。

文字列での一般的な命令:

 文字列型コマンドの詳細は次のとおりです:
set key value

 

 get key # 指定されたキーに対応する値を取得します

mset [key1] [value1] [key2] [value2] [key3] [value3] #1 つ以上のキーと値のペアを同時に設定します


mget [key1] [key2] [key3] #複数のキーの値を同時に取得


msetnx [key1] [value1] [key2] [value2] #1 つ以上のキーと値のペアを同時に設定します。成功するには、どのキーも存在しないことを確認する必要があります

 

 

指定された間隔を取得します
getrange [key] 0 -1 # このキーのすべての値を取得します
getrange [key] 0 3 # このキーのインデックス 0 とインデックス 2 の間の値を取得します
getrange [key] 1 xxx # 範囲を設定します指定された間隔の範囲内の値


 
値の増減
incr [key] # 数値を増分 +1
incr [key] [increment] # 指定した整数を増やす +increment 
decr [key] # 数値を減らす -1
decr [key] [increment] # 指定した整数を減らす -インクリメント 


文字列の長さを取得し、内容を追加します
strlen [key] # キーに対応する値の長さを取得します


append [key] [vale] #文字列コンテンツ
 

分散ロックを追加
setex [key] [expiration time] [value] # 有効期限付きのキーを設定、動的設定


setnx [key] [value] # キーが存在しない場合にのみ、キーの値を設定します。


set [key] [value] get # 指定されたキーの値を value に設定し、キーの古い値を返します。


getset [key] [value] # 指定されたキーの値を value に設定し、キーの古い値を返します。

 

適用シナリオ:
1. Douyin が好き

2. 記事にいいね!

Redis リスト (リスト)

リストの紹介

両端リンクリストの構造、容量は2の32乗-1要素、約40億以上、主な機能にはプッシュ/ポップなどがあり、一般的にスタック、キュー、メッセージキューなどで使用されます。シナリオ。リストは複数の値を持つ単一のキーに対応します

左右どちらでも挿入・追加可能です。

キーが存在しない場合は、新しいリンク リストを作成します。

キーがすでに存在する場合は、コンテンツを追加します。

すべての値を削除すると、対応するキーが消えます。

  • そのリストの最下層は実際には二重リンク リストであり、操作の両端で高いパフォーマンスを発揮しますが、インデックス添字操作による中間のノードのパフォーマンスは低下します。
  • li; リストの一般的な操作

リスト操作の一般的な概要 

lpush [key] [value] ... // 要素をリストの先頭(左側)に置きます


rpush [key] [value] ... // リストに要素を入れます (右)


lrange [key] 0 -1 // リストを左からトラバースすると、左からのみトラバースできます


lpop [key] // 一番左のスタックは lrange によって最初に走査されるスタックです


rpop [key] // 右端のスタックは lrange によって走査される最後のスタックです


lindex [key] [index] // インデックス値で値を取得

  
llen [key] // 要素数を取得


lrem [key] [num] [value] // num value value を左から右に削除します


lrem [key] 0 [value] // 左から右に評価された値をすべて削除します


ltrim [key] [start] [end] // 指定された範囲内の値をインターセプトし、それを [key] に代入します。つまり、この範囲外の値を削除します。


rpoplpush [key1] [key2] [value] //リストの最後の要素を削除し、この要素を別のリストの最初の要素に追加して戻ります


lset [key] [index] [value] //キーのインデックス値をvalueに変更します


linsert [key] brfore/after [value1] [value2] // リスト内の既存の値の前後に特定の値を追加します

応用シナリオ
 WeChat 公式アカウントが著者の記事の購読を促します

私が購読している著者が新しい記事を 2 件公開すると、対応する ID はそれぞれ 11 と 22 になります。

記事のような lpush:ljl 11 22

最初の 10 件の購読済み記事情報を表示したいと考えています。

lrange likearticle:ljl 0 9

Redis ハッシュ (ハッシュ)

簡単な紹介

ハッシュについて話すとき、最初に思い浮かぶのは Java のハッシュマップでしょう。Redis のハッシュは Java のハッシュに似ており、kv モードは変更されませんが、v はキーと値のペアです => Map<String,Map<Object,Object>

一般的なコマンドのリスト

よく使用されるコマンドの詳細

hset/hget/hmset/hmget/hgetall/hdel //hset/get は値の取得と値の取得に対応 hmset/hmget は値の取得と複数の値の取得 hgetall はすべての値の取得 hdel は値の削除に対応 


hlen // キー内のすべての数量を取得します


hexists [key] [k1] // キーにキー k1 があるかどうかを確認します

 
hkeys [key] // キー内のすべてのキーを取得します


hvals [key] // キー内のすべての値を取得します


hincrby [key] k1 [num] // キーの k1 の値は num integer ずつ増加します


hincrbyfloat [key] k1 [num] // キーの k1 の値は num 桁ずつ増加します

 


hsetnx [key] k1 [value] // 割り当てがありません、無効です

ハッシュの一般的なアプリケーション シナリオ:

ショッピングカートの早期導入

Redis コレクション (セット)

簡単な紹介

 set について考えるとき、最初に思い浮かぶのは Java のハッシュセット、redis のセット コレクションです。セット内の値は重複してはなりません。データの保存方法は単一の値と複数の値です。

共通コマンド

よく使用されるコマンドの詳細な紹介 

SADD キー メンバー ... // 要素を追加


SMEMBERS キー // コレクション内のすべての要素を走査します


SISMEMBER キー メンバー // 要素がセット内にあるかどうかを判断します

SREM キー メンバー ... // 要素を削除


SCARD キー // コレクションの長さを取得する


SRANDMEMBER key m // 集合コレクションからランダムにmを選択 最大数を超えた場合は全て取り出す  

書き込まれた値が-3などの負の数の場合、3を取り出す必要があることを意味しますが、削除されない重複した値が存在する可能性があります


SPOP key m // コレクションから要素をランダムにポップし、1 つを削除し、もう 1 つを削除します


SMOVE key1 key2 key1 の既存の値 // key1 の既存の値を key2 に割り当てます

 

集合演算

SDIFF keyA keyB // A - B は​​、A に属するが B には属さない要素のコレクションです


SUNION keyA keyB // AUB は A または B に属する要素のマージされたコレクションです


SINTER keyA keyB // A ∩ B は A と B の両方に属します


SINTERCARD numkeys keyA keyB [LIMITlimit] // また、交差も検索しますが、結果セットは返さず、結果のカーディナリティのみを返します。結果が実行中に制限された制限数を超えた場合、交差のカーディナリティを制限するために制限が使用されます。操作を実行すると、直接戻ります

典型的なアプリケーションシナリオ

1.vx宝くじ

2. 友達のように設定された Vx 友達の輪

3. QQ で知り合いかもしれない人をツイートする

Redis 順序付きコレクション Zset (ソートされたセット)

zset の概要

Zset は set に基づいてスコアなどのフィールドを追加します。このフィールドがあるからこそ、zset は set の特性を満たすことに基づいて要素を並べ替えることができます。

zset についてよく使用される手順

zset の一般的なコマンドの詳細な紹介

ZADD キー スコア メンバー [ スコア メンバー ] // 要素を追加


ZRANGE key start stop [WITHSCORES] // 要素スコアの小さいものから大きいものへの順序を返します 開始から終了までのインデックスを持つすべての要素を返します


ZREVRANGE キー 0 - 1 [WITHSCORES] // 逆順


ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count] // 指定されたスコア範囲 (最小、最大) の要素を取得します。 ただし、limit は返される制限を除き、返される個数はいくつになります 


ZSCORE キーメンバー // 要素のスコアを取得する


ZCARD key // コレクション内の要素の数を取得します


ZREM key 特定のスコアに対応する値 // 要素を削除


ZINCRBY キー インクリメント メンバー // 要素のスコアを増加します


ZCOUNT key min max // 指定されたスコア範囲内の要素の数を取得します


ZMPOP numkeys key [key …] <MIN | MAX> [COUNT count] // キー名リスト内の最初の空ではないソートセット (メンバーとスコアのペア) から 1 つ以上のキーをポップします。


ZRANK キー値 value // 添字値を取得


ZREVRANK キー値 // 添字値を逆順に取得   

 

適用シナリオ:
販売数量に応じて製品を分類する

  

Redis ビットマップ (ビットマップ)

ビットマップの概念

説明:基礎となるデータ構造として String 型を使用して実装された統計バイナリ状態データ型

ビットマップは本質的には Array であり、String データ型に基づくビット単位の演算です。配列はビットで構成され、各ビットはオフセット (インデックスと呼びます) に対応します。ビットマップでサポートされる最大ビット数は 2^32 ビットで、ストレージ スペースを大幅に節約できます。512M メモリを使用すると、最大 42 億 9000 万バイトの情報を保存できます (2^32 = 4294967296)。

一般的なコマンドのリスト

よく使用されるコマンドの詳細

SETBIT キー オフセット値 // 最初のオフセットの値を value に設定します。値は 0 または 1 のみです。オフセットは 0 から始まります。


GETBIT key offset // オフセットビットの値を取得します


STRLEN キー // 8 ビットを超えるバイト数を調べ、1 バイトあたり 8 ビットに従って容量を拡張します


BITCOUNT key // キーに含まれる 1 の数を調べます


BITOP と destKey key1 key2 // 1 つ以上のキーの論理結合を実行し、結果を destkey に保存します 


以下の操作は同じなので、ここでは繰り返しません~ 

BITOP または destKey key1 key2 // 1 つ以上のキーに対して論理 OR を実行し、結果を destkey に保存します 

BITOP XOR destKey key1 key2 // 1 つ以上のキーに対して論理 XOR を実行し、結果を destkey に保存します。 
BITOP NOT destKey key1 key2 // 1 つ以上のキーに対して論理 NOT を実行し、結果を destkey に保存します

 典型的なアプリケーション シナリオ:
サインインのアプリケーション シナリオはビットマップに非常に適しています。

1 年 365 日、毎日何日サインインしますか?

年ごとに

Redis カーディナリティ統計 (HyperLogLog)

  基本的な紹介

重複排除統計機能のカーディナリティ推定アルゴリズムは HyperLogLog であり、カーディナリティは重複排除後のデータセットの実数です。カーディナリティ統計は、コレクション内の固有の要素の数をカウントするために使用されます。つまり、コレクションの重複排除後の残りの要素の計算にはメモリのみが必要で、2 の 64 乗 = 18446744073709551616 個の異なる要素のカーディナリティを記録できます。 。ただし、HyperLogLog は入力要素に基づいてカーディナリティを計算するだけであり、入力要素自体を保存しないため、HyperLogLog は入力の個々の要素をセットのように返すことができません。

共通コマンド

 pfadd hyl1 1 1 1 1 2 3 6
pfadd hyl2 2 4 4 4 6 7 8 9
pfcount hyl2 //重複排除後の hyl2 の要素数を計算する
pfmerge distResult hyl2 hyl1 //hyl2 と hyl1 の要素をマージし、重複を排除します
pfcount disResult / /hyl2で重複排除後の要素数を計算する

アプリケーションシナリオ

Tmall ウェブサイトのホームページ 10 億レベルの UV Redis 統計スキーム

Redis 地理空間 (GEO)

簡単な紹介

地球上の地理的位置は、2 次元の緯度と経度、経度の範囲 (-180, 180]、緯度の範囲 (-90, 90]) で表されます。点の緯度と経度を決定する限り、次の値を取得できます。地球上のその位置。

たとえば、滴滴タクシーの場合、最も直感的な操作は、各車の位置をリアルタイムで記録して更新することであり、車を
探す場合は、データベースからrキロメートル以内にある車両の緯度と経度を検索します。 (座標 x0, y0) を
マップ上に直接コピーします。:
座標系を選択します。

共通コマンド

 よく使用される指定の詳細 

GEOADD 都市 116.403963 39.915119 "天安門" 116.403414 39.924091 "紫禁城" //GEOADD は緯度と経度の座標を追加します


ZRANGE city 0 -1 // View (中国語文字化けが発生します)


redis -cli -a 111111 -p 6379 -- raw // 中国語の文字化けを解決する


GEOPOS city 天安門紫禁城 // GEOPOS は緯度と経度を返します
// GEOHASH は座標の geohash 表現を返します (base32 エンコード)


GEOHASH シティ 天安門紫禁城


//GEODIST は 2 つの位置間の距離 (m km ) を返します
GEODIST 都市 天安門万里の長城 km
//GEORADIUS は指定された緯度と経度を中心として、キーに含まれる位置要素を返します。中心からの距離は以下を超えません指定された最大距離 すべての位置要素。
GEORADIUS city 116.418017 39.9144444 10 km withdist withcoord count 10 desc
//GEORADIUSBYMEMBER 指定された範囲内の要素を検索します。中心点は指定された位置要素によって決まります
GEORADIUSbymember city Tiananmen 10 km withdist withcoord count 10 withhash

アプリケーションシナリオ

  • 美団周辺のレストランとホテル
  • Gaodeマップ付近の店舗

Redis流(Stream)

流れの内容はまた別ブログにまとめます〜

redis [stream]: redis ストリーム データ型の詳細な紹介

Redis ビットフィールド (ビットフィールド)

基本的な紹介

目的: 一言で言えば、Redis 文字列はバイナリ ビットで構成される配列とみなされ、バイト アライメントなしで可変長ビット幅と指定された整数ビット フィールドをアドレス指定して変更できます。

2 つの機能は次のとおりです。

  • ビットフィールドの変更
  • オーバーフロー制御

 基本的な文法

おすすめ

転載: blog.csdn.net/m0_65431718/article/details/130768211