網易雲課堂上面的總結: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有沒有碰到過數據丟失的狀況?
關鍵點:持久化機制,主從複製