ホームページ > データベース > Redis > 基本的なデータ構造を学習する Redis

基本的なデータ構造を学習する Redis

coldplay.xixi
リリース: 2020-12-04 15:44:02
転載
7977 人が閲覧しました

Redis の使い方チュートリアルこのコラムでは基本的なデータ構造を紹介します

基本的なデータ構造を学習する Redis

推奨 (無料): redis の使い方チュートリアル

Redis の基本データ構造

Redis には 5 つの基本データ構造があります: String (文字列)、list (リスト)、set (セット)、hash (ハッシュ)、zset (Ordered Collection##) #)

String string

文字列型は、Java 言語の ArrayList (数値リスト) に似た、Redis 値の最も単純なデータ構造ですが、Redis String では動的文字列です

Redis の文字列は、冗長スペースを事前に割り当てる方法を使用します

#[画像のアップロードに失敗しました...(image-724c60-1537973556456)]

set & get

>set keyname test
OK

>get keyname
test

//key如果存在就返回0
>setnx keyname test
0

>exists keyname

>del keyname
1

//批量设置
>mset key1 test1 key2 test2
OK

//批量获取
>mget key1 key2
1) test1
2) test2
ログイン後にコピー

キーの有効期限

//设置5s后过期
>expire keyname 5

//setex是expire和set的复合写法
>setex keyname 5 test
OK

//5s后查询
>get keyname
NULL
ログイン後にコピー

count

ps: 値が数値の場合、incr と incrby を使用してカウントできます。

>set num 10
OK

//incr默认加1
>incr num
11

//incrby后面要加上数字
>incrby num
ERR wrong number of arguments for 'incrby' command

//正确计数
>incrby num 5
16
ログイン後にコピー

list list

紹介しましょうredis のもう 1 つのデータ構造 list

先ほど、redis の文字列は Java 言語の ArrayList に似ていると言いましたが、redis のリストは LinkList (リンク リスト) に似ています。更新です。新しい追加は非常に高速ですが、インデックス クエリは低速です。

##これがリンクリストに似ているのはなぜですか? Redis リストはリンクリストと同じではないためです。実際にはクイック リスト (クイックリスト) の一種です。リストの構造は次のとおりです:

[画像のアップロードに失敗しました。..(image-625c1b-1537973556457)]

ここでは、ジップリストについてご紹介します。実際、これは連続したメモリ空間です

図からわかるように、クイック リストは実際には圧縮リストと

双方向ポインタ

で構成されていますが、リンクされたリストであることがわかります。には、prev 実行と Next 実行という 2 つのポインタがあり、これがクイック リストとリンクリストの違いです。

PS: では、redis が設計されたとき、なぜ双方向ポインターに変更されたのでしょうか?リンクされたリストのように、prev と next の 2 つのポインターが使用される場合、トラバーサルも実現できますが、双方向ポインターには明らかに利点があります。つまり、占有するメモリ領域が比較的少ないということです。

キューとスタック

/* 队列:First in first out */

//加两个value
>rpush keynames key1 key2
2

//计算
>llen keynames
2

>lpop keynames
key1

>lpop keynames
key2

//rpush会自动过期的
>rpop keynames
NULL

/* 栈:First in last out */

//同样,加两个元素
>rpush keynames key1 key2
2

>rpop keynames
key2

>rpop keynames
key1
ログイン後にコピー
辞書ハッシュ

Redisの辞書はJava言語のハッシュマップに似ており、順序付けされていない2次元構造でもあります。 、配列とリストの構造。これは、Redis 辞書とハッシュマップに似ています。

その後、リハッシュ、辞書の更新操作、ハッシュマップはすべてホットハッシュであるなどの違いがあり、十分な辞書がある場合、パフォーマンスがあまり良くないため、redis が変換され、

gradual## が採用されます。 # メソッド 、なぜプログレッシブと呼ばれるのでしょうか? Redis はすべてをリロードするのではなく、古い辞書と新しい辞書を保存し、スケジュールされたタスクを使用して古いハッシュのデータを新しいハッシュに移動し、移動後にハッシュ メモリ領域をリサイクルするためです。

辞書 (ハッシュ) の配列 リンク構造の追加: [画像のアップロードに失敗しました...(image-f5660f-1537973556457)]

>hset keynames key1 "test1"
1

>hset keynames key2 "test2"
1

//批量set
>hmset keynames key1 "test1" key2 "test2"
OK

//获取key1的值
>hget keynames key1
test1

//获取hash为keynames的长度
>hlen keynames
2

//获取全部
>hgetall keynames
1) key1
2) test1
3) key2
4) test2
ログイン後にコピー
コレクション セット


redis とハッシュセットのセットJava 言語の型は同じ種類の

順序付けされていない一意の

です。

>sadd keynames key1
1

//key1已经加过了,所以返回1
>sadd keynames key1 key2
1

>smembers keynames
1) key2
2) key1

//查询某个key是否存在,相当与contains
>sismember keynames key1
1

//相当于count
>scard keynames
2

//随意弹出key1
>spop keynames
key1
ログイン後にコピー

Ordered set zSetOrdered set は Redis でより特徴的で、SortedSet と HashMap の組み合わせに似ています。その内部実装は、ジャンプ リストと呼ばれるデータ構造です。一方で、順序付きセットはセットであるため、各要素は一意であり、各値にスコアを割り当て、このスコアに従って並べ替えることができます。スコアは権限並べ替え識別子に相当します。

ps: このため、順序付きセットを使用してファン情報を保存できます。値はファン ID、スコアはフォロー時間です。

//9.0是score也就是权重
>zadd keyname 9.0 math
1

>zadd keyname 9.2 history
1

//顺序
>zrange keyname 0 -1
1) history
2) math

//逆序
>zrevrange keyname 0 -1
1) math
2) history

//相当于count()
>zcard keyname
2

获取指定key的score
>zscore keyname math
9
ログイン後にコピー

ジャンプ リスト TODO

以上が基本的なデータ構造を学習する Redisの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:jianshu.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート