主頁 > 軟體設計 > 一天肝完Redis全是精華(實戰操作匯總/1024特別奉獻)

一天肝完Redis全是精華(實戰操作匯總/1024特別奉獻)

2021-10-26 08:33:45 軟體設計

Redis 簡介

官網:https://redis.io/
菜鳥教程:https://www.runoob.com/redis/redis-tutorial.html

在這里插入圖片描述

Redis是什么?

  • redis是一種資料庫,C語言撰寫的,開源的,基于記憶體運行并支持持久化的,高性能的NoSQL資料庫,Reids中的資料大部分時間都是存盤記憶體中,適合存盤頻繁訪問,資料量比較小的資料,

資料庫應用的發展歷程

  • 單機資料庫時代 > 快取,水平切分時代 > 讀寫分離時代 > 分表分庫時代(集群)

Redis的特點

  1. 支持資料持久化,redis支持資料持久化,可以將記憶體中的資料保存在磁盤中,重啟的時候可以再次加載進行使用,
  2. 支持多種資料結構,redis不僅僅支持簡單的key-value型別的資料,同時還提供list,set,zset,hash等資料結構的存盤,
  3. 支持資料備份,redis支持資料的備份,即master-slave模式的資料備份,

文章目錄

  • Redis 簡介
    • Redis是什么?
    • 資料庫應用的發展歷程
    • Redis的特點
  • 安裝 Redis
    • Linux上安裝Redis
    • Docker中安裝Redis并掛載
  • 操作 Redis
    • 一.啟動Redis服務
    • 二.查看Redis服務
    • 三.關閉Redis服務
    • 四.連接Redis客戶端
    • 五.退出Redis客戶端
  • Redis 的基本知識
    • 一.測驗Redis服務的性能
    • 二.查看Redis服務是否正常
    • 三.查看Redis服務器的所有統計資訊
    • 四.Redis的資料庫實體
    • 五.切換資料庫
    • 六.查看當前資料庫實體中所有key的數量
    • 七.清空資料庫實體
    • 八.查看redis中的配置資訊
  • Redis 的資料結構
    • 一.字串型別String
      • Redis中關于String型別的操作命令
        • 1.設定(添加)字串型別的資料
        • 2.加入一條sring型別的資料,當key不存在時設定成功,否則,則放棄設定
    • 二.串列型別list
    • 三.集合型別 set
    • 四.哈希型別 hash
    • 五.有序集合zset (sorted set)
  • Redis 中關于Key的常用操作命令
    • 一.通配符
    • 二.查看資料庫中的key
    • 三.判斷key在資料庫中是否存在
    • 四.移動指定key到指定的資料庫實體
    • 五.查看指定key的剩余生存時間
    • 六.設定key的最大生存時間
    • 七.查看指定key的資料型別
    • 八.重命名key
    • 九.洗掉key
  • String型別的操作命令
    • 1.添加字串型別的資料
    • 2.從redis中獲取string型別的資料
    • 3.追加字串
    • 4.獲取字串的長度
    • 5.將字串數值進行加數運算
    • 6.將字串數值進行加offset運算
    • 7.將字串數值進行減數運算
    • 8.將字串數值進行減offset運算
    • 9.截取字串
    • 10.覆寫指定下標開始的字串
    • 11.設定字串的最大生命周期
    • 12.批量設定(添加)資料
    • 13.批量獲取資料
  • list型別資料的操作命令
    • 1.將一個或多個值依次插入串列
    • 2.獲取指定串列中的元素
    • 3.洗掉串列中的元素
    • 4.獲取串列的長度
  • set型別資料的操作命令
    • 1.向集合中添加元素
    • 2.查看集合中的元素
    • 3.判斷元素是否存在
    • 4.獲取指定集合的長度
    • 5.移除指定集合中一個或者多個元素
    • 6.從集合中隨機獲取元素
    • 7.從集合中隨機移除元素
    • 8.移動元素
    • 9.獲取新集合
  • hash型別資料的操作命令
    • 1.向哈希表添加資料
    • 2.獲取哈希表中的資料
    • 3.洗掉哈希表中的資料
    • 4.統計哈希表中資料
    • 5.哈希表資料算數運算
  • Zset集合的操作命令
    • 1.向zset有序集合中添加資料
    • 2.獲取zset有序集合中的資料
    • 3.洗掉zset有序集合中的資料
  • Redis組態檔
    • 1.組態檔中關于網路的配置
    • 2.常規配置
  • Redis持久化
    • 1.RDB策略
    • 2.AOF策略
    • 第十三章 Redis中的事務
  • SpringBoot集成Redis


