學以致用 | Redis概念與簡單實操
Redis概念
Redis是一個由C語言編寫、基於key-value儲存結構的開源NoSQL資料庫,其讀寫速度為10萬次/秒,這個速度已經遠遠大於傳統的關係型資料庫。
使用場景
-
在高併發的情況下,可將Redis作為應用程式與關係資料庫之間的快取。
-
讀操作:直接從Redis中高速讀取資料;
-
寫操作:寫操作有兩種方式;
A. 先將資料寫入MySQL 資料庫,用於持久化,然後再將寫入的資料同步至Redis中,方便後面訪問量上來後高速讀取;
B. 在高併發訪問的情況下,可以先將讀寫操作都在Redis中執行,然後再將Redis中的資料寫入訊息佇列MQ中,然後從MQ中將資料寫入MySQL中。
-
Redis自身就是一個高效能的NoSQL資料庫,因此Redis可以單獨作為資料庫。
Redis環境搭建
-
訪問Redis官網,根據自己需求選擇版本號進行下載。
注意:
這裡您可以根據您的作業系統選擇對應的版本,我這裡選擇win版本;
Linux版本,解壓命令
tar -zxvf redis-4.0.11.tar.gz
,如有其它問題可以私信交流! -
下載完成後解壓;
-
進入redis安裝目錄,找到
redis-server.exe
,以管理員許可權執行,服務端執行如下圖所示; -
以管理員許可權執行
redis-cli.exe
,客戶端執行如下圖所示;
Redis六大常見型別的核心操作
在開始講解常見操作時,我們先來看看在操作Redis時我們需要注意的點
1.Redis對關鍵字或者變數不區分大小寫,但對資料區分大小寫。
2.在Redis中,K和KB含義不同,1K=1000 bytes,1KB =1024 bytes;同理,M和MB,G和GB也是一樣的。
String操作
-
給hello 賦值:
set hello world
-
獲取hello的值 :
get hello
-
獲取hello的長度 :
strlen hello
-
擷取hello的值(從0位到2位):getrange hello 0 2
-
批量給k1、k2、k3賦值:
mset k1 v1 k2 v2 k3 v3
-
批量獲取k1,k2,k3的值:
mget k1 k2 k3
-
給k4賦值,並且指定該變數的宣告週期為10秒:
setex k4 10 v4
-
檢視k4剩餘的過期時間:
ttl k4
v4這個值已經過期了2秒了。 -
如果不存在k5,給k5賦值;如果已存在,則賦值失敗:
setnx k5 v5
-
賦值一個內容為數字形式的字串:
set num 100
-
num 自增1:
incr num
-
num 自減1:
decr num
-
綜合來看,
SET key value
-
EX 指生命週期為:秒
-
PX 指生命週期為:毫秒
-
NX 指當key不存在時,才能執行
-
XX指當key存在時,才能執行
List操作
-
給mylist中增加多個元素:
lpush mylist a1 a2 a3 a4 a5
或rpush mylist a1 a2 a3 a4 a5
-
檢視mylist中的前3個元素:
lrange mylist 0 3
-
檢視mylist中所有的元素:
lrange mylist 0 -1
-
只保留mylist中第0個到第2個元素:
ltrim mylist 0 2
-
將mylist的最後一個元素,移動到mylist2的第一個元素:
rpoplpush mylist mylist2
-
將mylist的第二個元素值設定為x:
lset mylist 2 x
-
在mylist的a3元素前後,插入
linsert mylist bdfore/after a3 y
Set操作
list中的元素可以重複,而set 中的元素不能重複(重複的元素會被忽略)
-
給myset中增加多個元素:
sadd set a1 a2 a3
-
檢視myset中的全部元素:
smembers set
-
判斷myset中是否包含a2 元素:
sismember set a2
-
刪除myset中的阿a2元素:
srem set a2
-
隨機獲取(不會刪除)myset中的兩個元素:
srandmember set 2
-
隨機獲取(並刪除)myset中的一個元素:
spop myset
-
將myset中的a2移動到myset2中的一個元素:
smove set a2 myset2
SortedSet操作
Set不允許重複值,但是它是無序的,也不能根據下標獲取元素。但是SortedSet能解決這個問題,SortedSet可以根據score值的大小,將集合中的元素排序,進而實現有序。
-
給student中增加多個元素(zs,ls,ww),並設定score值:
zadd students 8 zs 9 ls 10 ww
-
根據score值排序,查詢0-2個元素:
zrange students 0 2
-
根據score值排序,查詢第0-2個元素,並顯示每個元素的score:
zrange students 0 2 withscores
-
根據score值從小到大的順序,查詢students中第0個至第2個元素(逆序):
zrevrange students 0 2
-
查詢student中,score值>=8,且<10的元素:
zrangebyscore students 8 10
-
刪除students中zs和ww:
image-20211030115341851zrem names zs ww
-
統計students中,score值介於8和10之間的元素個數:
zcount students 8 10
-
查詢students中ww元素的的下標:
zrank students ww
-
獲取students中,ww的score的值:
zscore students ww
-
獲取students中,ww的score值逆序:
zrevrank students ww
Hash 操作
-
在Java中我們需要給一個student物件賦值,需要使用student.setName(“zs”);在Redis裡面就比較簡單且明瞭,可以使用:
hset student name zs
-
同時給多個屬性賦值:
hmset person name zs age 23 sex male
-
同時獲取person多個屬性:
hmget person name age sex
-
獲取student的name屬性值:
hget student name
-
獲取student全部屬性名:
hkeys student
-
獲取student的全部屬性值:
hvals student
-
獲取student的全部屬性值和屬性名:
hgetall student
-
刪除student的name和age:
hdel student age 3
Key 及其它操作
-
給已存在的key 設定生命週期:
expire k1 10
(秒) 、pexpire k1 10
(毫秒) -
檢視當前資料庫中的全部key:
key *
-
根據佔位符?對key進行模糊查詢:
keys k?
-
判斷是否存在某一個key:
exists k1
-
檢視某個key-value的資料型別:
type k1
-
檢視當前資料庫有多少條資料:
dbsize
-
將當前資料庫中的某條資料,移動到其它資料庫:
move key 資料庫編號
-
清空當前資料庫中的全部資料:
flushdb
-
清空全部資料庫中的資料(謹慎使用哈):
flushall
在學習概念和基礎的時候,往往是最枯燥乏味的時候,但是越枯燥乏味的知識,在實際開發工作中用的時候越是重要。
在下一篇文章中,我們會一起學習如何配置Redis並且如何在Java工程中如何引入並使用Redis。