大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

面試題首頁 > Redis面試題

Redis數(shù)據(jù)結(jié)構(gòu)面試題

001什么是布隆過濾器?

布隆過濾器是一個叫“布隆”的人提出的,它本身是一個很長的二進(jìn)制向量,既然是二進(jìn)制的向量,那么顯而易見的,存放的不是0,就是1。布隆過濾器是一種由位數(shù)組和多個哈希函數(shù)組成概率數(shù)據(jù)結(jié)構(gòu),返回兩種結(jié)果可能存在和一定不存在。布隆過濾器里的一個元素由多個狀態(tài)值共同確定。位數(shù)組存儲狀態(tài)值,哈希函數(shù)計算狀態(tài)值的位置。
優(yōu)點:由于存放的不是完整的數(shù)據(jù),所以占用的內(nèi)存很少,而且新增,查詢速度夠快;
缺點: 隨著數(shù)據(jù)的增加,誤判率隨之增加;無法做到刪除數(shù)據(jù);只能判斷數(shù)據(jù)是否一定不存在,而無法判斷數(shù)據(jù)是否一定存在。

002Redis中String常用命令及應(yīng)用場景。

常用命令:  set,get,decr,incr,mget 等。
含義:String數(shù)據(jù)結(jié)構(gòu)是簡單的Key-Value類型,value不僅可以是String,也可以是數(shù)字。
數(shù)據(jù)結(jié)構(gòu):內(nèi)部結(jié)構(gòu)實現(xiàn)上類似于 Java 的 ArrayList,采用預(yù)分配冗余空間的方式來減少內(nèi)存的頻繁分配,如圖所示:

len 是當(dāng)前字符串實際長度,capacity 是為字符串分配的可用空間,當(dāng)字符串長度小于 1M 時,擴(kuò)容都是加倍現(xiàn)有的空間,如果超過 1M,擴(kuò)容時一次只會多擴(kuò) 1M 的空間。字符串最大長度為 512M。
應(yīng)用場景: 常規(guī)計數(shù),微博數(shù),粉絲數(shù)等。

003Redis中Hash常用命令及應(yīng)用場景。

常用命令: hget,hset,hgetall 等。
含義:Redis中的哈希結(jié)構(gòu)就如同Java中的map一樣,Hash是一個string類型的field和value的映射表,hash特別適合用于存儲對象。
數(shù)據(jù)結(jié)構(gòu):Redis Hash通過分桶的方式解決 hash 沖突。它是無序字典。內(nèi)部實現(xiàn)結(jié)構(gòu)是同樣的數(shù)組 + 鏈表二維結(jié)構(gòu)。第一維 hash 的數(shù)組位置碰撞時,就會將碰撞的元素使用鏈表串接起來。第一維是數(shù)組,第二維是鏈表。數(shù)組中存儲的是第二維鏈表的第一個元素的指針。


應(yīng)用場景:存儲用戶信息,商品信息等等。例如修真院的首頁的職業(yè)信息,只是簡單的信息集合,我們可以直接將它儲存到Redis中,在讀取的過程中就不用序列化對象,直接操作。

004Redis中List常用命令及應(yīng)用場景。

常用命令: lpush,rpush,lpop,rpop,lrange等
含義:list就是鏈表,Redis list的實現(xiàn)為一個雙向鏈表,即可以支持反向查找和遍歷,更方便操作,不過帶來了部分額外的內(nèi)存開銷。
數(shù)據(jù)結(jié)構(gòu):Redis 的列表相當(dāng)于 Java 語言中的 LinkedList,注意它是鏈表而不是數(shù)組。這意味著 list 的插入和刪除操作非常快,時間復(fù)雜度為 O(1),但是索引定位很慢,時間復(fù)雜度為 O(n)。
list的特點是:
1)有序
2)可以重復(fù)
3)右邊進(jìn)左邊出或者左邊進(jìn)右邊出,則列表可以充當(dāng)隊列
4)左邊進(jìn)左邊出或者右邊進(jìn)右邊出,則列表可以充當(dāng)棧

應(yīng)用場景:微博的關(guān)注列表,粉絲列表,最新消息排行等功能

005Redis中Set常用命令及應(yīng)用場景。

常用命令:sadd,spop,smembers,sunion 等
含義:set對外提供的功能與list類似,是一個列表的功能,特殊之處在于set是可以自動排重的。 并且set提供了判斷某個成員是否在一個set集合內(nèi)的重要接口,這個也是list所不能提供的。
數(shù)據(jù)結(jié)構(gòu):set和字典非常類似,其內(nèi)部實現(xiàn)就是上述的hashTable的特殊實現(xiàn),與字典不同的地方有兩點:
1)只關(guān)注key值,所有的value都是NULL。
2)在新增數(shù)據(jù)時會進(jìn)行去重。


