Redisのシリーズ3:Redisのサポートされるデータ型

以下は、Redisのでサポートされているデータ型について説明し、公式サイト、Redisをからの抜粋です。

 それは、次のようなデータ構造をサポート文字列ハッシュリストセットはセットソート範囲クエリ、とのビットマップhyperloglogs地理空間インデックス半径クエリとをしてストリーム。

以下は、一般的に使用されるだけで、最初の5つについて説明します。

文字列(String)を

1、文字列型

実際に、それは、数値(整数、浮動小数点)、バイナリ(画像、オーディオ、ビデオ)、等(XML、JSONなど)は、文字列であってもよいが、最大は512メガバイトを超えません。

2. Setコマンド

セット名zhangsan EX 10 // 10ミリ秒期限切れの有効期限PX 10000

setnx名zhangsan //キー名が存在しない場合は、提供され、成功を返すように配置され、キー名は、0を返します(存在する場合)

キー年齢の前に、設定された年齢29 //キーは、既存の、成功したリターン1で覆われています

シーン:一つだけがsetnx成功に設定することができ、分散ロックを行う。また、利用可能setnxプレースホルダによって、連続的な呼び出しのシーンを防ぐために

値のための順序:年齢//戻り値はnilリターンキーが存在しない存在します

一括設定:MSET名zhangsan 15歳

バッチMGET名前年齢は// 15をzhangsan返します

MGETコマンドを使用しない、持っているn回取得し、これ占有されるネットワークリソースのパフォーマンスに影響を与えるだろう

MGET = 1回内部のネットワーク要求のRedisのn個のクエリを使用して、クエリはすべて使い捨ての結果を返します。

3カウント

その後、エラーが返された場合、年齢ダイ整数、1つのプラスからの整数; 0リターン1から年齢INCR年齢//インクリメントキーいいえ

非整数がエラーを返した1歳から//保存整数DECR年齢は、0からのキー年齢は減らさない-1

年齢incrby 2 2からの整数、非整数はエラーを返します//プラス、0からの年齢はプラスから22戻ります

decrby年齢2 //同上。

incrbyfloat年齢1.1 //整数の年齢+ 1.1

図4に示すように、追加の命令を追加

APPENDさんの名前の後に//戻りzhangsanを追加し、名前張を設定

5、文字列

「こんにちは」の名前を設定します。strlenの名前//は、それぞれ中国の6、3バイトを返します

6、文字列の傍受

名前zhangsnaを設定します。getrange名2 4 //戻りANG

図7に示すように、内部コード

INT:8バイト整数

 設定した年齢100;オブジェクトエンコードの年齢//返回int型

embstr:39のバイト文字列以下

 名前zhangsanを設定し、オブジェクトのエンコーディング名//返回embstr

より大きい39バイトの文字列:生

  セット名iafhsdfsdhfhusdfufdhhdghdbvjdvhdushfuisdhfudsihfusdhfuisgsvbnsdhfsduhfsduhfdsfhudhgfghdf

オブジェクトのエンコーディング名//返回生

8、スイッチデータベース

2つの// 16データベース0-15を選択

9、アプリケーションのシナリオ

キーデザイン:ビジネス名:オブジェクト名:ID:[プロパティ]

オーダー、ユーザー表ユーザーのデータベースは、対応するキーを注文することがあります。ユーザー:1、順序を:ユーザー:名

注意:

Redisのは、現在、プロテクトモードで、クライアントは、ローカル以外のリンクを許可していない、あなたはRedisのためのパスワードを設定することができ、その後の文は、パスワードを書くことができたときにクライアントをリンク

 力へ123456仮エントリrequirepas設定127.0.0.1:6379>config

または123456 requirepass redis.confを変更

ときに開始:redis.conf指定confに./redis-server

   ./redis-cli -p 6379 -a 12345678 //アクセスにパスワードを追加する必要があります

第二に、ハッシュ(ハッシュ)

マッピングテーブルの文字列フィールドの型と値のハッシュ。オブジェクトを格納するのに適しハッシュ。

1、コマンド

HSETキーフィールド値

セッター:HSETユーザー:1名zhangsan //成功したリターン1、それ以外の戻り0

値:hgetユーザー:1名//はzhangsanを返します

付加価値:HDELユーザー:削除されたの数を返します// 1つの投げ

