Redis基礎學習

目錄

  • 第一章、Redis數據庫的下載和安裝
    • 1.1)nosql數據庫和 Redis 介紹
    • 1.2)Windows中下載安裝Redis數據庫
    • 1.3)Linux中安裝Redis數據庫
    • 1.4)Linux中啟動redis
    • 1.5)Linux中關閉redis
  • 第二章、三種Redis客戶端連接Redis數據庫
    • 2.1)redis 命令行客戶端
    • 2.2)redis 遠程客戶端
    • 2.3)redis 編程客戶端Jedis
      • 2.3.1)下載 Jedis 和 Commons-Pool
      • 2.3.2)Java 應用使用 Jedis 準備
      • 2.3.3)使用jedis連接池操作數據
  • 第三章、Redis 命令大全
    • 3.1)通用命令
      • 語法:redis >ping
      • 語法:dbsize
      • 語法:select db
      • 語法:flushdb
      • 語法:exit 或 quit
      • 語法:redis-cli
    • 3.2)Redis 的 Key 的操作命令
      • 語法:keys pattern
      • 語法:exists key [key…]
      • 語法:expire key seconds
      • 語法:ttl key
      • 語法:type key
      • 語法:del key [key…]
    • 3.3) 字符串類型的value操作命令
      • 語法:set key value
      • 語法: get key
      • 語法:incr key
      • 語法:decr key
      • 語法:append key value
      • 語法:strlen key
      • 語法:getrange key start end
      • 語法:setrange key offset value
      • 語法:mset key value [key value…]
      • 語法:mget key [key …]
    • 3.4)哈希類型的value操作命令
      • 語法:hset hash 表的 key field value
      • 語法:hget key field
      • 語法:hmset key field value [field value…]
      • 語法:hmget key field [field…]
      • 語法:hgetall key
      • 語法:hdel key field [field…]
      • 語法:hkeys key
      • 語法:hvals key
      • 語法:hexists key field
    • 3.5)列表list類型的value操作命令
      • 語法:lpush key value [value…]
      • 語法:rpush key value [value…]
      • 語法:lrange key start stop
      • 語法:lindex key index
      • 語法:llen key
      • 語法:lrem key count value
      • 語法:lset key index value
      • 語法:linsert key BEFORE|ALFTER pivot value
    • 3.6)集合類型的value操作命令
      • 語法:sadd key member [member…]
      • 語法:smembers key
      • 語法:sismember key member
      • 語法:scard key
      • 語法:srem key member [member…]
      • 語法:srandmember key [count]
      • 語法:spop key [count]
    • 3.7)有序集合類型的value操作命令
      • 語法:zadd key score member [score member…]
      • 語法:zrange key start stop [WITHSCORES]
      • 語法:zrevrange key start stop [WITHSCORES]
      • 語法:zrem key member [member…]
      • 語法:zcard key
      • 語法:zrangebyscore key min max [WITHSCORES ] [LIMIT offset count]
      • 語法:zrevrangebyscore key max min [WITHSCORES ] [LIMIT offset count]
      • 語法:zcount key min max
  • 第四章、redis事務和watch機制
    • 4.1)redis事務,事務的三大命令
      • 語法:開啟事務 multi
      • 語法:執行事務 exec
      • 語法:取消事務 discard
    • 4.2)redis事務的錯誤和回滾的情況
    • 4.3)watch機制
      • 語法:watch key [key ...]
      • 語法:unwatch
  • 第五章、redis的持久化
    • 5.1)持久化概述
    • 5.2)RDB方式持久化
      • 5.2.1)配置過程
    • 5.3)AOF方式持久化
      • 5.3.1)配置過程
  • 第六章、redis的容災處理之哨兵
    • 6.1)主從復制模式
    • 6.2)Redis 主從復制實現、
    • 6.3)容災處理之哨兵
    • 6.4)Sentinel 配置

友情提醒:

先看文章目錄,大致了解文章知識點結構,點擊文章目錄可直接跳轉到文章指定位置。

第一章、Redis數據庫的下載和安裝

1.1)nosql數據庫和 Redis 介紹

nosql數據庫介紹:
解釋為 non-relational(非關系型數據庫)。在NoSQL 數據庫中數據之間是無聯系的數據的結構是松散的,可變的。
優勢:
大數據量,高性能,靈活的數據模型,高可用,低成本
劣勢:
(1)無關系,數據之間是無聯系的。
(2)不支持標準的 SQL,沒有公認的 NoSQL 標準
(3)沒有關系型數據庫的約束,大多數也沒有索引的概念
(4)沒有事務,不能依靠事務實現 ACID.
沒有豐富的數據類型(數值,日期,字符,二進制,大文本等)
Redis 介紹:
Remote Dictionary Server(Redis) 是一個開源的使用 ANSI C 語言編寫、支持網絡、可基于內存亦可持久化的 Key-Value 數據庫. 每種數據類型有自己的專屬命令。Key 是字符類型
其值(value)可以是 :
①字符串(String),它能存儲任何形式的字符串,包括二進制數據,序列化后的數據,JSON 化的對象甚至是一張圖片
在這里插入圖片描述
②哈希(Map),是一個 string 類型的 field 和 value 的映射表,hash 特別適合用于存儲對象。value分為field和value
在這里插入圖片描述

③列表(list),列表是簡單的字符串列表,按照插入順序排序。你可以添加一個元素到列表的頭部(左邊)或者尾部(右邊)
在這里插入圖片描述

④集合(sets) ,是 string 類型的無序集合,集合成員是唯一的,即集合中不能出現重復的數
據.

在這里插入圖片描述

⑤有序集合(sorted sets), string 類型元素的集合,不允許重復的成員。不同的是 zset 的每個元素都會關聯一個分數(分數可以重復),redis 通過分數來為集合中的成員進行從小到大的排序。
在這里插入圖片描述

1.2)Windows中下載安裝Redis數據庫


①Redis官網沒有Windows版本:https://redis.io/

②windows 版本下載:https://github.com/MSOpenTech/redis/releases