安裝 Redis

  • 重要:不想下載的可以關注文章最后的公眾號,根據引導獲取Redis,Xshell,Xftp,RedisDesktopManager等一系列安裝包,

Linux上安裝Redis

  1. 前往官網下載安裝包 (官網鏈接在文章開頭)

在這里插入圖片描述

  1. 使用Xftp工具將下載好的安裝包傳入Linux服務器中的 /home 目錄下

在這里插入圖片描述

  1. 執行命令對安裝包進行解壓
tar -zxf redis-6.2.5.tar.gz 

在這里插入圖片描述

  1. 進入解壓檔案目錄使用make對解壓的Redis檔案進行編譯(注意redis-6.2.5才是我剛剛下載的redis)

在這里插入圖片描述在這里插入圖片描述
編譯完成之后,可以看到解壓檔案redis-6.2.5 中會有對應的src、conf等檔案夾

在這里插入圖片描述

  1. 上述編譯沒問題后,進入src檔案夾,執行make install進行Redis安裝,

在這里插入圖片描述

  • 如上圖展示就說明安裝成功了,怎么連接后續命令會有講到,

Docker中安裝Redis并掛載

  • Docker中安裝并掛載Redis請參考文章:Docker常用實戰操作匯總,這玩意就這么簡單!(精心整理)

在這里插入圖片描述

  • 這里就不做敘述了我們直接進入實戰吧,

操作 Redis

  • 這一小節主要介紹啟動連接以及退出Redis

一.啟動Redis服務

  • Redis啟動后默認占用的埠號為:6379,出現盒子圖示就代表啟動成功了,

Redis的三種啟動方式

  1. 前臺啟動,在任何目錄下執行,需要通過 ctrl+c退出
redis-server

在這里插入圖片描述

  1. 后臺啟動(推薦使用)在任何目錄下執行
redis-server &

在這里插入圖片描述

  1. 啟動 redis服務時,指定組態檔
redis-server redis.conf &

二.查看Redis服務

ps -ef|grep redis

在這里插入圖片描述

三.關閉Redis服務

redis-cli shutdown

在這里插入圖片描述

四.連接Redis客戶端

  • Rides客戶端是一個程式,通過網路連接到Redis服務器,從而實作根Redis服務器的互動,

  • Redis客戶端發送命令,同時顯示Redis服務器的處理結果,

  • redis-cli:是redis自帶的客戶端,使用命令redis-cli就可以啟動redis的客戶端程式,

常用連接方式

  1. 連接本機的6379埠上的redis服務(需要先啟動服務)
redis-cli

在這里插入圖片描述
常用引數

  • -p:埠號
  • -h:ip地址
redis-cli -h ip地址 -p 埠號

五.退出Redis客戶端

  • 退出客戶端有兩種方式
exit

quit

在這里插入圖片描述

Redis 的基本知識

一.測驗Redis服務的性能

redis-benchmark

在這里插入圖片描述

可選引數

  • -h:ip地址
  • -p:埠號
redis-benchmark -h 127.0.0.1 -p 6379 -q -d 100  
  • SET/GET 100 bytes 檢測host為127.0.0.1 埠為6379的redis服務器性能

二.查看Redis服務是否正常

ping
  • 使用這個命令需要先連接客戶端

在這里插入圖片描述- 如果正常運行回傳 pong

三.查看Redis服務器的所有統計資訊

  • info命令的使用方法有三種
info					#部分Redis系統狀態統計資訊,
info all      			#全部Redis系統狀態統計資訊,
info section			#某一塊的系統狀態統計資訊,其中section可以忽略大小寫,
  • 這個命令也需要連接redis客戶端使用