フィールドに対応するキーの数を数えます:

HSETユーザー:1名zhangsan。HSETユーザー:1歳15。

HLENユーザ:1 //戻り2、ユーザー:1は、2つの属性があります

バッチ設定値:hmsetユーザー:2名zhangsan年齢15 //がOKを返します

バッチ値:hmgetユーザー:2つの行が15をzhangsan返す// 2名の年齢

フィールドは、ユーザがhexistsか否かを判断:2 zhangsan //プレゼンスを返し、存在しない場合は0を返します

hkeysユーザー:2 //は、名前、年齢2つのフィールドを返し、すべてのフィールドを取得します。

ユーザーを取得します。2すべての値:hvalsのユーザー:2 // 15を返すzhangsan

ユーザーを取得します。2すべてのフィールドと値:hgetallユーザー:2 //名前zhangsan 15歳を返します。

1増加:

hincrbyユーザー:2歳1 // 15 + 1

hincrbyfloatユーザー:2歳2 //フロートプラス2

図2に示すように、内部コード

ziplist <圧縮リスト>とハッシュテーブル<ハッシュテーブル>

ときに小さなフィールド値のない多数、ziplistの内部コード

例:

hmsetユーザー:3名リージの20歳、オブジェクトエンコードのユーザー:3 //返回ziplist

値は、内部プログラミングハッシュテーブルのziplistによってコード超える64バイトである場合

例:

HSETのユーザー:4名「王呉王呉王呉王呉王呉王呉王呉王呉王呉王呉王呉王呉王呉王呉王呉王呉王呉王呉王呉王呉王呉王呉王呉王呉王呉王呉王呉王呉王呉王呉王呉王呉王呉王呉王呉王呉王呉王呉王呉王呉王呉王呉王呉王5「。

オブジェクトエンコードのユーザー:4 //返回ハッシュテーブル

ハッシュタイプは関係がシミュレーションRedisの開発の難しさ、高いメンテナンスコストと複雑なクエリを実行する場合は、各キーは、別のフィールドを持つことができ、スパースです。

3、実現するためのプログラムを格納したユーザ情報の三種類

1)原生

設定したユーザ:1つの投げ笑。

設定したユーザ:1 60歳。

長所:シンプルかつ直感的には、各キーが値に対応します

短所:あまりにも多くのキー番号、職業とより多くのメモリは、ユーザー情報はあまりない本番環境のために、散乱され、

2)記憶されたオブジェクトのシリアル化のRedis

セットユーザー:1つのシリアライズ(ユーザ)

長所:簡単なプログラミング、高いメモリ使用量

短所:シリアライズとデシリアライズは、いくつかのオーバーヘッドがあり、ユーザーはすべての非直列化さを取るためにプロパティを更新し、Redisのにシリアライズを更新する必要があります

3)ハッシュタイプを使用

hmsetユーザー:1名は60歳をhahs

長所:シンプルかつ直感的には、メモリ消費量を減らすことができます

短所:ziplistとハッシュテーブル、2つのコード変換を制御し、より多くのメモリハッシュテーブルを消費するために、

概要:いくつかの更新の場合には、64バイトより大きくない値に対して、シリアル化を使用することができるが、ハッシュタイプを使用することができます

第三に、リスト(一覧)

、最大32個の蓄電素子2保存1のリストを順序付け複数のストリングを記憶するための1、

順序は、あなたがインデックスによって要素程度の範囲内の要素のリストを取得することができますので、リストの要素を繰り返すことができます

 

2、関連するコマンドのリスト

コマンドを追加します。rpush lpush linsert

右から左に挿入さrpush名ABCD // abcdのは、それが最初のインサートであります

LRANGE名0 -1 // abcdのすべての要素のリストを取得するには、左から右へ

lpush FAV ABCD //右ABCDに左から挿入

LRANGEのFAV 0 -1 //全ての要素のDCBAのリストを取得するには、左から右へ

linsert FAVのBR // rはBの前に挿入する前に、その後、使用LRANGEためFAV 0 -1返すdcrba

LRANGEインデックスllen:コマンドを探します

LRANGEキー始端//添字インデックス機能:場合は右から左へ、0からN-1まで左右端の最初の添え字-1、-2 ..秒〜

LINDEXのFAV -1 //は、-2戻りBの右端を返します

