検索
ホームページデータベースRedisRedis のいくつかの一般的な基本オブジェクトの紹介

Redis のいくつかの一般的な基本オブジェクトの紹介

1: はじめに

Redis には、文字列、ハッシュ、リスト、セット、zset など、一般的に使用される基本オブジェクトがいくつかあります。以下にそれらを紹介します。基礎となる実装データ構造と一般的なアプリケーションのシナリオと特性。

2: redisobject

ソース コードの場所は、server.h ファイルの 605 行目から始まります

typedef struct redisObject {
    unsigned type:4;
    unsigned encoding:4;
    unsigned lru:LRU_BITS;
    int refcount;
    void *ptr;
} robj;

2.1 type

実際のオブジェクト タイプredisでは0~4の5種類のステートメントに分かれています。ファイル サーバーの 466 行目にあります。h

#define OBJ_STRING 0    /* String object. */
#define OBJ_LIST 1      /* List object. */
#define OBJ_SET 2       /* Set object. */
#define OBJ_ZSET 3      /* Sorted set object. */
#define OBJ_HASH 4      /* Hash object. */

2.2 エンコーディング

Redis の 5 つのオブジェクト string、list、hash、set、zset で使用される 8 つのエンコーディング形式。各エンコーディングは、データ構造

#define OBJ_ENCODING_RAW 0    
#define OBJ_ENCODING_INT 1    
#define OBJ_ENCODING_HT 2      
#define OBJ_ENCODING_ZIPLIST 5 
#define OBJ_ENCODING_INTSET 6  
#define OBJ_ENCODING_SKIPLIST 7
#define OBJ_ENCODING_EMBSTR 8 
#define OBJ_ENCODING_QUICKLIST 9

2.3 refcount

Redis でのメモリのリサイクルは、比較的単純な参照カウント方式を使用します。各オブジェクト参照には refcount 1 があります。参照カウントが 0 に減少すると、メモリがリサイクルされます。

3: 文字列

3.1 一般的なシナリオ

分散ロック: 分散ロックの実装の基本は、文字列コマンド setnx を使用することです。 ユーザー情報: 多くの場合、ユーザー情報はシリアル化されます。キャッシュのために redis に保存されますが、ここではハッシュを考慮できます。ユーザーデータ情報の一部のみを使用する場合、シリアル化と逆シリアル化にも費用がかかります。

3.2 エンコード形式

int: 文字列がすべて数値の場合、int エンコードが使用されます。これは真のバイナリ データ ストレージです。メモリ アドレスは連続しており、メモリは 1 回だけ適用されます。文字列の長さは 44raw 未満: 最下位層は sds によって実装されます。embstr と比較すると、sds の作成と redisobject の作成が 2 回実装される点が異なります。

3.3 共通コマンド

# 存储
set key value

# 互斥存储
# 已存在的key再次存入数据不会更改缓存
setnx key value

# 过期存储,单位秒
# 设定key过期时间,到期自动删除
setex key seconds value

# 过期存储,单位毫秒
psetex key milliseconds value

# 批量存储
mset key value [key value ...]

# 取值
get key

# 批量取值
mget key [key ...]

# 追加
append key value

# 长度
strlen key

# 自增,只能是int编码的字符串
incr key

# 自定义步长自增
incrby key increment

# 自减,只能是int编码的字符串
# 这个可以减到负数,秒杀扣减库存啥的想想能不能用这个命令
decr key

# 自定义步长自减
decrby key increment

4: list

4.1 一般的なシナリオ

メッセージ キュー: さまざまな MQ や Kafka はすでに非常に成熟しているため、一般的にはあまり使用されません。さらに、redis によって実装されたメッセージ キューは、データのランキング計算の安全性を保証しません。これは定期的な計算と更新にのみ適しており、ランキングのリアルタイム更新には使用できません。たとえば、Meituan は、地域内の販売者のランキングのための「いいね!」のリストを毎日計算します。WeChat の「いいね!」など (方法はわかりません、推測します)

