1、redis介紹

官方地址:https://redis.io/

中文官網地址:http://www.redis.cn/

1.1 、介紹
  Redis 是一個開源(BSD許可)的,內存中的數據結構存儲系統,它可以用作數據庫、緩存和消息中間件. 它支持多種類型的數據結構,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 與範圍查詢, bitmaps, hyperloglogs 和 地理空間(geospatial) 索引半徑查詢
  Redis 內置了 複製(replication), LUA腳本(Lua scripting), LRU驅動事件(LRU eviction), 事務(transactions) 和不同級別的 磁盤持久化(persistence), 並通過 Redis哨兵(Sentinel) 和自動 分區(Cluster)提供高可用性(high availability)
  你可以對這些類型執行 原子操作 , 列如: 字符串(strings)的append 命令; 散列(hashes)的hincrby命令; 列表(lists)的lpush命令; 集合(sets)計算交集sinter命令, 計算並集union命令 和 計算差集sdiff命令; 或者 在有序集合(sorted sets)裏面獲取成員的最高排名zrangebyscore命令。
爲了實現其卓越的性能, Redis 採用運行在 內存中的數據集工作方式. 根據您的使用情況, 您可以每隔一定時間將 數據集導出到磁盤 , 或者 追加到命令日誌中. 您也可以關閉持久化功能,將Redis作爲一個高效的網絡的緩存數據功能使用.
  Redis 同樣支持 主從複製(能自動重連和網絡斷開時自動重新同步),並且第一次同步是快速的非阻塞式的同步.

其他功能包括:

  • 事務(Transactions)
  • 訂閱分發(Pub/Sub)
  • LUA腳本(Lua scripting)
  • 過期自動刪除key
  • 內存回收
  • 自動故障轉移

1.2 簡單瞭解redis

   redis 是一個基於內存的高性能的key-value存儲系統.

1.3、優點

  爲什麼用redis,主要應用redis有三點:性能、併發和具有分佈式的特點。

(1)性能

redis是一個基於內存的數據庫,也就註定了redis比其他傳統數據的性能優點。對於需要執行很久的sql,可以將運行結果放在緩存中。後面先去緩存中讀取,得到快速的響應。
這裏寫圖片描述
(2)併發
  如果大併發量的訪問數據庫,則很可以導致數據庫的響應時間不能跟上數據刷新的速度,從而導致數據庫異常。

  這個時候就需要做到redis,做一個數據緩存操作,用戶操作先訪問redis。

  redis是純內存操作,性能非常出色,每秒可以處理超過 10萬次讀寫操作。

(3)分佈式鎖  

  要介紹分佈式鎖,首先要提到與分佈式鎖相對應的是線程鎖、進程鎖。

線程鎖:主要用來給方法、代碼塊加鎖。當某個方法或代碼使用鎖,在同一時刻僅有一個線程執行該方法或該代碼段。線程鎖只在同一JVM中有效果,因爲線程鎖的實現在根本上是依靠線程之間共享內存實現的,比如synchronized是共享對象頭,顯示鎖Lock是共享某個變量(state)。

進程鎖:爲了控制同一操作系統中多個進程訪問某個共享資源,因爲進程具有獨立性,各個進程無法訪問其他進程的資源,因此無法通過synchronized等線程鎖實現進程鎖。

分佈式鎖:當多個進程不在同一個系統中,用分佈式鎖控制多個進程對資源的訪問。

(3)分佈式

(4)持久化

另外,redis可以做存儲,這主要因爲其有”持久化”的功能。

1.4、缺點

(一)緩存和數據庫雙寫一致性問題

(二)緩存雪崩問題
  如果緩存集中在一段時間內失效,發生大量的緩存穿透,所有的查詢都落在數據庫上,造成了緩存雪崩。

(三)緩存擊穿問題
  緩存穿透是指查詢一個一定不存在的數據,由於緩存是不命中時需要從數據庫查詢,查不到數據則不寫入緩存,這將導致這個不存在的數據每次請求都要到數據庫去查詢,造成緩存穿透。

(四)緩存的併發競爭問題

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章