分佈式緩存之--Redis

首先咱們使用一個新的技術,咱們不能爲了用而用,咱們要知道爲何用?php

一、爲何要使用緩存?mysql

高性能:redis

一個用戶A發起請求,經過ServiceA請求數據庫來獲取數據,可是數據庫的性能相比Redis的速度要慢不少,響應時間比較長,這時又有一個用戶B發起一個請求,和用戶A要的是同一個數據,那麼正常狀況下咱們又要去查詢一遍數據庫,而後再返回給用戶,那麼咱們想想,若是有不少用戶都要去查詢這一條數據,都去數據庫查,響應都很慢,那麼就下降了用戶體驗。sql

加入Redis緩存後,咱們將用戶A查詢都數據放到Redis緩存中,那麼接下來到用戶再去查詢這條數據到時候直接先查Redis緩存中是否存在這條數據,那麼咱們直接就返回給用戶就能夠了,不須要再去查數據庫了,Redis響應速度極快這樣就提升了用戶體驗感。數據庫

高併發:緩存

mysql數據庫對高併發支撐並非很高,加入Redis後,Redis是基於內存對,內存對讀寫速度很快,redis使用是多路複用技術,能夠處理併發鏈接,redis是單線程的,能夠省去不少上下文切換的時間;微信

二、Redis的線程模型是什麼?數據結構

    當客戶端1請求鏈接redis進程的時候,會在redis進程內部創建一個server socket 並註冊一個事件,redis進程中的io多路複用程序會將這個它壓入隊列中,而後交給文件事件分派器,分派器會交給鏈接應答處理器,當客戶端要進行set key value操做的時候,一樣會產生一個socket 註冊一個命令請求事件,由io多路複用程序壓入隊列,文件事件分派器會交給處理器進程內存中key和value的設置。 併發

三、Redis的數據結構及其做用dom

    String:普通的get和set,簡單的kv緩存
    hash:相似有map的一種結構,這個通常就是存儲對象
    list:list格式放入緩存中
    set:無序集合,自動去重
    sorted set:去重能夠排序

五、Redis的過時策略有哪些?內存淘汰機制有哪些?

過時策略:按期刪除+惰性刪除

按期刪除:是指Redis會每隔100ms會隨機抽取一些設置了過時時間的key進行掃描,看是否已通過期,若是已經到達過時時間就進行刪除

惰性刪除:是指由於Redis的按期刪除是進行隨機抽取的一些設置了過時時間的key進行刪除,不免會漏掉一些已通過期可是沒有被按期刪除掃描到的key,那麼這些key在你去獲取它的value的時候,redis就會發現這個key已通過期了,就不會給你返回任何結果,並將這個key給刪除。

淘汰機制:

        noeviction:當內存不足以容納新寫入數據時,新寫入操做會報錯,這個通常沒人用吧
    allkeys-lru:當內存不足以容納新寫入數據時,在鍵空間中,移除最近最少使用的key(這個是最經常使用的)
    allkeys-random:當內存不足以容納新寫入數據時,在鍵空間中,隨機移除某個key,這個通常沒人用吧
    volatile-lru:當內存不足以容納新寫入數據時,在設置了過時時間的鍵空間中,移除最近最少使用的key(這個通常不太合適)
    volatile-random:當內存不足以容納新寫入數據時,在設置了過時時間的鍵空間中,隨機移除某個key
        volatile-ttl:當內存不足以容納新寫入數據時,在設置了過時時間的鍵空間中,有更早過時時間的key優先移除

頂

_分享至 :_[](http://bbs.itheima.com/# "分享到新浪微博")[](http://bbs.itheima.com/# "分享到微信")QQ空間[](http://bbs.itheima.com/#)

收藏

回覆只看該做者

相關文章
相關標籤/搜索