③下載的 Redis-x64-3.2.100.zip 解壓后即可使用。目錄結構:
在這里插入圖片描述

④雙擊 redis-server.exe 啟動 Redis

⑤按 ctrl+c 退出 Redis 服務程序


⑥找不到配置文件,可在命令行(cmd)啟動:

F:\redis_windows>redis-server.exe redis.windows.conf 

1.3)Linux中安裝Redis數據庫


①官網下載Linux版本Redis:https://redis.io/

在這里插入圖片描述

②使用 Xftp 工具傳輸 redis-3.2.9.tar 到 linux 系統

Xftp工具下載和使用教程鏈接

③解壓 redis-3.2.9.tar 到 usr/local 目錄

tar -zxvf redis-3.2.9.tar.gz -C /usr/local

④在/usr/local/redis-3.2.9目錄下使用make命令編譯 Redis 文件

cd /usr/local/redis-3.2.9
make

⑤出現錯誤gcc找不到報錯如圖:

在這里插入圖片描述
解決方式:安裝gcc

yum -y install gcc

⑥安裝gcc后執行 make distclean命令,出現報錯

在這里插入圖片描述
解決方式:執行如下命令

make MALLOC=libc

⑦再次執行make,出現如下頁面代表成功

在這里插入圖片描述
⑧再執行 make install

make install

⑨查看make編譯結果

#先進入src目錄
cd src
#再ls
ls

在這里插入圖片描述

1.4)Linux中啟動redis

①前臺方式啟動Redis 的服務器不能退出當前窗口, 退出窗口,應用終止: src 目錄下執行

./redis-server

②后臺方式啟動Redis 的服務器,src 目錄下執行

./redis-server &

③查看redis進程

ps -ef | grep redis

1.5)Linux中關閉redis

①執行 redis-cli shutdown

redis-cli shutdown

②停止redis進程

#這里的4628PID
kill -9 4628

第二章、三種Redis客戶端連接Redis數據庫

2.1)redis 命令行客戶端

①后臺方式開啟redis

redis-server &

②直接連接 redis (默認 ip127.0.0.1,端口 6379):

redis-cli 

使用ping命令查看redis是否響應回復:PONG

ping

2.2)redis 遠程客戶端

①下載桌面客戶端Redis Desktop Manager不過現在改名叫RESP.app了,而且除了Linux端免費其他的都收費,官網地址:https://redisdesktop.com/

②可直接百度網盤提取免費的舊版本:redis遠程客戶端文件下載后雙擊exe文件安裝

在這里插入圖片描述
③點擊next,選擇安裝目錄,點擊install即可

在這里插入圖片描述
④進入/usr/local/redis-3.2.9安裝目錄,編輯redis.conf文件

cd /usr/local/redis-3.2.9
vi redis.conf

⑤如下圖:將bind注釋,將保護模式改為no,保存退出

在這里插入圖片描述
⑥關閉redis后,使用配置文件重新啟動

#關閉redis
redis-cli shutdown
#以配置文件啟動
redis-server redis.conf &

⑦使用遠程客戶端連接客戶端

在這里插入圖片描述
⑧界面介紹
在這里插入圖片描述

2.3)redis 編程客戶端Jedis

jedis 是一個很小但很健全的 redis 的 java 客戶端。通過 Jedis 可以像使用 Redis 命令行一樣使用 Redis。

jedis 完全兼容 redis 2.8.x and 3.x.x
Jedis 源碼:https://github.com/xetorthio/jedis
api 文檔:http://xetorthio.github.io/jedis/

2.3.1)下載 Jedis 和 Commons-Pool

①瀏覽器打開:http://search.maven.org/ ,搜索 jedis。在 Download 處,點擊 jar下載
在這里插入圖片描述
為了避免每次使用 Jedis 對象時都需要重新構建,Jedis 提供了 JedisPool。JedisPool 是基于Commons Pool 2 實現的一個線程安全的連接池。
瀏覽器打開:http://search.maven.org/ ,搜索 commons-pool2。在 Download 處,點擊 jar 下載
在這里插入圖片描述

2.3.2)Java 應用使用 Jedis 準備

項目中加入兩個jar包:
jedis-2.9.0.jar
commons-pool2-2.4.2.jar
在這里插入圖片描述

2.3.3)使用jedis連接池操作數據

①字符串
在這里插入圖片描述
② 哈希
jedis連接實例池
在這里插入圖片描述
使用連接池操作 hash操作數據
在這里插入圖片描述
在這里插入圖片描述

③列表 list
在這里插入圖片描述

④集合 Set
在這里插入圖片描述

⑤有序集合 Sorted Set
在這里插入圖片描述
⑥事務
支持部分事務操作
在這里插入圖片描述

第三章、Redis 命令大全

3.1)通用命令

①溝通命令,查看狀態, 返回 PONG

語法:redis >ping


②查看當前數據庫中 key 的數目:

語法:dbsize


③redis默認十六個庫,切換庫命令:

語法:select db

在這里插入圖片描述

④刪除當前庫的數據:

語法:flushdb


⑤退出當前 redis 連接:

語法:exit 或 quit


⑥登錄自帶redis 命令行客戶端:

語法:redis-cli

3.2)Redis 的 Key 的操作命令


①查看key

語法:keys pattern

通配符: 
* :表示 0-多個字符 ,例如:keys * 查詢所有的 key , *表示 0 或多個字符
?:表示單個字符,例如:wo?d , 匹配 word , wood

在這里插入圖片描述
②判斷 key 是否存在

語法:exists key [key…]

exists key
exists key1 key2...

在這里插入圖片描述
③ 設置 key 的生存時間,超過時間,key 自動刪除。單位是秒。

語法:expire key seconds

在這里插入圖片描述
④以秒為單位,返回 key 的剩余生存時間(ttl: time to live)返回值:
-1 :沒有設置 key 的生存時間, key 永不過期。
-2 :key 不存在

語法:ttl key

在這里插入圖片描述