在這里插入圖片描述

  • 下面我們來 一 一解讀每一個結果的作用

info Server模塊

  • info Server模塊,包含了Redis服務本身的一些資訊,例如版本號、運行模式、作業系統的版本、TCP埠等
屬性名屬性值屬性描述
redis_version6.2.5Redis服務版本
redis_git_sha100000000Git SHA1
redis_git_dirty0Git dirty flag
redis_build_id90492ac0856c040eRedis build id
redis_modestandalone運行模式,分為:Cluster 、Sentinel、Standalone
osLinux 3.10.0-1160.11.1.el7.x86_64 x86_64Redis所在機器的作業系統
arch_bits64架構(32或64位)
multiplexing_apiepollRedis所使用的事件處理機制
gcc_version4.8.5編譯Redis時所使用的GCC版本
process_id10444Redis服務行程的PID
run_idd688494fa4cac3cdcbc30fa6e79f0243b3873e92Redis服務的識別符號
tcp_port6379監聽埠
uptime_in_seconds15091自 Redis 服務啟動以來,運行的秒數
uptime_in_days0自 Redis 服務啟動以來,運行的天數
hz10serverCron每秒運行次數
lru_clock5080008以分鐘為單位進行自增的時鐘,用于LRU管理
config_fileRedis的組態檔

四.Redis的資料庫實體

  • 作用類似于mysql資料庫實體,redis中的資料庫實體只能由redis服務來創建和維護,開發人員不能修改和自行創建資料庫實體,默認情況下redis會創建16個資料庫實體,并且給這些資料庫實體進行編號,這些編號從0開始,一直到15,使用時通過編號來使用資料庫,可以通過組態檔,指定redis自動創建的資料庫個數,redis的每一個資料庫實體本身占用的存盤空間是很少的,所以也不會造成存盤空間的浪費,

  • 默認情況下,redis客戶端連接的是編號0的資料庫實體

五.切換資料庫

  • 切換資料庫語法 index 表示資料庫的編號
select index

在這里插入圖片描述

六.查看當前資料庫實體中所有key的數量

dbsize

在這里插入圖片描述

七.清空資料庫實體

  • 清空當前資料庫所有實體
flushdb
  • 清空所有資料庫的所有實體
flushall

八.查看redis中的配置資訊

  • 查看redis中的所有配置資訊
config get *

在這里插入圖片描述

  • 查看指定配置資訊
config get [配置引數名]

Redis 的資料結構

  • 程式是用來處理資料的,ridis是用來存盤資料的,程式處理完的資料要存盤到redis中,不同特點的資料要存盤在redis中不同型別的資料結構中,

一.字串型別String

  • 字串型別是Redis中最基本的資料結構,它能存盤任何型別的資料,包括二進制資料,序列化后的資料,JSON化的物件甚至是一張圖片,最大512M,
keyvalue
username張三和李四

Redis中關于String型別的操作命令

1.設定(添加)字串型別的資料

  • 加入一條sring型別的資料,注意:如果key已經存在了會覆寫之前的資料
set key value

在這里插入圖片描述

2.加入一條sring型別的資料,當key不存在時設定成功,否則,則放棄設定

setnx key value

二.串列型別list

  • ridis串列是簡單的字串串列,按照插入順序排序,元素可以重復,你可以添加一個元素到串列的頭部(左邊)或者尾部(右邊),底層是個鏈表結構,
keyvalue
reqion北京 上海 天津

三.集合型別 set

  • Redis的Set是string型別的無序不可重復集合,
keyvalue
spring
frameworkmybatis
struts

四.哈希型別 hash

  • Redis hash是一個string型別的field和value的映射表,hash特別適合用于存盤物件,
keyloginuser
fieidvalue
uname張三
times5
region北京

五.有序集合zset (sorted set)

  • redis有序集合zset和集合set一樣也是string型別元素的集合,且不允許重復的成員,不同的是zset的每個元素都會聯系一個分數(分數可以重復),redis通過分數來為集合中的成員進行從小到大的排序,