llen FAV //は、リスト5の現在の長さを返します。

コマンドを削除します:LPOP RPOP lrem LTRIM

LPOP FAV //左端の最初の要素は、Dを削除しました

RPOP FAV //削除の右端の要素

//すべての値を削除するには、指定した要素、0手段のカウント値を削除lremキーカウント値は、0未満のカウントは、値の値をカウントするように右から左に削除を示しています

例:

lpushテストbbbbbjxz //キーテストはzxjbbbbb入れます

zxjbbbbb 0 -1 //テスト結果をLRANGE

lrem試験4 B // B、左から要素を削除開始4を除去します

// lremテストは8、B // 8 Bを削除しますが、唯一の5つはすべて削除されます

0-1 // bjxzとして削除した後LRANGEテスト結果

lremテスト0 B // B取得すべて削除されたすべてのjxz

 

lpushユーザーbbbbbjxz // zxjbbbbbに左から右へのユーザーキー

1 3 // 2番目から4番目の要素のXJBにのみ完全に削除LTRIMユーザを残し

LRANGEユーザー0 -1 //クエリ結果XJB、他のすべてを削除します

コマンドを変更します。LSET

lpush user1のZYX //キーuser1が右のxyzに左から急落しました

LSET user1の2のJava // zの第三の要素が交換されているJava

LRANGE user1に0 -1 //クエリ結果のxyのjava

ブロッキングコマンド:blpop brpop

図3に示すように、内部コードリスト

1)ziplistとして符号化された要素および少ない大きくない要素の数は、メモリの使用量を減少させる場合

rpushリストABC

オブジェクトエンコードのリスト//戻りziplist

2)512の以上の要素、構成要素、又は以上の64のバイトは、内部リストのLinkedListに符号化する場合

rpushリストのA1、A2 ............. A513の或rpushリストNNNNNNNNNNNNN ..... NNN

オブジェクトエンコードリスト// LinkedListの

ziplistは、今あなたがこれらの二つの3.2後が表示されない、qulicklist内部コーディングをより効率的に使用してバグである前バージョン32億ユーロでは、Redisのは、ziplistとLinkedListの両方の利点を組み合わせたクイック内部コーディングを提供し、エンコードは、唯一qulicklist確認してください。

第四に、順不同のコレクションセット

順不同のセットを、重複を許容しないリストと同じではない多要素を保存しており、セットはCRUDをサポートすることに加えて、32個の要素のマイナスパワーを与えるために2まで保存することができ、セット交差点をサポートし、そして労働組合、違い。

1、コレクションセットに関連するコマンドの要素

素子を動作させる:存在SADD smembers SREM SCARD SPOP

ユーザはキーがあるかどうかをチェックするために//存在します

ユーザへの挿入サッドユーザABC //要素3,3を返します

サッドユーザーAB //より多くの要素が、無効な繰り返した場合、あまりにも怒るためにわらを挿入し、0を返します。

SREMユーザa // 1を返し、要素を削除します

2を戻す// SCARDユーザ、計算要素の数

セット内sismemberユーザA //要素が存在すると、リターンの存在は、ノーリターン0が存在しないか否かを判断します

ランダム戻りsrandmemberユーザa //二つの要素、要素数2

コレクションから削除2つのランダム要素ABとABを返す// SPOPユーザー2

ユーザー//この時間は何AB、Cのみ行われていないsmembers

セットの交差点:シンター

ユーザーを追加する:1リリー22女の子

2 zhangsan 22少年:ユーザーを追加

焼結ユーザー:1つのユーザー:2 // 2セットの共通部分を見つけ、それは22を返します。

サッドユーザー:3ルーシー22女の子//第三の要素を追加します

焼結ユーザー:1つのユーザー:2ユーザー:3 // 3セットの共通部分を見つけ、それは22を返します。

 

設定する労働組合(デエンファシス):sunion

sunionのユーザー:1つのユーザー:2ユーザー:3 // 3セットをマージし、重複排除、リリzhangsanルーシーの女の子の男の子を返します。

設定した差分セット:sdiffの

sdiffのユーザー:1つのユーザー:2 //リリー女の子

キューに設定し、結果を保存します。sinterstore sunionstore sdiffstore

sinterstoreのuser_jjユーザー:1つのユーザー:2 //交差点user_jjに結果を保存します

