亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Redis數(shù)據(jù)結構面試高頻問題解析

 更新時間:2023年06月12日 09:11:51   作者:小萬哥  
這篇文章主要為大家介紹了Redis數(shù)據(jù)結構高頻面試問題解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

概述

Redis 是速度非??斓姆顷P系型(NoSQL)內存鍵值數(shù)據(jù)庫,可以存儲鍵和五種不同類型的值之間的映射。

鍵的類型只能為字符串,值支持五種數(shù)據(jù)類型:字符串、列表、集合、散列表、有序集合。

Redis 支持很多特性,例如將內存中的數(shù)據(jù)持久化到硬盤中,使用復制來擴展讀性能,使用分片來擴展寫性能。

數(shù)據(jù)類型

數(shù)據(jù)類型可以存儲的值操作
STRING字符串、整數(shù)或者浮點數(shù)對整個字符串或者字符串的其中一部分執(zhí)行操作,對整數(shù)和浮點數(shù)執(zhí)行自增或者自減操作
LIST列表從兩端壓入或者彈出元素,對單個或者多個元素進行修剪,只保留一個范圍內的元素
SET無序集合添加、獲取、移除單個元素,檢查一個元素是否存在于集合中,計算交集、并集、差集,從集合里面隨機獲取元素
HASH包含鍵值對的無序散列表添加、獲取、移除單個鍵值對,獲取所有鍵值對,檢查某個鍵是否存在
ZSET有序集合添加、獲取、刪除元素,根據(jù)分值范圍或者成員來獲取元素,計算一個鍵的排名

STRING

Redis 的 String 類型使用 SDS(簡單動態(tài)字符串)作為底層的數(shù)據(jù)結構實現(xiàn)。SDS 與 C 字符串有所不同,它不僅可以保存文本數(shù)據(jù),還可以保存二進制數(shù)據(jù)。這是因為 SDS 使用 len 屬性的值而不是空字符來判斷字符串是否結束,并且 SDS 的所有 API 都會以處理二進制的方式來處理 SDS 存放在 buf[] 數(shù)組里的數(shù)據(jù)。因此,SDS 不僅能存放文本數(shù)據(jù),還能保存圖片、音頻、視頻、壓縮文件等二進制數(shù)據(jù)。

另外,Redis 的 SDS API 是安全的,拼接字符串不會造成緩沖區(qū)溢出。這是因為 SDS 在拼接字符串之前會檢查 SDS 空間是否滿足要求,如果空間不夠會自動擴容,從而避免了緩沖區(qū)溢出的問題。

此外,獲取字符串長度的時間復雜度是 O(1),因為 SDS 結構里用 len 屬性記錄了字符串長度,所以獲取長度的復雜度為 O(1)。相比之下,C 語言的字符串并不記錄自身長度,所以獲取長度的復雜度為 O(n)。這些特性使得 SDS 成為 Redis 的一個重要組成部分。

> set hello world
OK
> get hello
"world"
> del hello
(integer) 1
> get hello
(nil)

LIST

Redis 的 List 類型底層數(shù)據(jù)結構可以由雙向鏈表或壓縮列表實現(xiàn)。如果列表元素個數(shù)小于 512 個且每個元素的值都小于 64 字節(jié),則 Redis 會使用壓縮列表作為底層數(shù)據(jù)結構;否則,Redis 會使用雙向鏈表作為底層數(shù)據(jù)結構。然而,在 Redis 3.2 版本之后,List 類型底層數(shù)據(jù)結構只由 quicklist 實現(xiàn),代替了雙向鏈表和壓縮列表。

> rpush list-key item
(integer) 1
> rpush list-key item2
(integer) 2
> rpush list-key item
(integer) 3
> lrange list-key 0 -1
1) "item"
2) "item2"
3) "item"
> lindex list-key 1
"item2"
> lpop list-key
"item"
> lrange list-key 0 -1
1) "item2"
2) "item"

SET

Set 類型的底層數(shù)據(jù)結構可以是哈希表或整數(shù)集合。當集合中的元素都是整數(shù)并且元素個數(shù)小于512時,Redis使用整數(shù)集合作為Set類型的底層數(shù)據(jù)結構;否則,Redis使用哈希表作為Set類型的底層數(shù)據(jù)結構。

> sadd set-key item
(integer) 1
> sadd set-key item2
(integer) 1
> sadd set-key item3
(integer) 1
> sadd set-key item
(integer) 0
> smembers set-key
1) "item"
2) "item2"
3) "item3"
> sismember set-key item4
(integer) 0
> sismember set-key item
(integer) 1
> srem set-key item2
(integer) 1
> srem set-key item2
(integer) 0
> smembers set-key
1) "item"
2) "item3"

HASH

