亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

redis hash 操作 需要實現 hashcode 嗎?

redis hash 操作 需要實現 hashcode 嗎?

繁華開滿天機 2018-11-16 19:14:58
redis hash 操作 需要實現 hashcode 嗎
查看完整描述

1 回答

?
揚帆大魚

TA貢獻1799條經驗 獲得超9個贊

redis的字典底層實現為hash表、

hash表由dict.h/dictht結構定義:

[cpp] view plain copy
typedef struts dictht{
//哈希表數組
dictEntry **table;
//哈希表數組
unsigned long size;
//哈希表大小掩碼,用于計算索引值
//總是等于size-1
unsigned long sizemask;
//該hash表已有節點的數量
unsigned long used;
}dictth;
table屬性是一個數組,每個元素指向一個 hash表節點的指針。

hash表節點的由dict.h/dictEntry結構定義

[cpp] view plain copy
<pre name="code" class="cpp">typedef struts dictEntry{
//鍵
void *key;
//值
union{
void *val;
uint64_tu64;
int64_ts64;
}
//指向下個hash表節點,形成鏈表
strut dictEntry *next;
}dictEntry;

鍵值對的值可以是指針,uint64_t整數,或者是int64_t整數。

next屬性的作用是:如果多個鍵值對的hash值相同,它們會成為一個單向鏈表,來解決沖突。

redis中的字典由 dict.h/dict結構來定義

[cpp] view plain copy
typedef struts dict{
<pre name="code" class="cpp"><pre name="code" class="cpp"> //類型特定函數
dictType *type;
//私有數據
void *private;
//hash表
dictth ht[2]
//rehash索引
//當rehash不再進行的時候,值為-1
int trehashidx;
}dict;

type屬性和private屬性針對不同類型的鍵值對,用來創建多態字典。

dictType結構保存了一些用于操作鍵值對的函數,redis會為用途不同的字典設置不同的函數。
private保存了傳給函數的 參數。
ht屬性保存了兩個hash表,通常情況下只使用一個hash表,另一個hash表用作復制。

查看完整回答
反對 回復 2018-12-13
  • 1 回答
  • 0 關注
  • 696 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號