この記事では、Redis データ構造の二重リンク リストを理解し、二重リンク リストの使用方法を簡単に紹介します。
Redis データ型の list list では、データの追加と削除によく使用されるコマンドは、lpush、rpush、lpop、rpop です。 l は左側を意味し、r は右側を意味します。左側と右側で操作を追加および削除できます。これは、これが双方向のデータ構造であり、リストのデータ構造が二重リンクリストであることを示します、Java の LinekdList に似ています。 [関連する推奨事項: Redis ビデオ チュートリアル ]
リンク リストは、効率的なノード再配置機能と順次ノード アクセス方法を提供します。リンク リストのデータは、pre および next ポインターを変更することで変更できます。ノードの。
C 言語には組み込みのリンク リスト データ構造がないため、Redis は独自のリンク リスト構造を構築します。
リンク リストはリンク リストとリンク リスト ノードで構成され、各リンク リスト ノードは adlist で表されます。 h/listNode 構造 :
typedef struct listNode { //前置节点 struct listNode *prev; //后置节点 struct listNode *next; // 节点值 void *value; } listNode;
タイトルに示すように、複数の listNode は prev ポインターと next ポインターを介して二重リンク リストを形成できます。 listNodes はリンク リストを形成できますが、管理を容易にするために、
adlist.h/listを使用してリンク リストを管理します。リストの構造は次のとおりです:
typedef struct list { // 列表头结点 listNode *head; // 列表尾结构 listNode *tail; // 节点值复制函数 void *(*dup)(void *ptr); // 节点值释放函数 void (*free)(void *ptr); // 节点值对比函数 int (*match)(void *ptr, void *key); // 列表节点数量 unsigned long len; } list;list 構造は、ヘッドポインタhead、テールポインタtail、およびリンクリストのノード番号計算len。次の図は、リスト構造と 3 つの listNode ノードで構成されるリンク リストを示しています。 #Redis リンク リスト実装の特徴は次のように要約されます。
# 双方向: リンク リスト ノードには前ポインタと次ポインタがあり、各データはポインタを介して取得できます。
リンク リストの長さをすばやく計算します: len 属性を使用してリストの長さを計算しますリスト構造内での時間計算量は O(1)
ポリモーフィズム: リンク リスト ノードは void* ポインターを使用してノードを保存するため、リンク リストはさまざまなタイプの値の保存をサポートします以上がRedis の二重リンクリストについて詳しく話しましょうの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。