⑤查看 key 所存儲值的數據類型返回值:字符串表示的數據類型
none (key 不存在)
string (字符串)
list (列表)
set (集合)
zset (有序集)
hash (哈希表)

語法:type key

在這里插入圖片描述

⑥刪除指定存在的 key ,不存在的 key 忽略。
返回值:數字,刪除的 key 的數量。

語法:del key [key…]

在這里插入圖片描述

3.3) 字符串類型的value操作命令

①將字符串值 value 設置到 key 中,已經存在的 key 設置新的 value,會覆蓋原來的值。

語法:set key value

在這里插入圖片描述
②獲取 key 中設置的字符串值

語法: get key

在這里插入圖片描述

③將 key 中儲存的數字值加 1,如果 key 不存在,則 key 的值先被初始化為 0 再執行 incr 操作(只能對數字類型的數據操作)

語法:incr key

在這里插入圖片描述

④將 key 中儲存的數字值減1,如果 key 不存在,則么 key 的值先被初始化為 0 再執行 decr 操作(只能對數字類型的數據操作)

語法:decr key

在這里插入圖片描述

⑤如果 key 存在, 則將 value 追加到 key 原來舊值的末尾如果 key 不存在, 則將 key 設置值為 value
返回值:追加字符串之后的總長度

語法:append key value

在這里插入圖片描述

⑥返回 key 所儲存的字符串值的長度返回值:
如果key存在,返回字符串值的長度
key不存在,返回0

語法:strlen key

在這里插入圖片描述

⑦獲取 key 中字符串值從 start 開始 到 end 結束 的子字符串,包括 start 和 end, 負數表示從字符串的末尾開始, -1 表示最后一個字符
返回值:截取的子字符串。

語法:getrange key start end

在這里插入圖片描述
在這里插入圖片描述

⑧用 value 覆蓋(替換)key 的存儲的值從 offset 開始,不存在的 key 做空白字符串。
返回值:修改后的字符串的長度

語法:setrange key offset value

在這里插入圖片描述
⑨同時設置一個或多個 key-value 對

語法:mset key value [key value…]

在這里插入圖片描述

⑩獲取(一個或多個)給定 key 的值
返回值:包含所有 key 的列表

語法:mget key [key …]

在這里插入圖片描述

3.4)哈希類型的value操作命令

①哈希類型field(域 )和 value 的隱射表,value分為field和value,hset可將key中的值設置為value,如果 key 不存在,則新建 hash 表,執行賦值,如果有 field ,則覆蓋值。
返回值:
如果 field 是 hash 表中新 field,且設置值成功,返回 1
如果 field 已經存在,舊值覆蓋新值,返回 0

語法:hset hash 表的 key field value

在這里插入圖片描述
key鍵已經存在則覆蓋
在這里插入圖片描述
②獲取哈希表 key 中給定域 field 的值
返回值:field 域的值,如果 key 不存在或者 field 不存在返回 nil

語法:hget key field

在這里插入圖片描述
獲取不存在的 field,返回nil
在這里插入圖片描述

③同時將多個 field-value (域-值)設置到哈希表 key 中,此命令會覆蓋已經存在的 field, 若hash 表 key 不存在,創建空的 hash 表,執行 hmset.
返回值:設置成功返回 ok, 如果失敗返回一個錯誤

語法:hmset key field value [field value…]

在這里插入圖片描述
key 類型不是 hash,產生錯誤
在這里插入圖片描述
④獲取哈希表 key 中一個或多個給定域的值
返回值:返回和 field 順序對應的值,如果 field 不存在,返回 nil

語法:hmget key field [field…]

在這里插入圖片描述

⑤獲取哈希表 key 中所有的域和值
返回值:以列表形式返回 hash 中域和域的值 ,key 不存在,返回空 hash

語法:hgetall key

在這里插入圖片描述
不存在的 key,返回空列表
在這里插入圖片描述
⑥刪除哈希表 key 中指定域 field,不存在 field 直接忽略
返回值:成功刪除的 field 的數量

語法:hdel key field [field…]

在這里插入圖片描述

⑦查看哈希表 key 中的所有 field 域
返回值:包含所有 field 的列表,key 不存在返回空列表

語法:hkeys key

在這里插入圖片描述

⑧返回哈希表中所有域的值
返回值:包含哈希表所有域值的列表,key 不存在返回空列表

語法:hvals key

在這里插入圖片描述

⑨查看哈希表 key 中,給定域 field 是否存在
返回值:如果 field 存在,返回 1, 其他返回 0

語法:hexists key field

在這里插入圖片描述

3.5)列表list類型的value操作命令

①將一個或多個值 value 插入到列表 key 的表頭(最左邊),從左邊開始加入值,從左到右的順序依次插入到表頭,返回值:數字,新列表的長度

語法:lpush key value [value…]

在這里插入圖片描述
在這里插入圖片描述

②將一個或多個值 value 插入到列表 key 的表尾(最右邊),各個 value 值按從左到右的順序依次插入到表尾
返回值:數字,新列表的長度

語法:rpush key value [value…]

在這里插入圖片描述

③獲取列表 key 中指定區間內的元素,0 表示列表的第一個元素,start , stop 是列表的下標值, -1 表示列表的最后一個元素, start ,stop 超出列表的范圍不會出現錯誤。
返回值:指定區間的列表

語法:lrange key start stop

在這里插入圖片描述
顯示列表中第 2 個元素,下標從 0 開始
在這里插入圖片描述

④查詢獲取列表 key 中下標為指定 index 的元素,0 表示列表的第一個元素,start , stop 是列表的下標值, -1 表示列表的最后一個元素,
返回值:指定下標的元素;index 不在列表范圍,返回 nil

語法:lindex key index

在這里插入圖片描述
在這里插入圖片描述
⑤獲取列表 key 的長度
返回值:數值,列表的長度; key 不存在返回 0

語法:llen key

在這里插入圖片描述
⑥根據參數 count 的值,移除列表中與參數 value 相等的元素, count >0 ,從列表的左側向右開始移除; count < 0 從列表的尾部開始移除;count = 0 移除表中所有與 value 相等的值。
返回值:數值,移除的元素個數

