[筆記] Redis 基本操作
redis基本操作
redis簡介
Redis 是完全開源的,遵守 BSD 協(xié)議,是一個高性能的 key-value 數(shù)據(jù)庫。
Redis 與其他 key - value 緩存產(chǎn)品有以下三個特點:
- Redis支持?jǐn)?shù)據(jù)的持久化,可以將內(nèi)存中的數(shù)據(jù)保存在磁盤中,重啟的時候可以再次加載進行使用。
- Redis不僅僅支持簡單的key-value類型的數(shù)據(jù),同時還提供list,set,zset (sortded set),hash等數(shù)據(jù)結(jié)構(gòu)的存儲。
- Redis支持?jǐn)?shù)據(jù)的備份,即master-slave模式的數(shù)據(jù)備份。
使用環(huán)境
- WSL2
- Ubuntu 22.04.2 LTS
啟動方式
啟動服務(wù)
redis-server

-
redis-server命令使用默認(rèn)配置啟動 redis; -
redis-server命令后面可以寫配置文件的命令,從而實現(xiàn)自定義配置啟動 redis;
如:
redis-server /etc/redis.conf
啟動redis-cli
redis-cli
使用-p 7777可以指定連接的端口,我的配置文件里指定的端口號是7777,所以需要使用redis-cli -p 7777啟動。
- 使用
ping命令測試是否連接成功,如果連接成功,會返回PONG。 - 如果配置文件中設(shè)置了密碼,則需要使用
AUTH [密碼]指令,否則無法繼續(xù)。
通用指令
redis的大部分指令和數(shù)據(jù)類型有關(guān),但也有一些比較基礎(chǔ)的指令是通用的。
KEYS
查詢與pattern匹配的 keys。
語法:KEYS [pattern]
支持的pattern格式:
h?llo匹配hello,hallo和hxlloh*llo匹配hllo和heeeelloh[ae]llo匹配hello和hallo,但不能匹配hilloh[^e]llo匹配hallo,hbllo, ... 但不能匹配helloh[a-b]llo匹配hallo和hbllo
DEL
刪除指定的 key,支持一次性刪除多個。
語法:DEL key [key ...]
TTL
查詢一個 key 的剩余有效時間(單位:秒)。
語法:TTL key
返回值:
- 已過期:
-2 - 永久有效:
-1 - 仍有效:
>=0
數(shù)據(jù)類型
redis最基礎(chǔ)的5種數(shù)據(jù)類型:
string:字符串hash:哈希list:列表set:集合zset:有序集合(sorted set)
下面開始討論不同的數(shù)據(jù)類型的相關(guān)指令
通過輸入help @<group>可以獲得該數(shù)據(jù)類型的相關(guān)操作指令:
# 可以通過這5個指令獲取指定數(shù)據(jù)類型的相關(guān)指令介紹
help @string
help @hash
help @list
help @set
help @sorted-set

