成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Redis源碼之Hash結構的實現

存儲 存儲軟件 Redis
hash和string類型到底有啥本質的區別?其實我們從源碼可以看出來, 對于string類型來說,string類型是基于RedisDb的,如果string的數量不斷的變多,就會導致dictht部分不斷的rehash。

[[426281]]

本文轉載自微信公眾號「程序員小飯」,作者飯米粒。轉載本文請聯系程序員小飯公眾號。

redis的hash的基本命令暫時先不多說,我們直接步入正文 在redis的hash結構中,存在這樣一種現象

  1. 127.0.0.1:6379> hset user:001 name john age 25 sex man 
  2. (integer) 3 
  3. 127.0.0.1:6379> hgetall user:001 
  4. 1) "name" 
  5. 2) "john" 
  6. 3) "age" 
  7. 4) "25" 
  8. 5) "sex" 
  9. 6) "man" 

我們先給user:001分別設置了name,age,sex屬性,然后通過hgetall獲取所有屬性,這一切看起來還比較正常 但是接下來

  1. 127.0.0.1:6379> hset user:002 name john age 25 sex man extra xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 
  2. (integer) 4 
  3. 127.0.0.1:6379> hgetall user:002 
  4. 1) "name" 
  5. 2) "john" 
  6. 3) "extra" 
  7. 4) "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 
  8. 5) "sex" 
  9. 6) "man" 
  10. 7) "age" 
  11. 8) "25" 

我們給user:002多設置了一個extra屬性,并且設置的值比較大,然后用hgetall獲取所有屬性的時候發現返回的順序不是按照我們設置的時候的屬性的順序了,這是為什么呢?

其實主要原因是:hash數據結構底層實現為一個字典(dict),也是redisDb用來存儲k-v的數據結構,當數據量比較小,或者單個元素比較小的時候,底層用ziplist存儲,數據大小和元素數量閾值可以通過如下參數設置

hash-max-ziplist-entries 512 //ziplist元素個數超過512,將改為hashtable編碼 hash-max-ziplist-value 64 //單個元素大小超過64byte時,將改為hashtable編碼 對于上面的例子,主要是因為單個元素大小超過了64byte,所以改為了hashtable編碼,導致了hgetall獲取屬性的時候和設置的順序不一樣

壓縮表的結構

其實很多同學也有一個疑問,hash和string類型到底有啥本質的區別?其實我們從源碼可以看出來, 對于string類型來說,string類型是基于RedisDb的,如果string的數量不斷的變多,就會導致dictht部分不斷的rehash

 

而對于hash類型的來說,hash不存在dictht不斷rehash的問題

但是其實也是各有利弊,比如hash就沒法對某個key設置過期時間,而且redis中有一個很大的忌諱,就是不要讓某個key過大,容易阻塞,所以個人還是更推薦string的方式

 

責任編輯:武曉燕 來源: 程序員小飯
相關推薦

2017-06-07 14:58:39

Redis源碼學習Redis事務

2023-05-29 08:31:48

Redis散列表

2024-01-19 12:48:00

Redis存儲數據庫

2022-02-25 08:55:19

BitMapRedis面試題

2019-10-29 08:59:16

Redis底層數據

2022-02-10 09:04:18

RediSDS數據結構

2024-11-04 06:00:00

redis雙向鏈表

2020-05-27 20:45:31

Redis底層數據

2021-09-12 07:30:10

配置

2022-10-17 08:49:47

2021-08-29 07:41:48

數據HashMap底層

2020-07-02 07:52:11

RedisHash映射

2022-07-19 20:04:31

NAPI模塊鴻蒙

2020-03-20 10:47:51

Redis數據庫字符串

2020-05-26 18:50:46

JVMAttachJava

2011-07-11 15:03:36

MySQL索引數據結構

2024-10-18 09:55:50

RedisHash數據

2023-06-10 23:09:40

Redis場景內存

2022-12-09 07:57:15

2010-07-23 14:41:30

Perl Hash
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品激情在线 | 91.色 | 亚洲有码转帖 | 韩国精品一区二区三区 | 午夜电影合集 | 日韩欧美三区 | 日韩av一区二区在线观看 | 欧美精三区欧美精三区 | 国产 欧美 日韩 一区 | 国产欧美一区二区三区日本久久久 | 国产成人在线视频播放 | 亚洲综合字幕 | 爱爱视频在线观看 | avtt国产 | 亚洲高清视频一区 | 99精品福利视频 | 成人自拍视频网站 | 男女免费观看在线爽爽爽视频 | 国产精品久久在线观看 | 成人av影院| a级大片免费观看 | 在线观看中文字幕 | 一级片毛片 | 欧美日韩免费一区二区三区 | 懂色av蜜桃av | 一区二区av | 国产精品一区二区在线免费观看 | 国产成人99久久亚洲综合精品 | 国产视频三级 | 欧美性网 | 日本成人毛片 | 亚洲成人一区二区 | 午夜精品一区二区三区在线观看 | av超碰 | 91精品国产91久久久久久最新 | 国产区第一页 | 国产精品久久一区二区三区 | 日日摸日日碰夜夜爽亚洲精品蜜乳 | 国产视频一二三区 | www.啪啪.com| 男人av的天堂 |