語法:lrem key count value

在這里插入圖片描述
刪除列表中所有的指定元素,刪除所有的 java
在這里插入圖片描述
⑦將列表 key 下標為 index 的元素的值設置為 value。
返回值:設置成功返回 ok ; key 不存在或者 index 超出范圍返回錯誤信息

語法:lset key index value

在這里插入圖片描述

⑧將值 value 插入到列表 key 當中位于值 pivot 之前或之后的位置。key 不存在,pivot 不在列表中,不執行任何操作。
返回值:命令執行成功,返回新列表的長度。沒有找到 pivot 返回 -1, key 不存在返回 0。

語法:linsert key BEFORE|ALFTER pivot value

修改列表 arch,在值 dao 之前加入 service
在這里插入圖片描述
操作不存在的 pivot
在這里插入圖片描述

3.6)集合類型的value操作命令

①將一個或多個 member 元素加入到集合 key 當中,已經存在于集合的 member 元素將被忽略,不會再加入。
返回值:加入到集合的新元素的個數。不包括被忽略的元素

語法:sadd key member [member…]

在這里插入圖片描述

②獲取集合 key 中的所有成員元素,不存在的 key 視為空集合

語法:smembers key

在這里插入圖片描述

③判斷 member 元素是否是集合 key 的成員
返回值:member 是集合成員返回 1,其他返回 0

語法:sismember key member

在這里插入圖片描述

④獲取集合里面的元素個數
返回值:數字,key 的元素個數。 其他情況返回 0

語法:scard key

在這里插入圖片描述

⑤刪除集合 key 中的一個或多個 member 元素,不存在的元素被忽略。
返回值:數字,成功刪除的元素個數,不包括被忽略的元素。

語法:srem key member [member…]

在這里插入圖片描述

⑥只提供 key,隨機返回集合中一個元素;提供了 count 時,count 正數, 返回包含 count 個數元素的集合, 集合元素各不相同。count 是負數,返回一個 count 絕對值的長度的集合, 集合中元素可能會重復多次。
返回值:一個元素;多個元素的集合

語法:srandmember key [count]

隨機顯示集合的一個元素
在這里插入圖片描述
使用 count 參數, count 是正數
在這里插入圖片描述
使用 count 參數,count 是負數
在這里插入圖片描述
⑦隨機從集合中刪除一個元素, count 是刪除的元素個數。
返回值:被刪除的元素,key 不存在或空集合返回 nil

語法:spop key [count]

隨機從集合刪除一個元素
在這里插入圖片描述
隨機刪除指定個數的元素
在這里插入圖片描述

3.7)有序集合類型的value操作命令

①將一個或多個 member 元素及其 score 值加入到有序集合 key 中,如果 member 存在集合中,則更新值;score 可以是整數或浮點數
返回值:數字,新添加的元素個數

語法:zadd key score member [score member…]

創建保存學生成績的集合:studentscore
在這里插入圖片描述
使用浮點數作為 score
在這里插入圖片描述

②查詢有序集合指定區間內的元素。集合成員按 score 值從小到大來排序。 start, stop 都是從 0 開始。0 是第一個元素,1 是第二個元素。以 -1 表示最后一個成員,-2 表示倒數第二個成員。使用WITHSCORES 選項讓 score 和 value 一同返回。
返回值:自定區間的成員集合

語法:zrange key start stop [WITHSCORES]

顯示集合的全部元素,不使用 WITHSCORES 則不顯示 score
在這里插入圖片描述
顯示集合全部元素,并使用 WITHSCORES
在這里插入圖片描述
顯示0,1 二個成員
在這里插入圖片描述
排序顯示浮點數的 score
在這里插入圖片描述
③返回有序集 key 中,指定區間內的成員。其中成員的位置按 score 值遞減(從大到小) 來排列。其它同 zrange 命令。
返回值:自定區間的成員集合

語法:zrevrange key start stop [WITHSCORES]

在這里插入圖片描述
④刪除有序集合 key 中的一個或多個成員,不存在的成員被忽略
返回值:被成功刪除的成員數量,不包括被忽略的成員。

語法:zrem key member [member…]

在這里插入圖片描述

⑤獲取有序集 key 的元素成員的個數返回值:key 存在返回集合元素的個數, key 不存在,返回 0

語法:zcard key

在這里插入圖片描述

⑥獲取有序集 key 中,所有 score 值介于 min 和 max 之間(包括 min 和 max)的成員,有序成員是按遞增(從小到大)排序。
min ,max 是包括在內 , 使用符號 ( 表示不包括。 min , max 可以使用 -inf ,
+inf 表示最小和最大 limit 用來限制返回結果的數量和區間。 withscores 顯示 score 和 value
返回值:指定區間的集合數據使用的準備數據

語法:zrangebyscore key min max [WITHSCORES ] [LIMIT offset count]

在這里插入圖片描述

在這里插入圖片描述
顯示指定具體區間的集合數據,開區間(不包括 min,max)
在這里插入圖片描述
顯示整個集合的所有數據
在這里插入圖片描述
使用 limit 增加新的數據
在這里插入圖片描述
在這里插入圖片描述
⑦返回有序集 key 中, score 值介于 max 和 min 之間(默認包括等于 max 或 min )的所有的成員。有序集成員按 score 值遞減(從大到小)的次序排列。其他同 zrangebyscore

語法:zrevrangebyscore key max min [WITHSCORES ] [LIMIT offset count]

在這里插入圖片描述

⑧返回有序集 key 中, score 值在 min 和 max 之間(默認包括 score 值等于 min 或 max ) 的成員的數量

語法:zcount key min max

工資在 3000-5000 的員工數量
在這里插入圖片描述

第四章、redis事務和watch機制

4.1)redis事務,事務的三大命令

什么是redis事務
Redis 中的事務(transaction)是一個單獨隔離的操作,保證兩個或兩個以上的命令集合按需排隊并順序執行,中間不會被任何其他操作打斷。
redis事務其實是指運用事務的思想實現一組集合命令的執行,沒有回滾的概念,嚴格意義上沒有事務。

