Java知識總結--redis篇

redis


目錄

redis

1.1-什麼是redis

1.2-redis緩存代碼

1.3-redis的功能

1.4-redis的使用

1.5-redis的使用場景

1.6-redis對象保存的方式

1.7-redis的數據淘汰機制

1.8-redis的優缺點

1.9-單線程的redis爲什麼這麼快

1.10-redis的數據類型

1.11-redis持久化

1.12-使用持久化的目的

1.13-redis的持久化流程

1.14-redis的持久化機制有哪些

1.15-RDB機制

1.16-RDB的三種觸發機制

1.17-RDB的優點

1.18-RDB的缺點

1.19-AOF機制

1.20-AOF的三種觸發機制

1.21-AOF的優點

1.22-AOF的缺點

1.23-RDB和AOF的選擇

1.24-什麼是redis集羣

1.25-集羣可以解決的問題

1.26-集羣的方式

1.27-什麼是CAP原則

1.28- Redis集羣保證了CAP的什麼

1.29-Redis集羣會有寫操作丟失嗎?

1.30-大量的key需要設置同一時間過期,一般需要注意


1.1-什麼是redis

redis是一個key-value存儲的非關係型數據庫,先把數據存到內存中,會根據一定的策略持久化到磁盤,即使斷電也不會丟失數據,支持的數據類型也比較多。


1.2-redis緩存代碼


1.3-redis的功能

主要用來緩存數據庫數據和web集羣式來當做中央緩存存放session


1.4-redis的使用

把經常需要查詢的數據,放到讀取速度比較快的空間(內存),以便下次訪減少時間,減輕壓力,減少訪問時間。


1.5-redis的使用場景

  • 計數器

  • Session緩存服務器


1.6-redis對象保存的方式

Json字符串:

需要把對象轉換爲json對象,當作字符串處理,直接使用get或者set來設置或者獲取

序列化:

需要做序列化,把對象序列化爲對象保存

使用Json字符串方式的優缺點:

  • 優點:設置和獲取比較簡單

  • 缺點:沒有用提供專門的方法需要把對象轉換爲json


1.7-redis的數據淘汰機制

內存大小優先,需要保存有效的數據

  1. volatile-lru:從已設置過期時間的數據集(server.db[i].expires)中挑選最近最少使用的數據淘汰

  2. volatile-ttl:從已設置過期時間的數據集(server.db[i].expires)中挑選將要過期的數據淘汰

  3. volatile-random:從已設置過期時間的數據集(server.db[i].expires)中任意選擇數據淘汰

  4. allkeys-lru:從數據集(server.db[i].dict)中挑選最近最少使用的數據淘汰

  5. allkeys-random:從數據集(server.db[i].dict)中任意選擇數據淘汰

  6. no-enviction(驅逐):禁止驅逐數據


1.8-redis的優缺點

優點:

  1. 讀取性能快(讀110000次/s,寫81000次/s);
  2. 支持數據持久化;
  3. 數據結構簡單,對數據操作也簡單
  4. 支持事務,所有的操作都是原子性的,數據的更改要麼全部執行,要麼全部不執行;
  5. 支持主從複製,主機會自動將數據同步到從機,可以進行讀寫分離;

缺點:

  • 會受到內存的影響,只能適用於存儲比較小的數據量Redis
  • 只要斷電數據就丟失,或者說重啓Redis原來的數據也不會保存,不具備自動容錯和恢復功能,主機從機的宕機都會導致前端部分讀寫請求失敗,需要等待機器重啓或者手動切換前端的IP才能恢復。
  • 緩存和數據庫雙寫一致性問題,主機宕機,宕機前有部分數據未能及時同步到從機,切換IP後還會引入數據不一致的問題,降低了系統的可用性。
  • Redis 較難支持在線擴容,在集羣容量達到上限時在線擴容會變得很複雜。爲避免這一問題,運維人員在系統上線時必須確保有足夠的空間,這對資源造成了很大的浪費。

1.9-單線程的redis爲什麼這麼快

  • 純內存操作

  • 避免了頻繁的上下文切換

  • 採用了非阻塞I/O多路複用機制


1.10-redis的數據類型

字符串String、字典Hash、列表List、集合Set、有序集合SortedSet。


1.11-redis持久化

將Redis的數據從內存存儲到磁盤,防止服務宕機了內存數據丟失。


1.12-使用持久化的目的

  • redis的數據存儲在內存中,讀寫的熟讀很快,高效率
  • 爲了解決數據丟失的問題,同時啓動時能夠加載上次數據

1.13-redis的持久化流程

  1. 客戶端向服務端發送在內存中的數據的寫請求操作

  2. 服務端收到寫請求操作的數據;

  3. 服務端調用write這個系統調用,將數據往磁盤上寫,數據還在內存的緩衝區;(如果redis數據庫發生故障,後面兩步驟系統代替完成)

  4. 操作系統將緩衝區中的數據轉移到磁盤控制器上,數據在磁盤中;

  5. 磁盤控制器將數據寫到磁盤的物理介質中,到了這一步纔是真正的到達磁盤中;


