成人免费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面試題

2022-02-10 09:04:18

RediSDS數據結構

2019-10-29 08:59:16

Redis底層數據

2020-05-27 20:45:31

Redis底層數據

2024-11-04 06:00:00

redis雙向鏈表

2021-09-12 07:30:10

配置

2022-10-17 08:49:47

2020-07-02 07:52:11

RedisHash映射

2021-08-29 07:41:48

數據HashMap底層

2022-07-19 20:04:31

NAPI模塊鴻蒙

2020-05-26 18:50:46

JVMAttachJava

2020-03-20 10:47:51

Redis數據庫字符串

2011-07-11 15:03:36

MySQL索引數據結構

2010-07-02 10:39:20

AdventNet S

2024-10-18 09:55:50

RedisHash數據

2023-06-10 23:09:40

Redis場景內存

2019-09-30 08:23:47

Hash表哈希表Java
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 麻豆av电影网 | 天天草视频 | 国产激情91久久精品导航 | 天天射色综合 | 中文字幕第十五页 | 亚洲国产欧美精品 | 久久久久久久久久一区二区 | 久久久99精品免费观看 | 女人av| 在线亚洲一区二区 | 成人精品鲁一区一区二区 | 成人国产在线视频 | 国产精品99久久久久久动医院 | 国产三级一区二区 | 国产精品午夜电影 | 日韩中文av在线 | 欧美成人a | 中日韩av| 国产视频一区二区 | 亚洲成人动漫在线观看 | 91国产精品在线 | 亚洲国产一区二区三区 | 亚洲精品视频在线 | 欧美一a| 毛片免费观看视频 | 久久亚洲欧美日韩精品专区 | 国产一级视频在线播放 | 欧美精品一 | 国产精品久久久久久久久婷婷 | 日韩视频在线一区 | 久久久久国产 | 91视视频在线观看入口直接观看 | 欧美精品一区二区三区在线四季 | 国产乱码精品一区二区三区中文 | 好姑娘影视在线观看高清 | 毛片一区二区三区 | 天堂av影院| 国产在线拍偷自揄拍视频 | 亚洲国产精品va在线看黑人 | 亚洲国产精品第一区二区 | 成人一区二区三区 |