keyvalue score
張三 3500
salary李四 5000
王五 8000

Redis 中關于Key的常用操作命令

  • 開始之前讓我們先來了解一樣Redis中三個常用通配符

一.通配符

  1. *:匹配0個或者多個字符
  2. ?:匹配一個字符
  3. []:匹配[]里面的一個字符

二.查看資料庫中的key

  • 注意:需要在Redis客戶端中執行
keys pattern

在這里插入圖片描述

  • 作用:查找所有符合模式pattern的key,pattern可以使用通配符

查詢所有的key

keys *

在這里插入圖片描述

查詢m開頭的key

keys m*

在這里插入圖片描述

查詢m開頭任意結尾且中間包含li的資料

keys m[li]*

三.判斷key在資料庫中是否存在

  • 判斷key是否存在如果存在,則回傳1,不存在則回傳0
exists key

在這里插入圖片描述

  • 判斷多個key 是否存在,回傳值是存在的key的數量,一個不存在則回傳0

在這里插入圖片描述

四.移動指定key到指定的資料庫實體

move key index

五.查看指定key的剩余生存時間

  • 查看指定key的剩余生存時間,如果key沒有設定生存時間,回傳-1表示永遠存在,如果key不存在則回傳-2
ttl key

在這里插入圖片描述

六.設定key的最大生存時間

  • 設定key的最大生存時間,單位是秒,從設定后開始倒計時,計時結束后自動洗掉
expire key secondes

七.查看指定key的資料型別

type key

八.重命名key

rename key newkey

九.洗掉key

  • 洗掉指定的key(根據key洗掉一條資料),回傳值是實際洗掉的key的數量
del key
  • 洗掉多個key(多條資料)
del key1 key2 key3

String型別的操作命令

1.添加字串型別的資料

加入一條sring型別的資料,注意:如果key已經存在了會覆寫之前的資料

set key value

在這里插入圖片描述

加入一條sring型別的資料,當key不存在時設定成功,否則,則放棄設定

setnx key value

在這里插入圖片描述

2.從redis中獲取string型別的資料

get key

在這里插入圖片描述

3.追加字串

追加字串,回傳追加后的字串長度,如果key不存在則會創建一個新的key,并設定進redis中

append key value

在這里插入圖片描述

4.獲取字串的長度

strlen key

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-QEpeV6eM-1635068865792)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210123204505533.png)]

5.將字串數值進行加數運算

加1運算

  • 要求:key所表示的value必須是數值否則報錯,回傳值為加1運算之后的資料,如果key不存在,首先設定一個key,初始化為0,然后進行incr運算,
incr key

在這里插入圖片描述

6.將字串數值進行加offset運算

offset 表示任意的一個數

  • 要求:key所表示的value必須是數值否則報錯,回傳值為加1運算之后的資料,如果key不存在,首先設定一個key,初始化為0,然后進行incrby運算,
incrby key offset

在這里插入圖片描述

在這里插入圖片描述

7.將字串數值進行減數運算

減1運算

  • 要求:key所表示的value必須是數值否則報錯,回傳值為減1運算之后的資料,如果key不存在,首先設定一個key,初始化為0,然后進行decr運算,
decr key

在這里插入圖片描述

8.將字串數值進行減offset運算

  • 要求:key所表示的value必須是數值否則報錯,回傳值為減1運算之后的資料,如果key不存在,首先設定一個key,初始化為0,然后進行decrby運算,

offset 表示任意的一個數

decrby key offset

在這里插入圖片描述

9.截取字串

  • 獲取字串key中從startIndex到endIndex的字符組成的子字串,字串下標自左至右,從0開始,依次往后,最后一個字符的下標是字串長度-1,截取到的字串包含,startIndex和endIndex,

  • 字串中每一個下標也可以是負數,負下標表示自右至左,從-1開始,依次往前,-1, -2, -3, -4

getrange key startIndex endIndex

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-rnAEjLaX-1635068865796)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210124094037307.png)]

10.覆寫指定下標開始的字串

  • 用value覆寫從下標為startIndex開始的字串,能覆寫幾個字符就覆寫幾個字符