4.2 コーディング形式

クイックリスト: バージョンでリンクリストとジップリストを使用する前のクイックリスト。現在使用されているクイックリストは 2 つの組み合わせです。詳細については、「Redis (1) - Redis のデータ構造の簡単な説明」を参照してください。

4.3 関連パラメーターの構成

構成パラメーターの場所これは、redis.con ファイルの行 1083 と 1099 にあります。

list-max-ziplist-size: 単一のジップリスト サイズを構成します。list-compress- Depth: LZF 圧縮アルゴリズムの開始ノードを構成します。

4.4 一般的なコマンド

# 创建list并压入节点
# 压入节点位于链表头
lpush key value

# 压入节点位于链表尾
rpush key value

# 弹出list头节点
lpop key

# 弹出list尾节点
rpop key

# 删除节点
# count > 0 从左开始搜索删除count数量的value
# count < 0 从右开始搜索删除|count|数量的value
# count = 0 删除list中所有value
lrem key count value

# 范围保留
# -1 表示列表最后一个元素
# -2 表示倒数第二个,以此类推
ltrim key start stop

# 计算长度
llen key

# 索引查询节点
# index < 0 从右开始搜索
# index > 0 从左开始搜索
lindex key index

# 范围查询
# stop = -1 表示所有
lrange key start stop

# 阻塞弹出
# 队列中没有节点时会一直等待
# 多个key时表示挨着顺序依次检查,知道找到非空列表为止
# timeout可以设置等待时间,0表示一直等待
blpop key [key...] timeout
brpop key [key...] timeout

五:ハッシュ

5.1 一般的なシナリオ

商品オブジェクトとユーザー オブジェクト。このシナリオは検証によって処理する必要があります。製品オブジェクトとユーザー オブジェクトの情報が毎回完全に必要な場合は、文字列を保存することをお勧めします。ただし、情報の一部のみが使用される場合は、ハッシュ構造の SKU とこのシナリオでは、ハッシュの方が適切です。ハッシュ構造には特定の製品のすべての SKU が保存されます

5.2 エンコード形式

ziplist: ziplist を使用してハッシュ構造を保存する場合、データは 2 つの隣接する ziplistEntry を使用してフィールドと値ハッシュテーブルを保存します。データは保存されます。パラメータ制限を超えると、基礎となる構造は保存用に ziplist から dict に変換されます。

5.3 関連パラメータの設定

hash-max-ziplist-entries: デフォルトは次のとおりです。 512、つまりジップリスト ノードは 1024 です。ノード数が制限を超えると、基になるデータ構造は dicthash-max-ziplist-value: デフォルト 64 に変換されます。制限を超える長さの値がハッシュに挿入されると、基になるデータ構造は dict# に変換されます。

## (学習ビデオ共有:

redis ビデオ チュートリアル)

5.4 一般的なコマンド

# 存储
hset key field value 

# 不允许更改存储
# 若field值存在则本次存储不会覆盖原有value值
hsetnx key field value

# 批量存储
hmset key field value [field value ...]

# 查询
hget key field

# 批量查询
hmget key field [field ...]

# 全量查询
hgetall key 

# 全量查询field值
hkeys key

# 全量查询value值
hvals key

# 删除field
hdel key field [field ...]

# 计算键值对数量
hlen key
# field存在判断
hexists key field

# 增量式迭代
# cursor表示迭代开始的游标
# count 表示迭代返回数据数量
# pattern 表示正则匹配结果限制
hscan key cursor [Count count] [Match pattern]

6: Set

6.1 一般的なシナリオ

推奨: sinter コマンドを使用して交差を計算します。たとえば、Meituan が近くのテイクアウトを推奨する場合、テイクアウトの記録と近くの販売店に基づいて交差を計算し、セキュリティに関するヒントをプッシュできます。WeChat グループのメンバーは、セットに保存され、ユーザーの友達もセットに保存されます。ユーザーがグループ チャットに参加するとき、友達ではないユーザーに安全に注意するよう通知できます。