sunionstoreのuser_bjユーザー:1つのユーザー:2 //組合user_bjに結果を保存します

sdiffstore user_cjユーザー:1つのユーザー:2 //は、差分user_cjを設定し、結果を保存します

smembers user_cj //返回リリ女の子

図2に示すように、内部コード

サッド利用者1 2 3 4 //場合(512未満)要素の数が少ないと、メモリINTSETの使用を減少させるために使用される整数、Redisのあります

要素が512以上ではない@ ....サッドユーザ数12 513、または整数(例えば、AB)、符号化されたハッシュテーブルであれば

オブジェクトエンコードユーザ//ハッシュテーブル

図3に示すように、設定されたアプリケーションシナリオの順序付けられていない組

ラベル、社会的、お問い合わせは、人々の共通の利益を持って、インテリジェントな勧告

使用します。

ユーザーにタグを追加します。

サッドユーザー:1:FAVバスケットボールサッカー 

ユーザーを追加します。2 PQ

またはラベルにユーザーを追加します。

サッドバスケットボール:ユーザーのユーザー:1つのユーザー:2

サッドサッカー:ユーザーのユーザー:1つのユーザー:2ユーザー:3

...

人々の共通の利益を計算します。

シンターユーザー:1:FAVのユーザー:2:FAV

第五に、セットを注文しました

一般的にビデオサイトは、ユーザーが必要なのようなリストを行うためにビデオをアップロードするには、リストで使用される、またはポイント数チャン

そして、リンクのコレクションは、重複したメンバーを持つことはできません 

相違点のセットで設定して、キューリストを設定命じました。 

 

1、関連するコマンド順序集合

コマンドの追加

zaddキースコアメンバー[スコア部材....]

zaddユーザー:ポイント数枚ZAN 200 zhangsan // zhangsan、成功した操作の数が1を返します

zaddユーザ:ZAN 200 zhangsan 120リシ100 wangwu //戻り3

zaddテスト:1 NX 100 zhangsan //キーテスト:1は主に追加するために、存在しません。

zaddテスト:200 zhangsan //キーテストINCR 1 XX:1、この場合300には、主に修正するために、存在している必要があります

zadd試験:1 XX CH INCR -299 zhangsan演算結果を返す// 1,300-299 = 1

Viewコマンド

zrange試験:1 0 -1 withiscores //ビューポイントと同様に(スコア)とメンバー名

zcardテスト:1 //はメンバーの数をカウントし、リターン

賞賛の数を見ます

zaddテスト:2 NX 100 zahngsan //コレクションを追加します。

zscore試験:ポイントの2 zhangsan //ビューリージ番号(スコア)ちゃんは、100を返します。

ランキング:

zaddユーザー:3 200 zhangsan 120リシ100 wangwu //挿入データ最初

zrangeのユーザー:3 0 -1 withscores //はメンバーとスコアを参照してください

zrankユーザー:3 zhangsan //ランキング返す:第三位が3の2 0〜2を返します。

zrevrankユーザー:3 zhangsan // 0抗順序を返し、このような点をより多くの、より多くのフロントランク

コマンドを削除します。

メンバーを削除します。

zremユーザー:3つのzhangsanのリージ//戻りが正常に二つの部材がwangwuを残し削除

スコアを増やします。

zincrbyユーザー:3人の10 wangwu //王5人のメンバーを加えた10得点

zaddユーザー:3 10 wangwu // INCR XXと言っコマンドとして

スコアとランキングメンバーの指定した範囲を返します。

zaddユーザー:4 200zhangsan 120リシ100 wangwu //挿入データ最初

zrangeユーザー:4 0 -1 withscores //戻り結果wangwu 100リシ120 zhangsan 200(空間は実際改行です)

zrevrangeユーザー:4 0 -1 withscores //逆順、結果はzhangsan 200リシ120 wangwu 100

メンバー指定した分数の範囲を返します。

zrangebyscoreユーザー:4 110 300 withscores //はローからハイリシ120 zhangsan 200に結果を返します

zrevrangebyscoreユーザー:4 300 110 withscores //低zhangsan 200リシ120に結果を返します