setrange key startIndex value

在這里插入圖片描述

11.設定字串的最大生命周期

setex key seconds value

在這里插入圖片描述

12.批量設定(添加)資料

批量將string型別資料設定到redis中

mset 鍵1 值1 鍵2 值2 

在這里插入圖片描述

批量設定字串,當所有的key都不存在時設定成功,否則(只要有一個已經存在),則全部放棄設定

msetnx key1 value1 key2 value2

在這里插入圖片描述

13.批量獲取資料

如果key不存在則回傳空

mget key1 key2 key3 key4 key5

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-WjJI2JSM-1635068865798)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210124125314185.png)]

list型別資料的操作命令

  • list型別:單key-多有序value,一個key對應多個value,多個value之間有順序,最左側是表頭,最右側是表尾,每一個元素都有下標,表頭元素的下標是0,依次往后排序,最后一個元素下標是串列長度-1,每一個元素的下標又可以用負數表示,負下標表示從表尾計算,最后一個元素下標用-1表示,元素在串列中的順序或者下標由放入的順序來決定

1.將一個或多個值依次插入串列

將一個或多個值依次插入串列的表頭(左側)值可以有一個或者多個,依次向左插入,先插入的在表尾,后插入的資料在表頭

lpush key value value value value

在這里插入圖片描述

將一個或多個值依次插入串列的表尾(右側)值可以有一個或者多個,依次向右插入,先插入的在頭,后插入的資料在表尾

rpush key value value value value

在這里插入圖片描述

2.獲取指定串列中的元素

獲取指定串列中指定下標區間的元素

lrange key startIndex endIndex

在這里插入圖片描述

獲取指定串列中指定下標的元素

lindex  key index

在這里插入圖片描述

3.洗掉串列中的元素

從指定串列中移除并且回傳表頭元素

lpop key

在這里插入圖片描述

從指定串列中移除并且回傳表尾元素

rpop key

在這里插入圖片描述

根據count值移除指定串列中跟value相等的資料

count>0:從串列的左側移除count個跟value相等的資料

count<0:從串列的右側移除count個跟value相等的資料

count=0:從串列中移除所有跟value相等的資料

lrem key count value

在這里插入圖片描述

4.獲取串列的長度

獲取指定串列的長度

llen key

在這里插入圖片描述

set型別資料的操作命令

  • set型別:Reids的Set是string型別的單key多value無序不重復集合,value之間沒有順序不能重復,通過業務資料直接操作集合,

1.向集合中添加元素

添加一個或多個元素到集合中如果value重復則只會添加一個

sadd key value value value

在這里插入圖片描述

2.查看集合中的元素

smembers key

在這里插入圖片描述

3.判斷元素是否存在

判斷指定元素在集合中是否存在,存在回傳1不存在回傳0

sismember key

在這里插入圖片描述

4.獲取指定集合的長度

scard key

在這里插入圖片描述

5.移除指定集合中一個或者多個元素

不存在的元素會被忽略,回傳值回傳成功移除的個數

srem key

在這里插入圖片描述

6.從集合中隨機獲取元素

隨機獲取指定集合中的一個或者多個元素,適用于抽獎環境,

conut>0:隨機獲取的多個元素之間不能重復

count<0:隨機獲取的多個元素之間可能重復

srandmember key [count]

在這里插入圖片描述

7.從集合中隨機移除元素

從指定集合中隨機移除一個或多個元素,不指定count默認移除一個

spop key [count]

在這里插入圖片描述

8.移動元素

將指定集合中的指定元素移動到目標集合,如果目標集合中該值已存在則會覆寫,

smove key1 key2 value

在這里插入圖片描述

9.獲取新集合

獲取第一個集合中有,但是其它集合中都沒有的元素

sdiff key key key key

獲取所有指定集合中都有的元素組成的新集合

sinter key key key key

獲取所有指定集合中所有元素組成的大集合

sunion key key key key

