Redis資料型別之字典

2022-04-08 19:52:31 字數 1148 閱讀 7023

標籤(空格分隔): redis

字典又稱符號表(symbol table),關聯陣列(associative array),或者對映(map)。是用於儲存鍵值對的一種抽象資料結構。

字典的key是唯一的,對鍵值對的操作基本都是基於key來操作的。redis中的資料庫底層是使用字典來實現的,對於資料庫的增刪改查都是基於字典來實現的。redis的雜湊鍵也是基於字典來實現的。

具體的實現是在src下的dict.h和dict.c檔案

雜湊表結點

/** 雜湊表節點

*/typedef struct dictentry v;

// 指向下個雜湊表節點,形成鍊錶

struct dictentry *next;

} dictentry;雜湊表的資料結構

/** 雜湊表

*/typedef struct dictht dictht;字典的資料結構

/** 字典

*/typedef struct dict dict;其中的dicttype是乙個struct

/** 字典型別特定函式

*/typedef struct dicttype dicttype;// 雜湊表

dictht ht[2];這裡的ht是乙個包含兩項資料的陣列,陣列的每一項都是乙個dictht雜湊表,一般情況下,只使用ht[0],ht[1]是在rehash的情況下使用。

當需要向字典新增一對鍵值對時,程式首先根據字典的key計算出hash值和索引值,然後根據索引值,將包含新鍵值對的雜湊表結點放到雜湊陣列指定的索引位置上。

redis計算hash值和索引的方法如下

// 計算給定鍵的雜湊值

#define dicthashkey(d, key) (d)->type->hashfunction(key)

// 計算索引值

idx = h & d->ht[table].sizemask;當兩個或者兩個以上的鍵被分配到雜湊陣列的同乙個索引上,被稱為雜湊衝突。

雜湊衝突的解決方法:

開放定址法(包括線性探查法、線性補償探測法、隨機探測) 拉鍊法,又稱鏈位址法

redis如何解決雜湊衝突?

鏈位址法,每個雜湊表結點都有乙個next指標域,多個雜湊表結點可以構成乙個單鏈表,被分配到同乙個索引的鍵可以使用這個next指標連起來,從而解決雜湊衝突。

redis 資料型別之字典

1 hset hset name,key,value 引數 name,redis的name key,name對應的hash中的key value,name對應的hash中的value 2 hmset 在name對應的hash中批量設定鍵值對 引數 name,redis的name 3 hget hge...

資料型別之字典

一.字典的作用 作用 字典是用來記錄多個值,使用key來對應值 列表和元組都是索引 位置來對應值 key通常字串型別,對value具有描述性功能,不是由個數來表述的 二.字典的定義 定義 內用逗號分隔開多元素,每乙個元素都是key value的形式,其中value可以是任意型別,則key必須是不可變...

Redis之資料型別

與mysql資料庫支援的多種資料型別相比,redis資料庫支援的資料型別要少上許多。redis資料庫支援五種資料型別 string 字串 hash 雜湊 list 列表 set 集合 及zset sorted set 有序集合 string 是 redis 最基本的型別,你可以理解成與 memcac...