①multi - setAutoCommoit(false)-事務開啟

語法:開啟事務 multi

作用:標記一個事務的開始。通過multi,后續的命令都會按照先后順序被放進一個隊列當中。當用戶鍵入exec后,這些指令都會按順序執行。
返回值:總是返回 ok

②exec -執行

語法:執行事務 exec

作用:執行所有事務塊內的命令
返回值:事務內的所有執行語句內容,事務被打斷(影響)返回 nil


③discard -取消

語法:取消事務 discard

作用:取消事務,如果開啟multi后輸入若干命令,再鍵入discard,則之前的命令令通通取消執行。
返回值:總是返回 ok

# 開啟事務
127.0.0.1:6379> MULTI
OK
# 輸入兩個或者兩個以上命令
127.0.0.1:6379(TX)> set k1 v1
QUEUED
127.0.0.1:6379(TX)> set k2 v2
QUEUED
# 執行命令
127.0.0.1:6379(TX)> EXEC
1) OK
2) OK
127.0.0.1:6379> keys *
1) "k1"
2) "k2"

4.2)redis事務的錯誤和回滾的情況


①組隊時出錯,錯誤對于redis來說是已知的,事務中的所有指令都會失效。
在這里插入圖片描述

127.0.0.1:6379> MULTI
OK
127.0.0.1:6379(TX)> set k1 v1
QUEUED
127.0.0.1:6379(TX)> set k2 v2
QUEUED
127.0.0.1:6379(TX)> set k33
(error) ERR wrong number of arguments for 'set' command
127.0.0.1:6379(TX)> set k4 v4
QUEUED
127.0.0.1:6379(TX)> exec
(error) EXECABORT Transaction discarded because of previous errors.
127.0.0.1:6379> keys *
(empty array)


②運行時出錯:因為錯誤是未知的,所以redis必須執行時才能知道錯誤,而redis無錯誤回滾機制,會繼續執行后續指令并有效。
在這里插入圖片描述

127.0.0.1:6379> MULTI
OK
127.0.0.1:6379(TX)> set k1 v1
QUEUED
127.0.0.1:6379(TX)> INCR k1
QUEUED
127.0.0.1:6379(TX)> set k2 v2
QUEUED
127.0.0.1:6379(TX)> EXEC
1) OK
2) (error) ERR value is not an integer or out of range
3) OK
127.0.0.1:6379> keys *
1) "k1"
2) "k2"
127.0.0.1:6379>

4.3)watch機制

①watch 監視某個或者某幾個key的值,如果有 key 的 value 值在事務 EXEC 執行之前被修改了,那么事務將被打斷。
返回值:總是返回 ok

語法:watch key [key …]


②取消 WATCH 命令對所有 key 的監視。如果在執行 WATCH 命令之后, EXEC 命令或 DISCARD 命令先被執行了的話,那么就不需要再執行 UNWATCH 了
返回值:總是返回 ok

語法:unwatch


③例子
啟動服務器redis-server , 再開啟兩個客戶端連接。 分別叫 A 客戶端 (紅色)和 B 客戶端(黃色)。
在這里插入圖片描述
在這里插入圖片描述
1)在 A 客戶端設置 key : str.lp 登錄人數為 10
2)在 A 客戶端監視 key : str.lp
3)在 A 客戶端開啟事務 multi
4)在 A 客戶端修改 str.lp 的值為 11
5)在 B 客戶端修改 str.lp 的值為 15
6)在 A 客戶端執行事務 exec
7)在 A 客戶端查看 str.lp 值,A 客戶端執行的事務沒有提交,因為 WATCH 的 str.lp 的值已經被修改了, 所以放棄了事務。
在這里插入圖片描述

第五章、redis的持久化

5.1)持久化概述

①持久化可以理解為將數據存儲到一個不會丟失的地方,Redis 的數據存儲在內存中,電腦關閉數據就會丟失,所以放在內存中的數據不是持久化的,而放在磁盤就算是一種持久化。

②為解決這個問題,redis提供了兩種持久化的方式,便于發生故障后能迅速恢復數據,分別是RDB(Redis DataBase)和AOF(Append Only File)。

③兩種方式也可以同時使用,優先采用AOF方式來進行數據恢復,因為AOF方式的數據恢復完整度更高。

5.2)RDB方式持久化

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

②RDB 技術非常適合做備份,可以保存最近一個小時,一天,一個月的全部數據。保存數據是在單獨的進程中寫文件,不影響 Redis 的正常使用。RDB 恢復數據時比其他 AOF 速度快。

③RDB缺點:即使每5分鐘都持久化一次,當redis故障時,仍然會有近5分鐘的數據丟失。

5.2.1)配置過程

在配置文件 redis.conf 中搜索 SNAPSHOTTING, 查找在注釋開始和結束之間的關于 RDB 的配置說明。配置地方有三處。

①: 配置執行 RDB 生成快照文件的時間策略。 讓它在“ N 秒內數據集至少有 M 個 key 改動”
這一條件被滿足時,自動保存一次數據集。 配置格式:save  <seconds>  <changes>
save 900 1
save 300 10 
save 60 10000 ②: dbfilename:設置 RDB 的文件名,默認文件名為 dump.rdb 
③: dir:指定 RDB 文件的存儲位置,默認是 ./ 當前目錄 

配置步驟:
①:查看 ps -ef | grep redis ,如果 redis 服務啟動,先停止。
在這里插入圖片描述
②:修改 redis.conf 文件, 修改前先備份,執行 cp redis.conf bak_redis.conf
在這里插入圖片描述
查看默認啟用的 RDB 文件
在這里插入圖片描述
③:編輯 redis.conf 增加 save 配置, 修改文件名等。vim redis.conf
在這里插入圖片描述
修改的內容:
在這里插入圖片描述
在這里插入圖片描述
把原來的默認的 dump.rdb 刪除,修改 redis.conf 后,重新啟動 redis
④:在 20 秒內,修改三個 key 的值