zrangebyscoreユーザ:無限大4(110 + INF withscores // 110、結果はリージ120 zhangsan 200

zrevrangebyscoreユーザー:110に対して無限小4(110 -INF withscores //、結果は100 wangwuあります

メンバーの数がスコア範囲を指定返します。

ZCOUNTユーザー:4 110 300 //戻り2つのデータとzhangsanリージ

ランクの昇順に指定された要素を削除します。

zremrangebyrankユーザ:昇順に4 0 1 //点、第0及び第1の削除のみzhangsanを残し

指定されたスコア範囲のメンバーを削除します。

zaddユーザー:5 200 zhangsan 120リシ 100 wangwu // 試験データ挿入に
zremrangebyscoreユーザー:5 210 300 // 210及び300部材フラクション範囲を削除
含まない(zremrangebyscoreユーザ:. 5(INF + 100 //削除画分が100より大きい100)、左wangwu

積集合を命じました。

   格式:zinterstoreの  先numkeysキー... [WEIGHTS重量] [集合のSUM | MIN | MAX]

         先:キー名を格納するための新しい要素を生成するの交点 

         numkeys:キー交点の数を計算します

         キー:キー要素

         重量:重量で選択されたキーに対応する各値、デフォルト1

  初期データ:

       zaddユーザー:7 1ヤコブ2マイク4ジャック5ケイト//ユーザ初期化:7データ

       zaddユーザー:8 3ヤコブ4マイク4ルーシー2リー6ジム//初期化するユーザー:8データ

  交差点の例:

  zinterstore user_jj 2ユーザー:7ユーザー:合成キーの数の8集合和// 2の代表的な、

デフォルトは和であるので、//合計額は、増加も置いてもよいです

@結果user_jj:4james(1 + 3)、6mike(2 + 4)

zinterstore user_jjmax 2ユーザー:7ユーザー:8 max集約或分 

//最大スコア、リターン結果3james 4mikeの交差点で、minは最小値を取ります

 重み:

  zinterstoreのuser_jjweight 2ユーザー:7ユーザー:8個の重み8 4集計最大

  // 1、同様に、ユーザの2人のメンバーの交点取る:7-> 1つのジェームズ2マイクと、ユーザー:8-> 3ヤコブ4マイク

  // 2、ユーザー:7->ヤコブ1×8 = 8、ユーザー:7->マイク2×8 = 16、最終使用者:検索結果8つのジェームズ16マイク。

 // 3、ユーザー:8->ヤコブ3 * 4 = 12、ユーザー:* 4 = 16 8>マイク4、最終ユーザー:8つの結果12のジェームズ16マイク

 // 4、12のジェームス16mikeの最大値を乗算の最終結果

// 5、のzrangeのuser_jjweight 0 -1 withscoresクエリ結果12のジェームズ16mike

概要:ユーザー:8で7メンバ値、ユーザ4によって8メンバ値は、最大値を取り、交差点を取ります

順序集合組合(重量にマージ):

   格式:zunionstoreの  先numkeysキー... [WEIGHTS重量] [集合のSUM | MIN | MAX]

         先:キー名を格納するための新しい要素を生成するの交点

         numkeys:キー交点の数を計算します

         キー:キー要素

         重量:重量で選択されたキーに対応する各値、デフォルト1

zunionstore user_jjweight2 2ユーザー:7ユーザー:8個の重み8 4集計最大

// zinterstore上記のように、しかし取られ、命令として設定

2.内部コードの順序集合

1)ziplist

zadd user:9 20 james 30 mike 40 lee
object encoding user:9 //返回ziplist
//当元素个数少(小于128个),元素值小于64字节时,使用ziplist编码,可有效减少内存的使用
2)skiplist 

zadd user:10 20 james......
//大于128个元素或元素值大于64字节时为skiplist编码

3.使用场景

   排行榜系统,如视频网站需要对用户上传的视频做排行榜

   点赞数:zadd user:1:20180106 3 mike  //mike获得3个赞

   再获一赞:zincrby user:1:20180106 1 mike  //在3的基础上加1

   用户作弊,将用户从排行榜删掉:zrem user:1:20180106 mike

   展示赞数最多的5个用户:zrevrangebyrank user:1:20180106  0  4 

   查看用户赞数与排名:

    zscore user:1:20180106 mike   zrank user:1:20180106 mike

 

おすすめ

転載: www.cnblogs.com/dudu2mama/p/11366235.html