6.2 コーディング形式

intset: 整数コレクション。すべての値が含まれるデータを保存するために使用されます。セットコレクションには整数が含まれています要素が制限を超えると、ハッシュテーブル エンコーディングに変換されます

6.4 よく使用されるコマンド

# 存储
sadd member [member ...]

# 弹出元素并返回
spop key count

# 查询所有元素
smembers key [count]

# 计算元素数量
scard key 

# 删除指定元素
srem key member [member ...]

# 判断元素存在
sismember key member

# 计算给定集合与后续集合差集
# 返回计算结果
sdiff key [key ...]

# 计算给定集合与后续集合差集
# 存储结果到destination并返回
sdiffstore destination key [key ...]

# 计算给定集合与后续集合交集
# 返回计算结果
sinter key [key ...]

# 计算给定集合与后续集合差集
# 存储结果到destination并返回
sinterstore destination key [key ...]

# 计算给定集合与后续集合差集
# 返回计算结果
sunion key [key ...]

# 计算给定集合与后续集合差集
# 存储结果到destination并返回
sunionstore destination key [key ...]

7: Zset

7.1 よく使用されるシナリオ

ランキング リスト: Meituan が売上ランキング リストを作成したい場合、店舗の注文を使用してスコアを作成できます。このクエリの結果は、順序付けされた重みキューです。スコアが優先順位として使用されるため、取り出されたデータの重みは実行優先度が最も高い遅延タスク: タスクの実行開始時刻としてスコアを使用し、値を取得した時点で判定可能。

7.2 エンコード形式

ziplist: ハッシュに類似、どちらもスコアとメンバーを保存するために 2 つの隣接するノードを使用しますskiplist: スキップ リスト構造、Redis (1) -- Redis データ構造の簡単な説明

7.3 関連パラメーターの構成

zset- max-ziplist-entries: デフォルト値は 128、最大 128 の ziplist ストレージ要素を指定します。超えた場合は、skiplistzset-max-ziplist-value に変換されます: デフォルト値は 64 で、保存されるデータの最大値は 64 バイトです。超えた場合は、skiplist

7.4 に変換されます。一般的なコマンド

# 存储
# xx 表示当zset中存在本次插入的member时才存储
# nx 表示当zset中不存在本次插入的member时才存储
zadd key [nx|xx] score member [score member ...]

# 查询排序指定[start,stop]范围内元素
# withscores 查询结果顺带返回元素分数
zrange key start stop [withscores]

# 查询指定元素分数
zscore key member

# 元素数量统计
zcard key

# 返回score位于[min,max]区间的元素数量
zcount key min max 

# 对指定元素分数增加incrment值
zincrby key incrment member

# 返回指定分数区间范围内元素
# withscores 返回时携带分数一起返回
# limit offset count表示跳过offset数量结果再返回count数量结果
zrangebyscore key min max [withscores] [limit offset count]

# 倒序返回指定分数区间范围内元素
# withscores 返回时携带分数一起返回
# limit offset count表示跳过offset数量结果再返回count数量结果
zrevrangebyscore key max min [withrescores] [limit offset count]

# 删除指定分数范围[min,max]内元素
zremrangebyscore key min max

# 移除指定元素
zrem key member

関連する推奨事項:

redis データベース チュートリアル

以上がRedis のいくつかの一般的な基本オブジェクトの紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事は掘金で複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
Redis:データストアとサービスとしてどのように機能するかRedis:データストアとサービスとしてどのように機能するかApr 24, 2025 am 12:08 AM

redisactsassassadatastoreandaservice.1)asadatastore、itusesin memorystorage for fastorations、supporting variousdatastructureSlike-key-valuepairsandsortedsets.2)asaservice、iteasruascruascriptingrupting criptingforceptingpurplecomplecomplecprexoperations

Redis vs.その他のデータベース:比較分析Redis vs.その他のデータベース:比較分析Apr 23, 2025 am 12:16 AM

