02.Redis

2020-08-12 18:19:10

1.0 NoSQL 簡介

  • nosql是not only SQL的縮寫
  • memcache Redis MongoDB被稱爲nosql三劍客
  • 所以NoSQL數據庫的最大優勢體現爲:高效能、高可用性和可伸縮性。

在这里插入图片描述

在这里插入图片描述

  • LRU:最近最少使用 (快取數據的演算法)

2.0 Redis簡介

2.1 概念

  • 支援 strings, hashes ,lists ,sets ,sorted sets

2.2 官方地址

  • 官網地址 https://redis.io/

  • 下載地址 https://redis.io/download

  • 命令參考地址 http://redisdoc.com

2.3 應用場景

  1. 快取
  2. 數據臨時儲存位置
  3. 分佈式環境下解決Session不一致問題時的Session庫
  4. 流式數據去重(數據放在set裏面來達到去重)

3.0 Redis安裝

  1. 上傳並解壓

  2. 安裝C語言編譯環境

  3. 修改安裝環境

  4. 編譯安裝

  5. 啓動Redis伺服器

4.0 Redis五種常用數據結構(重點)

4.1 總體結構

4.2 String型別

  • key對應的一個單一值

4.3 List型別

  • 底層是基於鏈表實現

在这里插入图片描述

  • peek獲取單不刪除數據 pop獲取刪除數據
  • 可以用作棧或者佇列

4.4 Set型別

  • Redis的Set是String型別的無序集合。它是基於雜湊表實現的。

4.5 Hash型別

  • 本身就是一個鍵值對集合。可以當做Java中的Map<String,String>對待

4.6 ZSet型別

  • 成員不允許重複,分數可以重複

5.0 Redis命令列操作(重點)

5.1 基本操作

5.2 Key操作

  • 查詢 keys *
  • 判斷存在 exists key
  • TTL 檢視還可以存活多久
  • expire key seconds設定過期時間
  • persist key移除過期時間

5.3 String型別操作(常用的)

  • setbit 修改二進制 (從左往右 第一位是0)

    setbit 6 1
    setbit 7 0
    
  • ex 參數用於設定存活的秒數

  • px 參數用於設定存活的毫秒數

  • nx 參數用於新增(若已經存在,則新增失敗)

  • xx 參數用於更新(若不存在,則更新失敗)

  • m 參數用於對多個值進行操作

  • MSET,MGET,MSETNX

5.4 List型別操作

  • 只能從左到右讀,有兩套角標可以混着用,但是start 要在end前面 (0 ~ -1是遍歷)

5.5 Set型別操作(常用的)

  • 不允許空集合存在
  • smembers key 檢視所有數據
  • sismember key member 是否存在這個元素

5.6 Hash型別操作(常用的)

5.7 ZSet型別操作


總結:重點是String set hash三部分

如何使用Redis選擇的問題:

  1. 使用Redis儲存什麼?
  2. 型別選擇問題? 數據量小的時候用hash(rediskey(k-v)) 數據量大的時候使用string(k-v):避免數據熱點的問題(做負載均衡)
  3. RedisKey設計(求日活 新增什麼的有影響)

string型別的就是簡單的k-v

set就是k和v的集合


6.0 Redis持久化機制 機製(面試題)

6.1 RDB

6.1.1 機制 機製描述

  • 每隔一定的時間把記憶體中的數據作爲一個快照儲存到硬碟上的檔案中。Redis預設開啓RDB機制 機製。

6.1.2 觸發時機

  • 設定上寫着

在这里插入图片描述

6.1.3 相關設定

6.1.4 思考

RDB機制 機製能夠保證數據的絕對安全嗎?

  • 不能保證絕對安全

6.2 AOF

6.2.1 機制 機製描述

  • 儲存生成數據的命令

6.2.2 AOF基本設定

  • aof和rdb共存的時候 優先選擇aof

6.2.3 AOF重寫

  • 把幾步命令合成一步

6.3 持久化檔案損壞修復

  1. 第一步:備份要修復的appendonly.aof檔案

  2. 第二步:執行修復程式

    bin/redis-check-aof --fix ./appendonly.aof

  3. 第三步:重新啓動Redis

注意:所謂修復持久化檔案僅僅是把損壞的部分去掉,而沒法把受損的數據找回。

6.4 擴充套件閱讀

6.4.1 RDB

  • 適合大規模數據恢復(用的是快照)
  • 會丟失最後一次快照之後的修改

6.4.2 AOF

  • appendsync always可以保持數據的完整性
  • 檔案體積比RDB大很多

6.4.3 RDB和AOF並存

  • Redis重新啓動的時候會優先載入AOF檔案來恢復原始的數據
  • 但是並不要關閉RDB

6.4.4 使用建議

  • 如果Redis僅僅作爲快取可以不使用任何持久化方式

7.0 Redis事務控制(面試題)

7.1 Redis事務控制相關命令

7.2 命令佇列執行失敗的兩種情況

7.3 Watch

  • 採用的是樂觀鎖

7.4悲觀鎖和樂觀鎖

  • 悲觀鎖:只能是一個人存取,鎖定
  • 樂觀鎖:可以多人存取,當發生碰撞,那麼放棄自己的操作

8.0 Redis主從複製機制 機製(面試題)

在这里插入图片描述

  • 寫在master 讀在slave

8.1 讀寫分離的好處

  • 效能優化
  • 避免單點故障

8.2 搭建步驟

8.3 主從關係

  • slave掛了之後,重新啓動之後就會成爲master
  • master掛了之後,slave依舊是slave,但是叢集沒有master,只能等master重新啓動

8.4 初步測試

8.5 哨兵模式

8.5.1 作用

在这里插入图片描述

8.5.2 相關概念

  • 主觀下線
  • 客觀下線

8.5.3 設定方式

  • 簡單起見我們只設定一臺哨兵。

8.5.4 啓動哨兵

在这里插入图片描述

  • 這個 1 是客觀下線

  • slave掛了之後,重新啓動也會成爲slave ;master掛了之後,重新選舉master,把其他機器作爲新master的slave

9.0 發佈訂閱(瞭解)

9.1 訂閱一個頻道

  • SUBSCRIBE cctv

9.2 在一個頻道上發佈訊息

  • PUBLISH cctv hai

10.0 Jedis

10.1 一個對比

在这里插入图片描述

10.2 Redis準備