久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

Redis基本數據結構是什么

144次閱讀
沒有評論

共計 2515 個字符,預計需要花費 7 分鐘才能閱讀完成。

自動寫代碼機器人,免費開通

這篇文章給大家分享的是有關 Redis 基本數據結構是什么的內容。丸趣 TV 小編覺得挺實用的,因此分享給大家做個參考。一起跟隨丸趣 TV 小編過來看看吧。

Redis 基礎數據結構

Redis 有 5 種基本數據結構:String(字符串)、list(列表)、set(集合)、hash(哈希)、zset(有序集合)

字符串 string

字符串類型是 Redis 的 value 最簡單的數據結構,類似與 Java 語言中的 ArrayList(數字列表),不過在 Redis 里 String 是一種動態字符串

Redis 里的 String 采用預分配冗余空間的方法

[圖片上傳失敗 …(image-724c60-1537973556456)]

set get

set keyname test
 get keyname
//key 如果存在就返回 0
 setnx keyname test
 exists keyname
 del keyname
// 批量設置
 mset key1 test1 key2 test2
// 批量獲取
 mget key1 key2
1) test1
2) test2

key 過期

// 設置 5s 后過期
 expire keyname 5
//setex 是 expire 和 set 的復合寫法
 setex keyname 5 test
//5s 后查詢
 get keyname
NULL

計數
ps:value 為數字的情況,可以使用 incr 和 incrby 計數

set num 10
//incr 默認加 1
 incr num
//incrby 后面要加上數字
 incrby num
ERR wrong number of arguments for incrby command
// 正確計數
 incrby num 5
16

列表 list

下面介紹一下 redis 的另外一種數據結構 list
前面我們說 redis 里的 string 類似與 java 語言里面的 ArrayList,則 redis 里的列表就類似與 LinkList(鏈表),鏈表一個特別就是更新和新增特別快,查詢索引慢。

為什么說類似與 linklist? 因為 redis 的 list 并非和 linklist 一樣,它其實是一種快速列表 (quicklist) 的形式,列表結構如圖:

[圖片上傳失敗 …(image-625c1b-1537973556457)]

這里要介紹一下壓縮列表 (ziplist) 了, 壓縮列表是什么?其實就是連續的內存空間

從圖可以看出快速列表其實就是由壓縮列表和雙向的指針組成,不過我們知道鏈表是兩個指針的,也就是 prev 和 next 執行,這就是快速列表和 linklist 的一個不同點了。

PS:然后 redis 設計時,為什么改成雙向指針?假如和鏈表一樣,用兩個指針 prev、next,同樣可以實現遍歷,不過雙向指針有一個很明顯的優點,就是占用的內存空間就相對少了。

隊列和棧

/* 隊列:First in first out */
// 加兩個 value
 rpush keynames key1 key2
 llen keynames
 lpop keynames
 lpop keynames
//rpush 會自動過期的
 rpop keynames
/* 棧:First in last out */
// 同樣,加兩個元素
 rpush keynames key1 key2
 rpop keynames
 rpop keynames
key1

字典 hash

Redis 的字典類似與 java 語言的 hashmap,也是無序的二維結構,也即數組加列表的結構。這是 redis 字典和 hashmap 類似的地。

然后也有不同,比如 rehash,刷新字典操作,hashmap 是全部熱 hash,當字典足夠多時,性能不是很好的,所以 redis 進行改造,采用漸進式的方式,為什么說是漸進式?因為 redis 不會全部 reload,而是保存新舊兩個字典,然后采用定時任務,將舊 hash 的數據搬到新的 hash,搬后在回收 hash 內存空間

字典 (hash) 的數組加鏈接結構:
[圖片上傳失敗 …(image-f5660f-1537973556457)]

hset keynames key1 test1 
 hset keynames key2 test2 
// 批量 set
 hmset keynames key1 test1 key2 test2 
// 獲取 key1 的值
 hget keynames key1
test1
// 獲取 hash 為 keynames 的長度
 hlen keynames
// 獲取全部
 hgetall keynames
1) key1
2) test1
3) key2
4) test2

集合 set

redis 的 set 和 java 語言中的 hashset 類型,是一種無序唯一的。

sadd keynames key1
//key1 已經加過了,所以返回 1
 sadd keynames key1 key2
 smembers keynames
1) key2
2) key1
// 查詢某個 key 是否存在,相當與 contains
 sismember keynames key1
// 相當于 count
 scard keynames
// 隨意彈出 key1
 spop keynames
key1

有序集合 zSet

有序集合是 redis 里比較有特色的,它類似于 SortedSet 和 HashMap 的組合。其內部實現是一種被稱作跳躍列表的數據結構。有序集合一方面它就是一個 set,所以每個元素都是唯一的,然后它可以給每個 value 賦值一個 score,再根據這個 score 進行排序,score 就相當于一個權限排序的標識。

ps:因為這個原因,有序集合可以被用來存儲粉絲信息,value 值是粉絲 id,score 是關注時間

//9.0 是 score 也就是權重
 zadd keyname 9.0 math
 zadd keyname 9.2 history
 zrange keyname 0 -1
1) history
2) math
 zrevrange keyname 0 -1
1) math
2) history
// 相當于 count()
 zcard keyname
獲取指定 key 的 score
 zscore keyname math
9

跳躍列表 TODO

感謝各位的閱讀!關于 Redis 基本數據結構是什么就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向 AI 問一下細節

丸趣 TV 網 – 提供最優質的資源集合!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-12-18發表,共計2515字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 长治市| 普安县| 大田县| 淮北市| 衡山县| 陇川县| 富川| 融水| 红河县| 迁安市| 潮州市| 台安县| 阿城市| 湘西| 霍州市| 射阳县| 枞阳县| 洪湖市| 嵩明县| 巢湖市| 临泽县| 东兰县| 资阳市| 广丰县| 石首市| 海阳市| 尼玛县| 吉隆县| 万年县| 晋宁县| 乌审旗| 滦平县| 栾城县| 通山县| 宁明县| 巴林左旗| 孙吴县| 鹤壁市| 青河县| 商都县| 阿勒泰市|