他のデータベースと比較して、Redisには次の独自の利点があります。1)非常に速い速度、および読み取り操作は通常、マイクロ秒レベルにあります。 2)豊富なデータ構造と操作をサポートします。 3)キャッシュ、カウンター、公開サブスクリプションなどの柔軟な使用シナリオ。 Redisまたはその他のデータベースを選択する場合、特定のニーズとシナリオに依存します。 Redisは、高性能および低遅延のアプリケーションでうまく機能します。

Redisの役割:データストレージと管理機能の調査Redisの役割:データストレージと管理機能の調査Apr 22, 2025 am 12:10 AM

Redisは、データストレージと管理において重要な役割を果たしており、複数のデータ構造と持続性メカニズムを通じて最新のアプリケーションの中核となっています。 1)Redisは、文字列、リスト、コレクション、注文されたコレクション、ハッシュテーブルなどのデータ構造をサポートし、キャッシュや複雑なビジネスロジックに適しています。 2)RDBとAOFの2つの持続方法を通じて、Redisは信頼できるストレージとデータの迅速な回復を保証します。

Redis:NOSQLの概念の理解Redis:NOSQLの概念の理解Apr 21, 2025 am 12:04 AM

Redisは、大規模なデータの効率的なストレージとアクセスに適したNOSQLデータベースです。 1.Redisは、複数のデータ構造をサポートするオープンソースメモリデータ構造ストレージシステムです。 2.キャッシュ、セッション管理などに適した、非常に速い読み取り速度と書き込み速度を提供します。 4.使用例には、基本的なキー値ペア操作と高度なコレクション重複排除関数が含まれます。 5.一般的なエラーには、接続の問題、データ型の不一致、メモリオーバーフローが含まれるため、デバッグに注意する必要があります。 6.パフォーマンス最適化の提案には、適切なデータ構造の選択とメモリ排除戦略の設定が含まれます。

Redis:実際のユースケースと例Redis:実際のユースケースと例Apr 20, 2025 am 12:06 AM

現実世界でのRedisのアプリケーションには、1。キャッシュシステムとして、データベースクエリを加速し、2。Webアプリケーションのセッションデータを保存するには、3。リアルタイムランキングを実装する4。メッセージ配信をメッセージキューとして簡素化する。 Redisの汎用性と高性能により、これらのシナリオで輝きます。

Redis:その機能と機能の調査Redis:その機能と機能の調査Apr 19, 2025 am 12:04 AM

Redisは、高速、汎用性、豊富なデータ構造のために際立っています。 1)Redisは、文字列、リスト、コレクション、ハッシュなどのデータ構造をサポートし、コレクションを注文します。 2)メモリを介してデータを保存し、RDBとAOFの持続性をサポートします。 3)Redis 6.0から始めて、マルチスレッドI/O操作が導入されました。これにより、高い並行性シナリオでパフォーマンスが向上しました。

RedisはSQLまたはNOSQLデータベースですか?答えが説明しましたRedisはSQLまたはNOSQLデータベースですか?答えが説明しましたApr 18, 2025 am 12:11 AM

redisisclassifiedsaNosqldatabasebasesakey-valuedataModelinsteaded ofthetraditionaldatabasemodel.itoffersspeedand andffficability、makingidealforreal-timeaplications andcaching、butmaynotbesbesutable fors cenariois requiring datientiantientioniity

Redis:アプリケーションのパフォーマンスとスケーラビリティの向上Redis:アプリケーションのパフォーマンスとスケーラビリティの向上Apr 17, 2025 am 12:16 AM

Redisは、データをキャッシュし、分散ロックとデータの持続性を実装することにより、アプリケーションのパフォーマンスとスケーラビリティを向上させます。 1)キャッシュデータ:Redisを使用して頻繁にアクセスしたデータをキャッシュして、データアクセス速度を向上させます。 2)分散ロック:Redisを使用して分散ロックを実装して、分散環境での操作のセキュリティを確保します。 3)データの持続性:データの損失を防ぐために、RDBおよびAOFメカニズムを介してデータセキュリティを確保します。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)