redis 實戰面試

網易雲課堂上面的總結:redis

一.redis使用的場景?算法

answer:把用戶信息緩存到redis。經過incr作id自增操做(例如單據編號自增)。經常使用的報表數據查詢(hash).緩存

 

二.經常使用數據結構?服務器

1.string:簡單的k_v類型。使用場景(微博上,粉絲數,常規計數)數據結構

   經常使用命令:get set incr decr Mget性能

2.list:鏈表類型。使用場景:(微博的關注列表,粉絲列表)操作系統

   經常使用命令:Lpush Rpush Lpop Rpop Lrangeblog

3.set:集合,一堆不重複的組合,利用set能夠存儲一些集合性的數據。使用場景:共同關注,共同喜愛,二度好友。排序

  經常使用命令:Sadd(向集合中添加一個或多個成員)  Spop(移除並返回集合中的一個隨機元素) Smember(返回集合中的全部成員) Sunion(返回給定集合的全部並集)內存

4.sorted set:區別set的地方是,能夠經過額外的score參數來爲成員排序,而且插入是有序的,即自動排序。使用場景(排行榜,按照用戶投票和時間排序)

 經常使用命令:Zadd  Zrange Zrem  Zcard

 

三.最多往redis裏面塞過多少條數據?

answer:五萬條?

 

四.單臺內存用完了怎麼辦?

關鍵點:最大內存閥值(maxmemory),內存回收策略(maxmemory-plicy),LRU算法

LUR(least recently used,最近最少使用)算法:根據數據的歷史訪問記錄來淘汰數據

 

 

伍.若是緩存的數據比單臺服務器的內存要大,怎麼處理?

關鍵字:redis集羣redis cluster

場景:假若有20G數據須要存redis怎麼辦?

answer:作redis集羣,假如一臺服務器是4G內存,那麼起碼要七臺,畢竟還有什麼操做系統內存巴拉巴拉的。

集羣就會引出redis_cluster。

那麼redis怎麼作內存分配呢?

例如火車票:每一節車箱能夠作不少人,根據你的車票信息找到對應的座位,火車根據不一樣的座位號劃分不一樣的車箱(這裏車箱表明屬於哪臺服務器)

這個車票號怎麼生成呢?

這叫要說到怎麼計算slot(槽->車牌號),經過crc 16_hash(key)計算出惟一hash值,而後slot = hash % 16384(redis最大存儲)

既然找到了車票號怎麼經過車票號找到對應的車箱呢(服務器)?

假如不知道隨機插入到第N臺服務器,假如這個車牌號屬於這個車箱,那麼會返回ok,若是不屬於則會重定向告訴你須要指向哪臺服務器。

可是這會存在一個性能問題,假如1000個請求過來,每次都找錯了,那不是原本1000次的請求要請求2000次?

這個時候能夠把slot的計算放在客戶端,客戶端緩存slot的分配信息。而後咱們就能夠直接定位到redis_service,若是客戶端發送的slot信息有誤,那麼當咱們收到重定向響應的時候更新該slot分配信息。

 

 

六:數據放在redis有沒有碰到過數據丟失的狀況?

關鍵點:持久化機制主從複製

相關文章
相關標籤/搜索