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

面試題首頁 > Redis面試題

Redis數據結構面試題

001什么是布隆過濾器?

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

002Redis中String常用命令及應用場景。

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

len 是當前字符串實際長度,capacity 是為字符串分配的可用空間,當字符串長度小于 1M 時,擴容都是加倍現有的空間,如果超過 1M,擴容時一次只會多擴 1M 的空間。字符串最大長度為 512M。
應用場景: 常規計數,微博數,粉絲數等。

003Redis中Hash常用命令及應用場景。

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


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

004Redis中List常用命令及應用場景。

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

應用場景:微博的關注列表,粉絲列表,最新消息排行等功能

005Redis中Set常用命令及應用場景。

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


場景應用:
1.共同好友、二度好友
2.利用唯一性,可以統計訪問網站的所有獨立 IP
3.好友推薦的時候,根據 tag 求交集,大于某個 threshold 就可以推薦

006Redis中Sorted Set常用命令及應用場景。

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

數據結構:zset是Redis非常有特色的數據結構,它是基于Set并提供排序的有序集合。其中最為重要的特點就是支持通過score的權重來指定權重。一些排行榜、延遲任務比如指定1小時后執行, 就是使用這個數據結構實現的。


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

007Redis的Hash沖突怎么辦?

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

所謂的哈希沖突通是指過不同的key,計算出一樣的哈希值,導致落在同一個哈希桶中。
Redis為了解決哈希沖突,采用了鏈式哈希。鏈式哈希是指同一個哈希桶中,多個元素用一個鏈表來保存,它們之間依次用指針連接。

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

008說說Redis哈希槽的概念?

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

目錄

返回頂部
主站蜘蛛池模板: 日韩一区二区三区不卡视频 | 欧美三级成人观看 | 九九九久久久 | 夜夜躁狠狠躁日日躁2021 | 天天摸天天爽天天澡视频 | 99热精品在线 | a大片久久爱一级 | 日韩亚洲在线 | 精品999久久久久久中文字幕 | 97综合 | 色婷婷久久综合中文久久一本` | 天堂素人在线 | 中国老妇色xxxxx | 国产精品香蕉一区二区三区 | 精品一区二区三区视频在线观看免 | 夜色福利一区二区三区 | 激情综合色综合啪啪开心 | 亚洲国产人成在线观看69网站 | 久久综合色之久久综合 | 黄色一级网 | 成人国产在线不卡视频 | 国产精品原创视频 | 成人午夜性视频欧美成人 | 成人一区视频 | 黄动漫在线无限看免费 | 天天做人人爱夜夜爽2020 | 久草成人| 羞羞网址 | 亚洲图片国产日韩欧美 | 美女被爆羞羞视频网站视频 | 橘梨纱视频一区二区在线观看 | 四虎看片| 国产精品线在线精品 | 日本不卡免费在线 | 91伊人久久 | 手机在线精品视频每日更新 | 深夜色 | 久热在线 | 久久精品亚洲99一区二区 | 99久久99久久精品免费看子 | 国产欧美日韩精品专区 |