1.14-redis的持久化機制有哪些

redis的持久化方式有兩種:

  • 一種是全量式(快照式):RDB

  • 一種是增量式(日誌式):AOF


1.15-RDB機制

指在指定的時間間隔內將內存中的數據集快照寫入磁盤,數據恢復時將快照文件直接再讀到內存


1.16-RDB的三種觸發機制

save、bgsave、自動化

save觸發方式:該命令會阻塞當前Redis服務器,執行save命令期間,Redis不能處理其他命令,直到RDB過程完成爲止。

bgsave觸發方式:執行該命令時,Redis會在後臺異步進行快照操作,快照同時還可以響應客戶端請求

自動觸發:自動觸發是由我們的配置文件來完成的。


1.17-RDB的優點

  1. 適合用於備份和災難恢復;
  2. 生成RDB文件的時候,redis主進程會fork()一個子進程來處理所有保存工作,主進程不需要進行任何磁盤IO操作;
  3. RDB恢復數據快

1.18-RDB的缺點

  1. 因爲是全量備份,內存緊湊;
  2. 快照持久化期間修改的數據不會被保存,可能丟失數據;

1.19-AOF機制

每次接收到一條改變數據的命令時,它將把該命令寫到一個 AOF 文件中,當 Redis 重啓時,它通過執行 AOF 文件中所有的命令來恢復數據。


1.20-AOF的三種觸發機制

always,everysec,no

always(每修改同步):同步持久化 每次發生數據變更會被立即記錄到磁盤 性能較差但數據完整性比較好

每秒同步everysec(每秒同步):異步操作,每秒記錄 如果一秒內宕機,有數據丟失

no(不同步):從不同步

1.21-AOF的優點

  1. 對數據保護的更好,不容易丟失,即使丟失也是隻丟失1秒的數據
  2. AOF文件過大導致重寫操作的時候,不會影響客戶端的讀寫操作
  3. 可以通過恢復機制,自動恢復所有數據

1.22-AOF的缺點

  1. AOF的文件會比較大
  2. 性能比RDB低

1.23-RDB和AOF的選擇

RDB的體積小,恢復速度快,但是容易丟失數據,AOF的體積比較大,恢復速度慢,可以更好地保護數據,以防止丟失,RDB相對於AOF來說效率更高,建議晚上服務器壓力不大的時候可以使用全量持久化,白天使用增量持久化。


1.24-什麼是redis集羣

集羣:通過使用多臺計算機處理一件事情,來擴展系統的性能,這種方式稱爲集羣

redis集羣:Redis 集羣是一個分佈式(distributed)、容錯(fault-tolerant)的 Redis 實現, 集羣可以使用的功能是普通單機 Redis 所能使用的功能的一個子集(subset)


1.25-集羣可以解決的問題

  • 讀寫分離:通過集羣,主服務器提供寫服務,從服務器提供讀服務。提高系統吞吐量
  • 提高可用性:即使某一臺服務器宕機,其他服務器還能夠代替這臺機器工作
  • 提高系統性能:一臺機器處理不了那麼多數據,多臺機器處理

1.26-集羣的方式

主從複製,哨兵,Cluster,除了三個redis自身的功能外,還有國人開發的Condis

詳細點擊鏈接參考:https://www.cnblogs.com/51life/p/10233340.html


1.27-什麼是CAP原則

一個分佈式系統不可能同時滿足一致性(C)可用性(A)分區容錯性(P)這三個基本需求,最多隻能同時滿足其中的2個。

一致性(C):數據在多個副本之間能夠保持一致的特性。

可用性(A) :系統提供的服務必須一直處於可用的狀態,每次請求都能獲取到非錯的響應——但是不保證獲取的數據爲最新數據。

分區容錯性(P):分佈式系統在遇到任何網絡分區故障的時候,仍然能夠對外提供滿足一致性和可用性的服務,除非整個網絡環境都發生了故障。

1.28- Redis集羣保證了CAP的什麼

redis集羣是通過犧牲一致性來保證可用性和分區容錯性。無法保證強一致性,只能保證最終一致性(主從服務器始終無法保證一致保持數據一致,所以選擇最終從服務器與主服務器數據一致


1.29-Redis集羣會有寫操作丟失嗎?

redis並不能保證數據的強一致性,所以在實際中集羣在特定的條件下可能會丟失寫操作。


1.30-大量的key需要設置同一時間過期,一般需要注意

如果我們把打倆ing的Key過期時間設在同一時間,時間一到,服務器會暫時性壓力過大,redis會出現短暫的卡頓現象,嚴重的話會出現緩存雪崩,所以我們可以設置隨機值,讓過期時間都有所不同,不要再同一時間。


//持續更新。。。。。。

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