【Redis】基礎學習概覽【彙總】

1、概述

1.1 簡介

  • Redis是由意大利人Salvatore Sanfilippo(網名:antirez)開發的一款內存高速緩存數據庫。Redis全稱爲:Remote Dictionary Server(遠程數據服務),該軟件使用C語言編寫,Redis是一個key-value存儲系統,它支持豐富的數據類型,如:string、list、set、zset(sorted set)、hash。
  • Redis採用的是基於內存的採用的是單進程單線程模型的KV數據庫,由C語言編寫。官方提供的數據是能夠達到100000+的qps,
  • Redis是一個非關係型數據庫(NoSQL) 內存數據庫,以key value方式進行存儲
  • Redis以單線方式存儲,既然是單線程(保證線程安全問題),能夠設置有效期,使用持久化機制保證數據高可用。

1.2 Redis單線程好處

  • 代碼更清晰,處理邏輯更簡單
  • 不用去考慮各類鎖的問題,不存在加鎖釋放鎖操做,沒有由於可能出現死鎖而致使的性能消耗
  • 不存在多進程或者多線程致使的切換而消耗CPU
  • 因此redis線程是安全的

1.3 單線程弊端

  • 沒法發揮多核CPU性能,不過能夠經過在單機開多個Redis實例來完善;

1.4 Redis應用場景

  1. 令牌(Token)生成(臨時有效期)
  2. 短信驗證碼(臨時有效期)
  3. 發佈訂閱(不推薦使用):至關於消息系統,ActiveMQ,RocketMQ等工具相似,可是我的以爲簡單用一下還行,若是對於數據一致性要求高的話仍是用RocketMQ等專業系統。因爲redis把數據添加到隊列是返回添加元素在隊列的第幾位,因此能夠作判斷用戶是第幾個訪問這種業務隊列不只能夠把併發請求變成串行,而且還能夠作隊列或者棧使用
  4. 分佈式鎖!!(使用ZK或者使用Redis實現分佈式鎖):驗證前端的重複請求(能夠自由擴展相似狀況),能夠經過redis進行過濾:每次請求將request Ip、參數、接口等hash做爲key存儲redis(冪等性請求),設置多長時間有效期,而後下次請求過來的時候先在redis中檢索有沒有這個key,進而驗證是否是必定時間內過來的重複提交秒殺系統,基於redis是單線程特徵,防止出現數據庫「爆破」全局增量ID生成,相似「秒殺」
  5. 網站計數器(由於Redis是單線程,在高併發狀況下,保證記錄全局惟一性):諸如統計點擊數等應用。因爲單線程,能夠避免併發問題,保證不會出錯,並且100%毫秒級性能!
  6. 緩存(熱點數據):
    • 熱點數據(常常會被查詢,可是不常常被修改或者刪除的數據),首選是使用redis緩存,畢竟強大到冒泡的QPS和極強的穩定性不是全部相似工具都有的,並且相比於memcached還提供了豐富的數據類型可使用,另外,內存中的數據也提供了AOF和RDB等持久化機制能夠選擇,要冷、熱的仍是忽冷忽熱的均可選。
    • 結合具體應用須要注意一下:不少人用spring的AOP來構建redis緩存的自動生產和清除,過程可能以下:
      • Select 數據庫前查詢redis,有的話使用redis數據,放棄select 數據庫,沒有的話,select 數據庫,而後將數據插入redis
      • update或者delete數據庫錢,查詢redis是否存在該數據,存在的話先刪除redis中數據,而後再update或者delete數據庫中的數據
    • 上面這種操做,若是併發量很小的狀況下基本沒問題,可是高併發的狀況請注意下面場景:
      • 爲了update先刪掉了redis中的該數據,這時候另外一個線程執行查詢,發現redis中沒有,瞬間執行了查詢SQL,而且插入到redis中一條數據,回到剛纔那個update語句,這個悲催的線程壓根不知道剛纔那個該死的select線程犯了一個彌天大錯!因而這個redis中的錯誤數據就永遠的存在了下去,直到下一個update或者delete。

1.5 Redis 和 Memecached 的區別

  • redis支持更加豐富的數據類型(支持更復雜的應用場景),除了支持簡單的K/V類型的數據,還提供了list,set,zset,hash等數據結構的存儲。memechched支持簡單的數據類型,String 。
    • 使用Redis的String類型作的事,均可以用Memcached替換,以此換取更好的性能提高; 除此之外,優先考慮Redis;
  • Redis支持數據的持久化,能夠將內存中的數據保持在磁盤中,重啓的時候能夠再次加載進行使用,持久化方式有兩種RDB和AOF方式 ,Memecached把數據所有存在內存之中。
  • 集羣模式,Memecached沒有原生的集羣模式,須要依靠客戶端網集羣中分片寫入數據;可是redis目前是原生支持cluster模式的,3.0開始
  • Memecached是單進程多線程的,非阻塞IO複用的網絡模型,Redis使用單線程的多路IO複用模型

關於IO模型的知識 ,能夠看這個博主寫的帖子地址以下:html

Linux的五種IO模型前端

2、安裝、開啓以及關閉

【Redis】安裝、開啓以及關閉redis

3、Redis基本數據類型

【Redis】基本數據類型spring

【Redis】基本數據類型及命令操做(超詳細)數據庫

4、SpringBoot整合Redis

【Redis】SpringBoot整合Redis緩存

5、Redis發佈訂閱

【Redis】發佈訂閱安全

6、Redis主從複製

【Redis】主從複製springboot

7、Redis哨兵機制

【Redis】哨兵機制網絡

8、Redis事務

【Redis】事務session

9、SpringBoot+Redis+Ehcache實現二級緩存

【Redis】SpringBoot+Redis+Ehcache實現二級緩存

10、Redis持久化方式

【Redis】持久化

11、Redis集羣方式

【Redis】集羣方式

12、Redis 緩存雪崩和緩存穿透

【Redis】緩存穿透與緩存雪崩

十3、用Redis解決分佈式Session

【Redis】分佈式Session

相關文章
相關標籤/搜索