在這里插入圖片描述
⑤:查看生成的 rdb 文件

在這里插入圖片描述

5.3)AOF方式持久化

①Redis 每次接收到一條改變數據的命令時,它將把該命令寫到一個 AOF 文件中(只記錄寫操作,讀操作不記錄),當 Redis 重啟時,它通過執行 AOF 文件中所有的命令來恢復數據。

②在同樣數據規模時,AOF文件要比RDB文件的體積大。恢復速度要慢于RDB方式。

③Redis 支持在不影響服務的前提下在后臺重構 AOF 文件,讓文件得以整理變小。比如:做一百次加法計算,最后你只會在數據庫里面得到最終的數值,但是在你的 AOF 里面會存在 100 次記錄,其中有99 條記錄對最終的結果是無用的會被整理掉;

5.3.1)配置過程

AOF 方式的數據持久化,僅需在 redis.conf 文件中配置即可配置項:
①:停止運行的 redis , 備份要修改的 redis.conf
②:查看 redis 安裝目錄/src 下有無 .aof 文件。 默認是在 redis 的當前目錄
在這里插入圖片描述

③:編輯 redis.conf, appendonly默認是 no,改成 yes 即開啟了 aof 持久化 , 查看 appendfilname 的文件名稱是appendonly.aof
在這里插入圖片描述
④:appendfsync:配置向 aof 文件寫命令數據的策略:
no:不主動進行同步操作,而是完全交由操作系統來做(即每 30 秒一次),比較快但不是很安全。
always:每次執行寫入都會執行同步,慢一些但是比較安全。
everysec:每秒執行一次同步操作,比較平衡,介于速度和安全之間。這是默認項。
在這里插入圖片描述
⑤:dir : 指定 RDB 和 AOF 文件存放的目錄,默認是 ./

⑥:auto-aof-rewrite-min-size:允許重寫的最小 AOF 文件大小,默認是 64M 。當 aof 文件大于 64M 時,開始整理 aof文件, 去掉無用的操作命令。縮小 aof 文件。

⑦測試:在 redis 客戶端執行 寫入命令
在這里插入圖片描述
查看 aof 文件
在這里插入圖片描述
在這里插入圖片描述

第六章、redis的容災處理之哨兵

6.1)主從復制模式

①單點故障:數據存儲在一臺服務器上,服務器出現故障就會導致數據丟失。所以我們需要將數據復制多份部署在多臺不同的服務器上,在配置文件中指定這幾臺 redis 之間的主從關系。

②主從復制:多臺 redis 服務器的數據同步功能,主服務器(master)負責寫入數據,同時把寫入的數據實時同步到從(slave )機器,從服務器負責讀

③當 Master 服務出現故障,需手動將 slave 中的一個提升為 master, 剩下的 slave 掛至新的master 上(冷處理:機器掛掉了,再處理)

6.2)Redis 主從復制實現、

修改配置文件,啟動時,服務器讀取配置文件,并自動成為指定服務器的從服務器,從而構成主從復制的關系
①如果 Redis 啟動,先停止,模擬多 Reids 服務器,從原有的 redis.conf 配置文件中拷貝三份,分別命名為 redis6380.conf, redis6382.conf , redis6384.conf
在這里插入圖片描述
②編輯作為 Master 的配置文件 redis6380.conf : 在空文件加入如下內容

#包含原來的配置文件內容。/usr/local/redis-3.2.9/redis.conf 按照自己的目錄設置。
include /usr/local/redis-3.2.9/redis.conf daemonize yes port 6380 
pidfile /var/run/redis_6380.pid 
logfile 6380.log 
dbfilename dump6380.rdb 

配置項說明:
include :包含原來的配置文件內容。/usr/local/redis-3.2.9/redis.conf 按照自己的目錄設置。
daemonize:yes 后臺啟動應用,相當于 ./redis-server & , &的作用。
port : 自定義的端口號
pidfile : 自定義的文件,表示當前程序的 pid ,進程 id。
logfile:日志文件名
dbfilename:持久化的 rdb 文件
③編輯作為 Slave服務器的配置文件redis6382.conf 和 redis6384.conf: 在空文件加入如下內容

#①:redis6382.conf中加入: 
include /usr/local/redis-3.2.9/redis.conf daemonize yes port 6382 
pidfile /var/run/redis_6382.pid 
logfile 6382.log 
dbfilename dump6382.rdb 
slaveof 127.0.0.1 6380 
#②:redis6384.conf中加入: 
include /usr/local/redis-3.2.9/redis.conf daemonize yes port 6384 
pidfile /var/run/redis_6384.pid 
logfile 6384.log 
bfilename dump6384.rdb 
slaveof 127.0.0.1 6380 

配置項說明: slaveof : 表示當前 Redis 是誰的從。當前是 127.0.0.1 端口 6380 這個 Master 的從服務器。

④使用配置文件方式啟動redis,并查看啟動進程
在這里插入圖片描述
⑤使用指定端口連接 Redis 服務器,查看配置后的服務信息

./redis-cli -p 端口

在這里插入圖片描述
查看6380端口的服務器信息

info replication 

在這里插入圖片描述
在新的 Xshell 窗口分別登錄到 6382 ,6384 查看信息
在這里插入圖片描述
⑥向 Master 寫入數據,先執行 flushall 清除數據,避免干擾到測試數據。 生產環境謹慎使用。
在這里插入圖片描述
⑦在從服務器 Slave 讀數據,可以讀主 Master 的數據,不能寫
在這里插入圖片描述
Slave 寫數據失敗
在這里插入圖片描述

6.3)容災處理之哨兵

Sentinel 哨兵是 redis 官方提供的高可用方案,監控多個 Redis 服務實例的運行情況。
Sentinel 系統是一個運行在特殊模式下的 Redis 服務器。Redis Sentinel 是在多個 Sentinel 進程環境下互相協作工作的。