場景應(yīng)用:
1.共同好友、二度好友
2.利用唯一性,可以統(tǒng)計訪問網(wǎng)站的所有獨(dú)立 IP
3.好友推薦的時候,根據(jù) tag 求交集,大于某個 threshold 就可以推薦

006Redis中Sorted Set常用命令及應(yīng)用場景。

常用命令: zadd,zrange,zrem,zcard等
含義:和set相比,sorted set增加了一個權(quán)重參數(shù)score,使得集合中的元素能夠按score進(jìn)行有序排列。

數(shù)據(jù)結(jié)構(gòu):zset是Redis非常有特色的數(shù)據(jù)結(jié)構(gòu),它是基于Set并提供排序的有序集合。其中最為重要的特點就是支持通過score的權(quán)重來指定權(quán)重。一些排行榜、延遲任務(wù)比如指定1小時后執(zhí)行, 就是使用這個數(shù)據(jù)結(jié)構(gòu)實現(xiàn)的。


應(yīng)用場景:在直播系統(tǒng)中,實時排行信息包含直播間在線用戶列表,各種禮物排行榜,彈幕消息(可以理解為按消息維度的消息排行榜)等信息,適合使用Redis中的SortedSet結(jié)構(gòu)進(jìn)行存儲。

007Redis的Hash沖突怎么辦?

Redis 作為一個K-V的內(nèi)存數(shù)據(jù)庫,它使用用一張全局的哈希來保存所有的鍵值對。這張哈希表,有多個哈希桶組成,哈希桶中的entry元素保存了key和value指針,其中*key指向了實際的鍵,*value指向了實際的值。

所謂的哈希沖突通是指過不同的key,計算出一樣的哈希值,導(dǎo)致落在同一個哈希桶中。
Redis為了解決哈希沖突,采用了鏈?zhǔn)焦!f準(zhǔn)焦J侵竿粋€哈希桶中,多個元素用一個鏈表來保存,它們之間依次用指針連接。

因為哈希沖突鏈上的元素只能通過指針逐一查找再操作,所以當(dāng)往哈希表插入數(shù)據(jù)很多,沖突也會越多,沖突鏈表就會越長,那查詢效率就會降低了。為了保持高效,Redis 會對哈希表做rehash操作,也就是增加哈希桶,減少沖突。為了rehash更高效,Redis還默認(rèn)使用了兩個全局哈希表,一個用于當(dāng)前使用,稱為主哈希表,一個用于擴(kuò)容,稱為備用哈希表。

008說說Redis哈希槽的概念?

Redis集群沒有使用一致性hash,而是引入了哈希槽的概念,Redis集群有16384個哈希槽,每個key通過CRC16校驗后對16384取模來決定放置哪個槽,集群的每個節(jié)點負(fù)責(zé)一部分hash槽。

目錄

返回頂部
主站蜘蛛池模板: 亚洲精品久久国产小说 | 亚洲精品一 | 欧美性网 | 99热久久这里只精品国产ww | 亚洲久久网 | 日本一级毛片视频在线看 | 青青青国产免费手机视频在线观看 | 手机看片国产福利 | 国产呦系列呦交 | 一级毛片人与动免费观看 | 青青操在线观看 | 五月婷婷激情综合 | 99久久综合久中文字幕 | 欧美成人自拍 | 久久综合给合久久狠狠狠97色 | 国产一级毛片网站 | 久草在线资源 | 三级成人做爰视频 | 久久久91精品国产一区二区三区 | 欧美α片无限看在线观看免费 | 欧美xxx69╳xxhd| 中文婷婷| 久久久久久久99久久久毒国产 | 久久久久国产精品免费 | 狠狠色丁香婷婷久久 | 亚洲精品日韩中文字幕久久久 | 深夜免费视频 | 青草久久网 | 久久精品国产一区二区三区 | 麻豆日韩区久久综合 | 国产娱乐凹凸视觉盛宴在线视频 | 奇米四色在线视频 | 第一毛片 | 亚洲黄色a级片 | 爱爱网站免费 | 亚洲黄色成人 | 国内精品一区二区 | 国产欧美一区二区三区观看 | 99这里只精品热在线获取 | 国产区一区| 日日噜噜夜夜狠狠久久丁香 |