string 字符串
string字符串類型是redis里最簡單的數(shù)據(jù)類型,常用的指令如下:
SET
設(shè)置指定key的value。
語法:SET key value
盡管20看起來是數(shù)值類型,但是在redis中會將其視為string類型。不過有相關(guān)的操作可以用于處理這種可以轉(zhuǎn)換為數(shù)字的string數(shù)據(jù)。
GET
獲取指定key的value。
語法:GET key
MSET和MGET
批量設(shè)置和獲取多個值。
語法:
-
MSET key value [key value] -
MGET key [key]
INCR
increase:指定的key的數(shù)值加一,前提是指定的key的value可以轉(zhuǎn)換為數(shù)值。
語法:INCR key
操作成功之后,會返回更新后的值。
INCRBY
increase by:與INCR類似,但是可以指定增加的數(shù)值,可以傳入負值從而實現(xiàn)減法。
語法:INCRBY KEY INCREAMENT
DECR
decrease:INCR的相反操作,但其實可以通過INCRBY和-1實現(xiàn),所以DECR比較少用到。
語法:DECR key
SETEX
set expire:設(shè)置一個值,同時設(shè)置其有效時間(以秒為單位),有效時間結(jié)束后,這個值將失效。
必要性:由于redis是工作于內(nèi)存的,如果大量的鍵值對一直存在,會占用大量的內(nèi)存空間,設(shè)置有效時間可以適當(dāng)?shù)仳v出內(nèi)存空間。
語法:SETEX key seconds value
當(dāng)鍵值對過期后,再次執(zhí)行GET,將得到(nil).
nil在redis中表示該key不存在。
hash 哈希值
Redis hash 是一個 string 類型的 field(字段) 和 value(值) 的映射表,hash 特別適合用于存儲對象。
類似于string類型,最基礎(chǔ)的指令是 set 和 get 指令,hash相應(yīng)的指令在前面有一個h前綴表示hash。
HSET和HMSET
從指令中可以看出這兩個指令的區(qū)別是M即 multiple,HMSET可以同時設(shè)置一個hash的多個字段。
在redis較新的版本中,HSET也支持同時設(shè)置多個字段了,HMSET已棄用。
語法:HSET key field value [field value ...]
如果要表示如下的一個對象:
person = {
name: "nicholas",
age: "20"
}
可以用指令:
hset person name nicholas age 20
HGET
獲取指定key ( hash類型 ) 的指定字段的值。
語法:HGET key field
HKEYS
獲取一個哈希表中的所有字段
語法:HKEYS key
HVALS
獲取一個哈希表中的所有值
語法:HVALS key
list 列表
Redis列表是簡單的字符串列表,按照插入順序排序。可以添加一個元素到列表的頭部(左邊)或者尾部(右邊)。
列表的相關(guān)指令圍繞幾個關(guān)鍵字展開:B,L或R,PUSH或POP.
B表示 block,即阻塞。
L或R指 left 或 right,指從列表的左邊或右邊進行操作。
PUSH或POP是推入或彈出,是list新增或刪減元素的操作。
LPUSH
從列表左邊推入一個新元素。
語法:LPUSH key element
支持推入多個新元素。
語法:LPUSH key element [element]
需要注意的是,推入的順序是 element1, element2, element3, ......
而又是從左邊依次推入的,因此,會得到如下結(jié)果:
LRANGE指令在下文介紹。
-
推入的順序是:1、2、3;
-
得到的結(jié)果是:3、2、1.
RPUSH
從列表右邊推入新元素。
語法:RPUSH key element [element]
LPOP
從列表左邊彈出指定數(shù)量的元素。
語法:LPOP key [count]
[count]參數(shù)可選,彈出指定數(shù)量的元素,缺省值為1.
RPOP
從列表右邊彈出指定數(shù)量的元素。
語法:RPOP key [count]
BLPOP和BRPOP
從LPOP和RPOP可以看出這兩個指令分別從列表的左邊或右邊彈出元素,區(qū)別在于其前綴B,表示 block 阻塞。
-
如果列表中有元素,則會直接彈出元素;
-
如果列表中沒有元素,則會阻塞,直到有新元素進入列表,再執(zhí)行彈出操作。
( 或許你有在操作系統(tǒng)課程中學(xué)到關(guān)于“生產(chǎn)者 消費者”的相關(guān)知識 )
語法:
-
BLPOP key timeout -
BRPOP key timeout
timeout是阻塞的最大時間,單位為 秒,超出該時間將不再等待。
如圖,(這里提前將list清空了),執(zhí)行blpop list 30,阻塞。
等待 30s 之后,仍沒有新元素,返回(nil).
模擬兩個用戶
A:阻塞
B:新增元素
A:拿到元素
list除了上述的push/pop的增刪操作,還有更改元素和查詢元素的操作。
LRANGE
查詢指定區(qū)間之內(nèi)的元素。
語法:LRANGE key start end
start和end是“偏移量”,0 表示第一個元素,支持負數(shù),-1 表示倒數(shù)第一個。
start和end組成的區(qū)間是閉區(qū)間。
使用LRANGE key 0 -1即可獲取列表的所有元素。
LINDEX
根據(jù)index獲取列表中指定位置的元素。
語法:LINDEX key index
LSET
編輯列表中指定位置的元素。
語法:LSET key index element
LLEN
獲取列表的長度。
語法:LLEN key
set 集合
Redis 的 Set 是 String 類型的無序集合。集合成員是唯一的,這就意味著集合中不能出現(xiàn)重復(fù)的數(shù)據(jù)。
關(guān)于一個集合的操作
SADD
向集合中添加若干個成員。
語法:SADD key member [member ...]
SCARD
獲取集合的成員數(shù)量。
語法:SCARD key
SMEMBERS
獲取集合的所有成員。
語法:SMEMBERS key
SISMEMBER
set-is-member:用于查詢一個值是否是集合的成員之一。
語法:SISMEMBER key member
- 返回
1表示存在。 - 返回
0表示不存在。
SREM
set-remove:用于移除若干成員。
語法:SREM key member [member ...]
SRANDMEMBER
set-random-member:隨機獲取指定數(shù)量的集合成員。
語法:SRADNMEMBER key [count]
[count]參數(shù)可選,缺省值為1.
SPOP
set-pop:隨機彈出指定數(shù)量的集合成員。
語法:SPOP key [count]
關(guān)于多個集合的操作
SINTER
若干個集合的交集。
語法:SINTER key [key ...]
上述例子中:
1 2 3 4 5
和
-5 -3 -1 1 3 5
的交集為:
1 3 5
SUNION
若干個集合的并集。
語法:SUNION key [key ...]
sorted-set 有序集合
有序集合的每一個成員都會攜帶一個double類型的score用于排序。
對于集合中的成員,score是可以相同的,但是member即成員不能相同。
ZADD
添加成員,先寫score再寫member,可以寫多組。
語法:ZADD key score1 member1 [score2 member2 ...]
ZCARD
獲取集合的成員數(shù)量。
語法:ZCARD key
ZCOUNT
計算在有序集合中指定區(qū)間分?jǐn)?shù)的成員數(shù)。
語法:ZCOUNT key min max
區(qū)間[min, max]是閉區(qū)間。
ZINCRBY
對指定成員的score加上增量increment.
語法:ZINCRBY key increment member
返回增加成功后的score.
ZRANGE
通過索引區(qū)間返回有序集合指定區(qū)間內(nèi)的成員。
語法:ZRANGE key start stop [WITHSCORES]
這里的start和stop并不是score的區(qū)間,而是該有序集合排序之后的index區(qū)間。
ZRANGEBYSCORE
通過分?jǐn)?shù)返回有序集合指定區(qū)間內(nèi)的成員。
語法:ZRANGEBYSCORE key min max
ZRANK
返回指定成員的索引。
語法:ZRANK key member
ZREM
移除一個或多個成員。
語法:ZREM key member [member ...]
Redis可視化軟件
圖形化界面可以更直觀地觀察redis里的數(shù)據(jù),這里推薦的是Another Redis Desktop Manage.

- 官方網(wǎng)站??Another Redis Desktop Manager | 更快、更好、更穩(wěn)定的Redis桌面(GUI)管理客戶端,兼容Windows、Mac、Linux,性能出眾,輕松加載海量鍵值
基本使用方法
創(chuàng)建連接

新建鍵值對

查看數(shù)據(jù)
雙擊左邊的key列表,即可在右邊查看具體的值。

界面設(shè)置
界面左上角有一個設(shè)置按鈕,點擊之后可以進行light/dark模式的切換、界面縮放、字體等配置。


引用
[1] Redis 教程 | 菜鳥教程 (runoob.com)
[3] Redis指令HSET和HMSET有什么區(qū)別_hmset和hset_Clear_rain的博客-CSDN博客

浙公網(wǎng)安備 33010602011771號