Sentinel 系統有三個主要任務:
監控:Sentinel 不斷的檢查主服務和從服務器是否按照預期正常工作。
提醒:被監控的 Redis 出現問題時,Sentinel 會通知管理員或其他應用程序。
自動故障轉移:監控的主 Redis 不能正常工作,Sentinel 會開始進行故障遷移操作。將一個從服務器升級新的主服務器。 讓其他從服務器掛到新的主服務器。同時向客戶端提供新的主服務器地址。
在這里插入圖片描述

6.4)Sentinel 配置

①復制三份sentinel.conf文件
在這里插入圖片描述
Sentinel系統默認 port 是26379 。三個配置port分別設置為 26380 , 26382 , 26384 。三個文件分別命名:
sentinel26380.conf
sentinel26382.conf
sentinel26384.conf
執行復制命令 cp sentinel.conf xxx.conf
在這里插入圖片描述
②三份 sentinel 配置文件修改
sentinel26380.conf
1、修改 port
在這里插入圖片描述
2、修改監控的 master 地址 6382
在這里插入圖片描述
sentinel26382.conf 文件同樣修改
port 26382
master的port :6382
sentinel26384.conf 文件同樣修改
port 26384
master的port :6382

③啟動主從(Master/Slave)Redis
啟動 Reids
在這里插入圖片描述
查看 Master 的配置信息連接到 6382 端口
在這里插入圖片描述
使用 info 命令查看 Master/Slave
在這里插入圖片描述
④啟動 Sentinel模式下的Redis服務實例

在 XShell 開啟三個窗口分別執行命令,將創建三個監視主服務器的Sentinel實例:
./redis-sentinel …/sentinel26380.conf
./redis-sentinel …/sentinel26382.conf
./redis-sentinel …/sentinel26384.conf
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
⑤讓主 Redis 不能工作

讓 Master 的 Redis 停止服務, 先執行 info replication 確認 Master 的 Redis 后再執行 shutdown

在這里插入圖片描述
查看當前 Redis 的進程情況

在這里插入圖片描述
⑥Sentinel 的起作用

在 Master 執行 shutdown 后, 稍微等一會 Sentinel 要進行投票計算,從可用的 Slave
選舉新的 Master。查看 Sentinel 日志。
在這里插入圖片描述
查看新的 Master
在這里插入圖片描述
查看原 Slave 的變化

在這里插入圖片描述
⑦新的 Redis 加入 Sentinel 系統,自動加入 Master

重新啟動 6382
在這里插入圖片描述
查看 6384 的信息
在這里插入圖片描述
測試數據:在 Master 寫入數據
在這里插入圖片描述
在 6382 上讀取數據,不能寫入
在這里插入圖片描述

⑧監控
1)Sentinel 會不斷檢查 Master 和 Slave 是否正常
2)如果 Sentinel 掛了,就無法監控,所以需要多個哨兵,組成 Sentinel 網絡,一個健康的
Sentinel 至少有 3 個 Sentinel 應用。 彼此在獨立的物理機器或虛擬機。
3)監控同一個 Master 的 Sentinel 會自動連接,組成一個分布式的 Sentinel 網絡,互相通信并交換彼此關于被監控服務器的信息
4)當一個 Sentinel 認為被監控的服務器已經下線時,它會向網絡中的其它 Sentinel 進行確認,判斷該服務器是否真的已經下線
5)如果下線的服務器為主服務器,那么 Sentinel 網絡將對下線主服務器進行自動故障轉移,通過將下線主服務器的某個從服務器提升為新的主服務器,并讓其從服務器轉移到新的主服務器下,以此來讓系統重新回到正常狀態
6)下線的舊主服務器重新上線,Sentinel 會讓它成為從,掛到新的主服務器下

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/36224.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/36224.shtml
英文地址,請注明出處:http://en.pswp.cn/news/36224.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

安全遠控如何設置?揭秘ToDesk、TeamViewer 、向日葵安全遠程防御大招

寫在前面一、遠程控制&#xff1a;安全性不可忽略二、遠控軟件安全設置實測? ToDesk? TeamViewer? 向日葵 三、遠控安全的亮點功能四、個人總結與建議 寫在前面 說到遠程辦公&#xff0c;相信大家都不陌生。遠程工作是員工在家中或者其他非辦公場所上班的一種工作模式&…

傳輸層協議

傳輸層協議 再談端口號端口號范圍劃分認識知名端口號兩個問題netstatpidof UDP協議UDP協議端格式UDP的特點面向數據報UDP的緩沖區UDP使用注意事項基于UDP的應用層協議 TCP協議TCP協議段格式確認應答(ACK)機制超時重傳機制連接管理機制理解 CLOSE_WAIT 狀態理解TIME_WAIT狀態解決…

修改el-select和el-input樣式;修改element-plus的下拉框el-select樣式