hash型別資料的操作命令

  • hash型別:單key:field-value field-value field-value 例如:student:id-1001 name-zhangsan age-15

  • Redis的hash是一個String型別的key和value的映射表,這里的value是一系列的鍵值對,hash特別適用于存盤物件,

  • 哈希型別的資料操作總的思想是通過key和field操作value,key是資料標識,field是域,value是我們感興趣的業務資料,

1.向哈希表添加資料

將一個多或多個field-value對設定到哈希表中,如果key field已經存在,value會把以前的值覆寫掉

hset key filed1 value1 [field2 value2]

在這里插入圖片描述

將一個field-value對設定到哈希表中,當field已經存在時,則放棄設定,回傳0表示設定失敗,1表示設定成功

hsetnx key field value field value

2.獲取哈希表中的資料

獲取指定哈希表中的指定field的值

hget key field

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-YqqRPFIK-1635068865806)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210125190138018.png)]

批量獲取指定哈希表中的field的值

hmget key field1 dield2 field3

在這里插入圖片描述

獲取指定哈希表中所有的field和value

hgetall key

在這里插入圖片描述

判斷指定哈希表中是否存在某一個field,存在回傳1不存在回傳0

hexists key field

在這里插入圖片描述

獲取指定哈希表中所有的field串列

hkeys key

在這里插入圖片描述

獲取指定哈希表中所有的value串列

hvals key

在這里插入圖片描述

3.洗掉哈希表中的資料

從指定哈希表中洗掉一個或者多個field

hdel key field1 field2 field3

在這里插入圖片描述

4.統計哈希表中資料

獲取指定哈希表中所有的filed個數

hlen key

在這里插入圖片描述

5.哈希表資料算數運算

對指定哈希表中指定field值進行加法運算

hincrby key field int

在這里插入圖片描述

對指定哈希表中指定field值進行浮點數加法運算

hincrbyfloat key field float

Zset集合的操作命令

  • Redis有序集合zset和集合set一樣也是string型別元素的集合,且不允許重復的成員,

  • 不同的是zset的每個元素都會關聯一個分數(分數可以重復),redis通過分數來為集合中的成員進行從小到大的排序,既然有序集合中每一個元素都有順序,那么也都有下標,有序集合中元素的排序規則又和串列中元素的排序規則不同,

1.向zset有序集合中添加資料

將一個或者多個member及其score值加入有序集合,如果元素存在則把分數覆寫

zadd key score member

在這里插入圖片描述

2.獲取zset有序集合中的資料

獲取指定有序集合中指定下標區間的元素,加上withscores可以看到每個元素的分數,

zrange key startIndex endIndex [withscores]

在這里插入圖片描述

獲取指定有序集合中指定分數區間的元素

zrangebyscore key min max

在這里插入圖片描述

獲取指定有序集合中所有元素的個數

zcard key

在這里插入圖片描述

獲取指定有序集合中分數在指定區間內的元素的個數

zcount key min max

獲取指定有序集合中指定元素的排名,排名從0開始,從小到大

zrank key member

獲取指定有序集合中指定元素的排名,排名從0開始,從大到小

zrevrank key member

獲取指定有序集合中指定元素的分數

zscore key member

3.洗掉zset有序集合中的資料

洗掉指定有序集合中一個或者多個元素

zrem key member member member

Redis組態檔

在redis根目錄下提供redis.conf組態檔,可以配置一些redis服務端運行時的一些引數,如果不使用組態檔,那么redis會按照默認的引數運行,如果使用組態檔,在啟動redis服務時必須指定所使用的組態檔,

1.組態檔中關于網路的配置

port:指定redis服務所使用的埠,默認使用6379

bind:配置客戶端連接redis服務時,所能使用的ip地址,默認可以使用redis服務所在主機上任何一個ip都可以,一般情況下,都會配置一個ip,而且通常是一個真實的ip,

如果配置了port和bind,則客戶端連接redis服務時,必須指定埠和ip

連接:redis-cli -h 192.168.11.128 -p 6380
關閉:redis-cli -h 192.168.11.128 -p 6380 shutdown

tcp-keepalive:連接保活策略

2.常規配置

loglevel:配置日志級別,開發階段可以設定成debug,生產階段通常設定為notice或者warning