Redis 中的 Hash 類型的底層數(shù)據(jù)結構可以是壓縮列表或哈希表。如果元素個數(shù)小于 512 個且每個元素的值都小于 64 字節(jié),Redis 會使用壓縮列表作為底層數(shù)據(jù)結構;否則會使用哈希表。在 Redis 7.0 中,壓縮列表已經廢棄,改用 listpack 數(shù)據(jù)結構來實現(xiàn)。

> hset hash-key sub-key1 value1
(integer) 1
> hset hash-key sub-key2 value2
(integer) 1
> hset hash-key sub-key1 value1
(integer) 0
> hgetall hash-key
1) "sub-key1"
2) "value1"
3) "sub-key2"
4) "value2"
> hdel hash-key sub-key2
(integer) 1
> hdel hash-key sub-key2
(integer) 0
> hget hash-key sub-key1
"value1"
> hgetall hash-key
1) "sub-key1"
2) "value1"

ZSET

Zset 類型的底層數(shù)據(jù)結構可以是壓縮列表或跳表。

如果有序集合的元素個數(shù)小于 128 個,且每個元素的值小于 64 字節(jié),則 Redis 會使用壓縮列表作為 Zset 類型的底層數(shù)據(jù)結構。

如果有序集合的元素個數(shù)大于等于 128 個或者每個元素的值大于等于 64 字節(jié),則 Redis 會使用跳表作為 Zset 類型的底層數(shù)據(jù)結構。

需要注意的是,Redis 7.0 中廢棄了壓縮列表數(shù)據(jù)結構,改用 listpack 數(shù)據(jù)結構來實現(xiàn)。

> zadd zset-key 728 member1
(integer) 1
> zadd zset-key 982 member0
(integer) 1
> zadd zset-key 982 member0
(integer) 0
> zrange zset-key 0 -1 withscores
1) "member1"
2) "728"
3) "member0"
4) "982"
> zrangebyscore zset-key 0 800 withscores
1) "member1"
2) "728"
> zrem zset-key member1
(integer) 1
> zrem zset-key member1
(integer) 0
> zrange zset-key 0 -1 withscores
1) "member0"
2) "982"

以上就是Redis數(shù)據(jù)結構高頻面試問題解析的詳細內容,更多關于Redis數(shù)據(jù)結構高頻面試的資料請關注腳本之家其它相關文章!

相關文章

  • React中的Refs屬性你來了解嗎

    React中的Refs屬性你來了解嗎

    這篇文章主要為大家詳細介紹了的React?Refs屬性,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • React?Native實現(xiàn)Toast輕提示和loading效果

    React?Native實現(xiàn)Toast輕提示和loading效果

    這篇文章主要介紹了React Native實現(xiàn)Toast輕提示和loading效果,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-09-09
  • React條件渲染實例講解使用

    React條件渲染實例講解使用

    在React中,你可以創(chuàng)建不同的組件來封裝各種你需要的行為。然后還可以根據(jù)應用的狀態(tài)變化只渲染其中的一部分。React 中的條件渲染和JavaScript中的一致,使用JavaScript操作符if或條件運算符來創(chuàng)建表示當前狀態(tài)的元素,然后讓React根據(jù)它們來更新UI
    2022-11-11
  • 從零搭建react+ts組件庫(封裝antd)的詳細過程

    從零搭建react+ts組件庫(封裝antd)的詳細過程

    這篇文章主要介紹了從零搭建react+ts組件庫(封裝antd),實際上,代碼開發(fā)過程中,還有很多可以輔助開發(fā)的模塊、流程,本文所搭建的整個項目,我都按照文章一步一步進行了git提交,開發(fā)小伙伴可以邊閱讀文章邊對照git提交一步一步來看
    2022-05-05
  • react項目中使用插件配置路由的方法

    react項目中使用插件配置路由的方法

    這篇文章主要介紹了react項目中使用插件配置路由的相關知識,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-03-03
  • 詳解React中組件之間通信的方式

    詳解React中組件之間通信的方式

    這篇文章主要介紹了React中組件之間通信的方式,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-07-07
  • 解決React報錯React.Children.only expected to receive single React element child

    解決React報錯React.Children.only expected to rece

    這篇文章主要為大家介紹了React報錯React.Children.only expected to receive single React element child分析解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01
  • React實現(xiàn)卡片拖拽效果流程詳解

    React實現(xiàn)卡片拖拽效果流程詳解

    這篇文章主要介紹了React Web開發(fā)實戰(zhàn)示例,實現(xiàn)卡片拖拽效果,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2022-11-11
  • React Native 環(huán)境搭建的教程

    React Native 環(huán)境搭建的教程

    本篇文章主要介紹了React Native 環(huán)境搭建的教程,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • React中Redux Hooks的使用詳解

    React中Redux Hooks的使用詳解

    這篇文章主要介紹了React Redux Hooks的使用詳解,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-07-07

最新評論