修改el-select樣式 .select_box{// 默認placeholder:deep .el-input__inner::placeholder {font-size: 14px;font-weight: 500;color: #3E534F;}// 默認框狀態樣式更改:deep .el-input__wrapper {height: 42px;background-color: rgba(0,0,0,0)!important;box-shadow: 0 0 0 …

OptaPlanner筆記6 N皇后

N 個皇后 問題描述 將n個皇后放在n大小的棋盤上&#xff0c;沒有兩個皇后可以互相攻擊。 最常見的 n 個皇后謎題是八個皇后謎題&#xff0c;n 8&#xff1a; 約束&#xff1a; 使用 n 列和 n 行的棋盤。在棋盤上放置n個皇后。沒有兩個女王可以互相攻擊。女王可以攻擊同一水…

如何做好一名網絡工程師?具體實踐?

預防問題 – 資格與認證 在安裝線纜或升級網絡時測試線纜是預防問題的有效方式。對已安裝布線進行測試的方法有兩種。 資格測試確定布線是否有資格執行某些操作 — 換言之&#xff0c;支持特定網絡速度或應用。盡管“通過”認證測試也表明按標準支持某一網絡速度或應用的能力…

Redux - Redux在React函數式組件中的基本使用

文章目錄 一&#xff0c;簡介二&#xff0c;安裝三&#xff0c;三大核心概念Store、Action、Reducer3.1 Store3.2 Reducer3.3 Action 四&#xff0c;開始函數式組件中使用4.1&#xff0c;引入store4.1&#xff0c;store.getState()方法4.3&#xff0c;store.dispatch()方法4.4&…

cookie和session的區別及原理

Cookie概念 在瀏覽某些 網站 時,這些網站會把 一些數據存在 客戶端 , 用于使用網站 等跟蹤用戶,實現用戶自定義 功能. 是否設置過期時間: 如果不設置 過期時間,則表示這個 Cookie生命周期為 瀏覽器會話期間 , 只要關閉瀏覽器,cookie就消失了. 這個生命期為瀏覽會話期的cookie,就…

其他行業跳槽轉入計算機領域簡單看法

其他行業跳槽轉入計算機領域簡單看法 本人選擇從以下幾個方向談談自己的想法和觀點。 如何規劃才能實現轉碼 自我評估和目標設定&#xff1a;首先&#xff0c;你需要評估自己的技能和興趣&#xff0c;確定你希望在計算機領域從事的具體職位或領域。這有助于你更好地規劃學習路…

深入了解 Rancher Desktop 設置

Rancher Desktop 設置的全面概述 Rancher Desktop 擁有方便、強大的功能&#xff0c;是最佳的開發者工具之一&#xff0c;也是在本地構建和部署 Kubernetes 的最快捷方式。 本文將介紹 Rancher Desktop 的功能和特性&#xff0c;以及 Rancher Desktop 作為容器管理平臺和本地…

人工智能原理(2)

目錄 一、知識與知識表示 1、知識 2、知識表示 3、知識表示方法 二、謂詞邏輯表示法 1、命題邏輯 2、謂詞邏輯 三、產生式表達法 1、知識的表示方法 2、產生式系統組成 3、推理方式 4、產生式表示法特點 四、語義網絡 1、概念及結構 2、語義網絡的基本語義聯系 …

zookeeper案例

目錄 案例一&#xff1a;服務器動態上下線 服務端&#xff1a; &#xff08;1&#xff09;先獲取zookeeper連接 &#xff08;2&#xff09;注冊服務器到zookeeper集群&#xff1a; &#xff08;3&#xff09;業務邏輯&#xff08;睡眠&#xff09;&#xff1a; 服務端代碼…

Java+Excel+POI+testNG基于數據驅動做一個簡單的接口測試【杭州多測師_王sir】

一、創建一個apicases.xlsx放入到eclipse的resource里面&#xff0c;然后refresh刷新一下 二、在pom.xml文件中加入poi和testng的mvn repository、然后在eclipse的對應目錄下放入features和plugins&#xff0c;重啟eclipse就可以看到testNG了 <!--poi excel解析 --><d…

運維監控學習筆記3

DELL的IPMI頁面的登錄&#xff1a; 風扇的狀態&#xff1a; 電源溫度&#xff1a;超過70度就告警&#xff1a; 日志信息&#xff1a; 可以看到更換過磁盤。 iDRAC的設置 虛擬控制臺&#xff1a;啟動遠程控制臺&#xff1a; 可以進行遠程控制。 機房工程師幫我們接遠程控制&…

【云原生】kubernetes中容器的資源限制

目錄 1 metrics-server 2 指定內存請求和限制 3 指定 CPU 請求和限制 資源限制 在k8s中對于容器資源限制主要分為以下兩類: 內存資源限制: 內存請求&#xff08;request&#xff09;和內存限制&#xff08;limit&#xff09;分配給一個容器。 我們保障容器擁有它請求數量的…

【云原生】K8S集群

目錄 一、調度約束1.1 POT的創建過程1.1調度過程 二、指定節點調度2.1 通過標簽選擇節點 三、親和性3.1requiredDuringSchedulingIgnoredDuringExecution&#xff1a;硬策略3.1 preferredDuringSchedulingIgnoredDuringExecution&#xff1a;軟策略3.3Pod親和性與反親和性3.4使…

(2)原神角色數據分析-2

功能一&#xff1a; 得到某個屬性的全部角色&#xff0c;將其封裝在class中 """各元素角色信息&#xff1a;一對多""" from pandas import DataFrame, Series import pandas as pd import numpy as npclass FindType:# 自動執行&#xff0c;將…

山東布谷科技直播平臺搭建游戲開發技術分享:數據存儲的重要意義

在市場上的熱門的直播平臺中&#xff0c;有很多小程序為用戶提供各種各樣的功能&#xff0c;這其中就有很多游戲小程序&#xff0c;當今社會獨生子女眾多&#xff0c;很多作為獨生子女的用戶都會去選擇一個能夠社交互動的APP來填補內心的空虛&#xff0c;而直播平臺的實時互動的…

SAP 選擇屏幕組件名描述翻譯時字符長度不夠問題處理

問題&#xff1a;有時候我們在開發report程序的時候&#xff0c;要求程序顯示支持中英文&#xff0c;如果程序是在中文環境下開發的時候&#xff0c;需要進行翻譯處理&#xff0c;但是我們發現選擇屏幕上的組件的描述支持的默認長度是30位&#xff0c;如果超過該如何處理呢 解…

《路由與交換技術》讀書筆記

小小感悟 工作近3年&#xff0c;基本沒去看路由交換相關書籍&#xff0c;趁著搬家后&#xff0c;周末閑暇時間&#xff0c;快速看了一遍《路由與交換技術》&#xff0c;溫習了一遍&#xff0c;很有收獲&#xff0c;以后還是要多花時間看看其他類型的書。 讀書筆記 1.1 移動通…

構建一個LLM應用所需的所有信息

一、說明 您是否對大型語言模型&#xff08;LLM&#xff09;的潛力感興趣&#xff0c;并渴望創建您的第一個基于LLM的應用程序&#xff1f;或者&#xff0c;也許您是一位經驗豐富的開發人員&#xff0c;希望簡化工作流程&#xff1f;看看DemoGPT就是您的最佳選擇。該工具旨在簡…