logfile:指定日志檔案,redis在運行程序中,會輸出一些日志資訊,默認情況下,這些日志資訊會輸出到控制臺,我們可以使用logfile配置日志檔案,使redis把日志資訊輸出到指定檔案中

databases:配置redis服務默認創建的資料庫實體個數,默認值是16,

Redis持久化

redis是記憶體資料庫,它把資料存盤在記憶體中,這樣在加快讀取速度的同時也對資料安全性產生了新的問題,即當redis所在服務器發生宕機后,redis資料庫里的所有資料將會全部丟失,為了解決這個問題,redis提供了持久化功能——RDB和AOF

redis提供持久化策略,在適當的時機采用適當的手段把記憶體中的資料持久化到磁盤中,每次redis服務啟動時,都可以把磁盤上的資料再次加載到記憶體中使用,

1.RDB策略

RDB策略:在指定時間間隔內,redis服務執行指定次數的寫操作,會自動觸發一次持久化操作,默認策略是:1分鐘內改變了1萬次,或者5分鐘內改變了10次,

RDB策略是redis默認的持久化策略,redis服務開啟時這種持久化策略就已經默認開啟了,

save:配置持久化策略

dbfilename:配置redis RDB持久化資料存盤的檔案

dir:配置redis RDB持久化檔案所在目錄

2.AOF策略

AOF策略:采用操作日志來記錄進行每一次寫操作,每次redis服務啟動時,都會重新執行一遍操作日志中的指令,效率低,redis默認不開啟,

appendonly:配置是否開啟AOF策略

appendfilename:配置操作日志檔案

小結:根據資料的特點決定開啟哪種持久化策略,一般情況,開啟RDB足夠了,

第十三章 Redis中的事務

事務:把一組資料放在一起執行,保證操作原子性,要么同時成功,要么同時失敗,

Redis的事務:允許把一組redis命令放在一起,把命令進行序列化,然后一起執行,保證部分原子性

用來標記一個事務的開啟

multi

用來執行事務列隊中所有命令

exec

redis的事務只能保證部分原子性

  • 如果一組命令中,有在壓入事務佇列程序中發生錯誤的命令,則本事務中所有的命令都不執行,能夠保證事務的原子性,

  • 如果一組命令中,在壓入列隊程序中正常,但是在執行事務列隊命令時發生了錯誤,則只會影響發生錯誤的命令,不會影響其他命令的執行,不能夠保證事務的原子性,

清除所有已經壓入佇列中的命令,并且結束整個事務,

discard

監控某一個鍵,當事務在執行程序中,此鍵代碼的值發生變化,則本事務放棄執行,否則,正常執行,

watch key

放棄監控所有的鍵

unwatch

SpringBoot集成Redis

  1. 加入相關依賴
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
  1. 在springboot核心組態檔application.propeties中配置redis連接資訊:
spring:
  redis:
    port: 6380
    host: 192.168.226.128
  1. springBoot自動配置RedisTemplate,在需要操作redis的類中注入redisTemplate;
//注入springboot自動配置好的RedisTemplate,泛型里面只能寫<String,String>,<Object,Object>
@Autowired 
private RedisTemplate<Object,Object> redisTemplate;
  • 測驗
@Test
void redisTest(){
    //字符出序列化器
    RedisSerializer redisSerializer=new StringRedisSerializer();
    redisTemplate.setKeySerializer(redisSerializer);
    
    //查詢快取
    List<User> userList= (List<User>) redisTemplate.opsForValue().get("allUser");
    if (null==userList){
        //快取為空,查詢一遍資料庫
        userList=userMapper.selectList(null);
        //把資料庫查詢出來的資料,放入redis中
        redisTemplate.opsForValue().set("allUser",userList);
    }
    userList.forEach(System.out::println)
}

到此整個redis基礎就全部整理完畢了,1024祝愿大家節日快樂🌹

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/336284.html

標籤:其他

上一篇:惹惱開源社區!微軟道歉:恢復 .NET SDK 熱多載功能

下一篇:人口分析案例

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more