この記事では、Redis の 5 つの基本データ型 (文字列文字列、リスト リスト、セット コレクション、ハッシュ ハッシュ、Zset 順序付きコレクション) について詳しく説明します。お役に立てば幸いです。
Redis データ構造の概要
Redis の場合、すべてのキーは文字列です。基本的なデータ構造について話すときは、値を保存するためのデータ型について説明します。これには、主に String、List、Set、Zset、Hash の 5 つの一般的なデータ型が含まれます。 [関連する推奨事項: Redis ビデオ チュートリアル ]
##構造タイプ | に格納される値構造体 | 構造体の読み取りおよび書き込み機能 |
文字列 string
| は文字列または整数または浮動小数点数 | 文字列全体または文字列の一部を操作します。整数または浮動小数点数に対してインクリメントまたはデクリメント操作を実行します。 |
リスト リスト
| リンク リスト。リンク リストの各ノードには文字列が含まれます。 | リンク リストの両端でプッシュおよびポップ操作を実行し、単一または複数の要素を読み取ります。値に応じて要素を検索または削除します。 |
セット コレクション
| 文字列を含む順序なしのコレクション | 文字列のコレクション、基本的な方法には、追加、取得、削除の有無の確認が含まれ、交差、和集合、差分の計算なども含まれます。 キーと値のペアを含む順序なしのハッシュ テーブル |
単一要素を追加、取得、削除するためのメソッドが含まれています
#Zset 順序付きセット |
| キーと値のペアの保存に使用されるハッシュと同じです。 | 文字列メンバーと浮動小数点スコアの間の順序付けされたマッピング。要素の順序はスコアのサイズによって決まります。包含方法は単一要素の追加、取得、削除、およびスコア範囲またはメンバーに基づく要素の取得
| 基本的なデータ構造の詳細な説明 |
## String |
String は Redis の最も基本的なデータ型で、1 つのキーが 1 つの値に対応します。
String 型はバイナリ セーフです。つまり、redis の文字列にはあらゆるデータを含めることができます。数値、文字列、jpg画像、シリアル化されたオブジェクトなど。
コマンドの使用法
コマンド
#GET |
| GET name | を使用して、指定されたキーに格納されている値を取得します。
#SET
指定されたキーに格納されている値を設定します
SET name value |
|
DEL |
値を削除します指定されたキーに格納されています
DEL 名 |
|
INCR |
キーに格納されている値を 1
INCR キー # だけ増やします |
| ##DECR | キーに格納されている値を 1 ずつ減らします
#DECR キー
|
INCRBY | key に格納されている値に整数を加算します |
INCRBY key amount
|
DECRBY |
に格納されている値から整数を減算しますキー |
DECRBYキーの量
|
127.0.0.1:6379> set hello world
OK
127.0.0.1:6379> get hello
"world"
127.0.0.1:6379> del hello
(integer) 1
127.0.0.1:6379> get hello
(nil)
127.0.0.1:6379> get counter
"2"
127.0.0.1:6379> incr counter
(integer) 3
127.0.0.1:6379> get counter
"3"
127.0.0.1:6379> incrby counter 100
(integer) 103
127.0.0.1:6379> get counter
"103"
127.0.0.1:6379> decr counter
(integer) 102
127.0.0.1:6379> get counter
"102" - 実際のシナリオ
-
キャッシュ: 従来の使用シナリオ、共通情報、文字列、画像、ビデオ、その他の情報は Redis に配置され、Redis はキャッシュ層として機能し、mysql は永続化層として機能して、mysql の読み取りおよび書き込みの負荷を軽減します。
-
Counter: redis はシングルスレッド モデルです。1 つのコマンドは、次のコマンドが実行されるまで実行されません。同時に、データを他のデータ ソースに転送できます。ワンステップ。
-
session: 一般的なソリューションは、セッション共有を実装する Spring セッション Redis です。
List list
Redis の List は実際にはリンク リストです (Redis は List を実装するために両端リンク リストを使用します)。
List 構造を使用すると、最新のメッセージ キュー機能 (Sina Weibo の TimeLine など) を簡単に実装できます。 List のもう 1 つのアプリケーションはメッセージ キューで、List の PUSH 操作を使用してタスクを List に保存し、ワーカー スレッドが POP 操作を使用して実行するタスクを取り出します。
コマンド |
簡単な説明 |
|
RPUSH |
を使用して、指定された値をリストの右端にプッシュします。 |
RPUSH キーの値 |
LPUSH |
指定された値をリストの左端にプッシュします |
LPUSH キーの値 |
RPOP |
リストの右端から値をポップし、ポップされた値を返します | #RPOP キー |
LPOP | 値をポップしますリストの左端から順に取得して返します。 ポップされた値を返します。 #LPOP key |
|
LRANGE
リスト内のすべての値を取得します。指定された範囲 |
LRANGE key 0 -1 |
|
LINDEX
インデックスによってリスト内の要素を取得します。負の添え字を使用することもできます。-1 はリストの最後の要素を表し、-2 はリストの最後から 2 番目の要素を表します。 |
LINEX キー インデックス |
|
リスト使用のヒント実際のシナリオWeibo TimeLine- : 誰かが Weibo に投稿し、lpush を使用してタイムラインに追加します。新しいリスト情報が表示されます。
メッセージ キュー
セット コレクションRedis のセットはString 型の順序付けされていないコレクション。セットのメンバーは一意であるため、セット内に重複したデータが存在することはできません。
Redis のコレクションはハッシュ テーブルを通じて実装されるため、追加、削除、検索の複雑さは O(1) です。
コマンド
簡単な説明 |
|
|
#SADD
| SADD キー値 | # を使用して、1 つ以上のメンバーをコレクションに追加します。 ##SCARD |
セット内のメンバーの数を取得します#SCARD キー |
| SMEMBER | すべてのメンバーを返しますセット内
SMEMBER キー メンバー |
| SISMEMBER | メンバー要素がセット キーのメンバーであるかどうかを判断します
SISMEMBERキーメンバー |
|
| その他の set 操作については、こちらを参照してください。
https://www.runoob.com/redis/redis-sets。 html
コマンド実行
127.0.0.1:6379> sadd myset ycf ycf1 xiao ycf
(integer) 3
127.0.0.1:6379> smember myset
1) "xiao"
2) "ycf1"
3) "ycf"
127.0.0.1:6379> sismember myset ycf
(integer) 1 実際のシナリオ
タグ (タグ)、ユーザーにタグを追加するか、ユーザーがメッセージにタグを追加すると、同じタグまたは類似のタグを持つユーザーがフォローするものや人を推奨できるようになります。
- いいね、嫌い、収集など をセットに配置して
ハッシュ ハッシュ
Redis ハッシュは文字列型のフィールドと値のマッピング テーブルであり、オブジェクトの保存に特に適しています。
#コマンドの使用法
使用
|
##HSET |
キーと値のペアを追加 | ##HSET ハッシュ キー サブキー 1 値 1
HGET | 指定されたハッシュ キーの値を取得します | HGET ハッシュ キー key1 |
HGETALL | ハッシュに含まれるすべてのキーと値のペアを取得します | HGETALL hash-key |
HDEL | 指定されたキーがハッシュに存在する場合を削除し、このキーを削除します | HDEL ハッシュキー サブキー1 |
127.0.0.1:6379> hset user name1 ycf
(integer) 1
127.0.0.1:6379> hset user email1 ycf@163.com
(integer) 1
127.0.0.1:6379> hgetall user
1) "name1"
2) "ycf"
3) "email1"
4) "ycf@163.com"
127.0.0.1:6379> hget user user
(nil)
127.0.0.1:6379> hget user name1
"ycf"
127.0.0.1:6379> hset user name2 xiaoycf
(integer) 1
127.0.0.1:6379> hset user email2 xiaoycf@163.com
(integer) 1
127.0.0.1:6379> hgetall user
1) "name1"
2) "ycf"
3) "email1"
4) "ycf@163.com"
5) "name2"
6) "xiaoycf"
7) "email2"
8) "xiaoycf@163.com" - 实战场景
-
缓存: 能直观,相比string更节省空间,的维护缓存信息,如用户信息,视频信息等。
Zset有序集合
Redis 有序集合和集合一样也是 string 类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个 double 类型的分数。redis 正是通过分数来为集合中的成员进行从小到大的排序。
有序集合的成员是唯一的,但分数(score)却可以重复。集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。
命令 |
简述 |
使用 |
ZADD |
将一个带有给定分值的成员添加到哦有序集合里面 |
ZADD zset-key 178 member1 |
ZRANGE |
根据元素在有序集合中所处的位置,从有序集合中获取多个元素 |
ZRANGE zset-key 0-1 withccores |
ZREM |
如果给定元素成员存在于有序集合中,那么就移除这个元素 |
ZREM zset-key member1 |
更多命令请参考这里
https://www.runoob.com/redis/redis-sorted-sets.html
127.0.0.1:6379> zadd myscoreset 100 ycf 90 xiaoycf
(integer) 2
127.0.0.1:6379> ZRANGE myscoreset 0 -1
1) "xiaoycf"
2) "ycf"
127.0.0.1:6379> ZSCORE myscoreset ycf
"100" - 实战场景
-
排行榜:有序集合经典使用场景。例如小说视频等网站需要对用户上传的小说视频做排行榜,榜单可以按照用户关注数,更新时间,字数等打分,做排行。
更多编程相关知识,请访问:编程视频!!
|
以上がRedis の 5 つの基本データ型について詳しく説明します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。