日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

【Redis学习】Redis管理命令总结

發布時間:2024/4/14 数据库 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Redis学习】Redis管理命令总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、鍵管理

之前通過對五種數據類型的操作命令的學習發現,Redis在對每種數據進行處理之前,都要先指定該數據的key,然后再指定對該數據進行何種操作。

Redis中的key有點類似于Java中的變量名。對某個數據的處理都是以key作為切入點。所以Redis把key作為單獨的處理對象抽象出了一套操作命令。key可以想象成一個指向實際數據的指針,對key的操作會直接影響它所指向的數據的狀態。

127.0.0.1:6379> SET name tom OK 127.0.0.1:6379> GET name "tom" 127.0.0.1:6379> DEL name (integer) 1 127.0.0.1:6379> GET name (nil)

想要查看某個數據的類型:

127.0.0.1:6379> SADD direction east west south north (integer) 4 127.0.0.1:6379> TYPE direction set 想要更改某個數據的key的名字: 127.0.0.1:6379> RENAME direction direct OK 127.0.0.1:6379> SMEMBERS direct 1) "north" 2) "west" 3) "south" 4) "east"

1.1 key(鍵)命令

命令示例

DEL key [key …]

刪除給定的一個或多個 key 。不存在的 key 會被忽略。

返回值:被刪除key的數量。

示例

//刪除單個 key

redis> SET name huangz
OK

redis> DEL name
(integer) 1

//刪除一個不存在的 key

redis> EXISTS phone
(integer) 0

redis> DEL phone # 失敗,沒有 key 被刪除
(integer) 0

//同時刪除多個 key

redis> SET name “redis”
OK

redis> SET type “key-value store”
OK

redis> SET website “redis.com”
OK

redis> DEL name type website
(integer) 3

1.2 String(字符串)命令

命令示例

SET key value [EX seconds] [PX milliseconds] [NX|XX]

將字符串值 value 關聯到 key 。如果 key 已經持有其他值, SET 就覆寫舊值,無視類型。

對于某個原本帶有生存時間(TTL)的鍵來說, 當 SET 命令成功在這個鍵上執行時, 這個鍵原有的 TTL 將被清除。

可選參數:

從 Redis 2.6.12 版本開始, SET 命令的行為可以通過一系列參數來修改:

EX second :設置鍵的過期時間為 second 秒。 SET key value EX second 效果等同于 SETEX key second value 。

PX millisecond :設置鍵的過期時間為 millisecond 毫秒。 SET key value PX millisecond 效果等同于 PSETEX key millisecond value 。

NX :只在鍵不存在時,才對鍵進行設置操作。 SET key value NX 效果等同于 SETNX key value 。

XX :只在鍵已經存在時,才對鍵進行設置操作。

因為 SET 命令可以通過參數來實現和 SETNX 、 SETEX 和 PSETEX 三個命令的效果,所以將來的 Redis 版本可能會廢棄并最終移除 SETNX 、 SETEX 和 PSETEX 這三個命令。

返回值:在 Redis 2.6.12 版本以前, SET 命令總是返回 OK 。

從 Redis 2.6.12 版本開始, SET 在設置操作成功完成時,才返回 OK 。
如果設置了 NX 或者 XX ,但因為條件沒達到而造成設置操作未執行,那么命令返回空批量回復(NULL Bulk Reply)。

//對不存在的鍵進行設置

示例:
redis 127.0.0.1:6379> SET key “value”
OK

redis 127.0.0.1:6379> GET key
“value”

// 對已存在的鍵進行設置

redis 127.0.0.1:6379> SET key “new-value”
OK

redis 127.0.0.1:6379> GET key
“new-value”

//使用 EX 選項

redis 127.0.0.1:6379> SET key-with-expire-time “hello” EX 10086
OK

redis 127.0.0.1:6379> GET key-with-expire-time
“hello”

redis 127.0.0.1:6379> TTL key-with-expire-time
(integer) 10069

//使用 PX 選項

redis 127.0.0.1:6379> SET key-with-pexpire-time “moto” PX 123321
OK

redis 127.0.0.1:6379> GET key-with-pexpire-time
“moto”

redis 127.0.0.1:6379> PTTL key-with-pexpire-time
(integer) 111939

//使用 NX 選項

redis 127.0.0.1:6379> SET not-exists-key “value” NX
OK # 鍵不存在,設置成功

redis 127.0.0.1:6379> GET not-exists-key
“value”

redis 127.0.0.1:6379> SET not-exists-key “new-value” NX
(nil) # 鍵已經存在,設置失敗

redis 127.0.0.1:6379> GEt not-exists-key
“value” # 維持原值不變

// 使用 XX 選項

redis 127.0.0.1:6379> EXISTS exists-key
(integer) 0

redis 127.0.0.1:6379> SET exists-key “value” XX
(nil) # 因為鍵不存在,設置失敗

redis 127.0.0.1:6379> SET exists-key “value”
OK # 先給鍵設置一個值

redis 127.0.0.1:6379> SET exists-key “new-value” XX
OK # 設置新值成功

redis 127.0.0.1:6379> GET exists-key
“new-value”

// NX 或 XX 可以和 EX 或者 PX 組合使用

redis 127.0.0.1:6379> SET key-with-expire-and-NX “hello” EX 10086 NX
OK

redis 127.0.0.1:6379> GET key-with-expire-and-NX
“hello”

redis 127.0.0.1:6379> TTL key-with-expire-and-NX
(integer) 10063

redis 127.0.0.1:6379> SET key-with-pexpire-and-XX “old value”
OK

redis 127.0.0.1:6379> SET key-with-pexpire-and-XX “new value” PX 123321
OK

redis 127.0.0.1:6379> GET key-with-pexpire-and-XX
“new value”

redis 127.0.0.1:6379> PTTL key-with-pexpire-and-XX
(integer) 112999

// EX 和 PX 可以同時出現,但后面給出的選項會覆蓋前面給出的選項

redis 127.0.0.1:6379> SET key “value” EX 1000 PX 5000000
OK

redis 127.0.0.1:6379> TTL key
(integer) 4993 # 這是 PX 參數設置的值

redis 127.0.0.1:6379> SET another-key “value” PX 5000000 EX 1000
OK

redis 127.0.0.1:6379> TTL another-key
(integer) 997 # 這是 EX 參數設置的值

1.3 hash(哈希表)

命令示例

HSET key field value

將哈希表 key 中的域 field 的值設為 value 。如果 key 不存在,一個新的哈希表被創建并進行 HSET 操作。如果域 field 已經存在于哈希表中,舊值將被覆蓋。

返回值:如果 field 是哈希表中的一個新建域,并且值設置成功,返回 1 。如果哈希表中域 field 已經存在且舊值已被新值覆蓋,返回 0 。

redis> HSET website google “www.g.cn” # 設置一個新域
(integer) 1

redis> HSET website google “www.google.com” # 覆蓋一個舊域
(integer) 0

1.4 List(列表)

命令示例

LSET key index value

將列表 key 下標為 index 的元素的值設置為 value 。當 index 參數超出范圍,或對一個空列表( key 不存在)進行 LSET 時,返回一個錯誤。

關于列表下標的更多信息,請參考 LINDEX 命令。

返回值:操作成功返回 ok ,否則返回錯誤信息。

//對空列表(key 不存在)進行 LSET

redis> EXISTS list
(integer) 0

redis> LSET list 0 item
(error) ERR no such key

//對非空列表進行 LSET

redis> LPUSH job “cook food”
(integer) 1

redis> LRANGE job 0 0
1) “cook food”

redis> LSET job 0 “play game”
OK

redis> LRANGE job 0 0
1) “play game”

// index 超出范圍

redis> LLEN list # 列表長度為 1
(integer) 1

redis> LSET list 3 ‘out of range’
(error) ERR index out of range

1.5 Set(集合)

命令示例

SADD key member [member …]

將一個或多個 member 元素加入到集合 key 當中,已經存在于集合的 member 元素將被忽略。假如 key 不存在,則創建一個只包含 member 元素作成員的集合。當 key 不是集合類型時,返回一個錯誤。

在Redis2.4版本以前, SADD 只接受單個 member 值。

返回值:被添加到集合中的新元素的數量,不包括被忽略的元素。

// 添加單個元素

redis> SADD bbs “discuz.net”
(integer) 1

// 添加重復元素

redis> SADD bbs “discuz.net”
(integer) 0

// 添加多個元素

redis> SADD bbs “tianya.cn” “groups.google.com”
(integer) 2

redis> SMEMBERS bbs
1) “discuz.net”
2) “groups.google.com”
3) “tianya.cn”

1.6 SortedSet(有序集合)

命令示例

ZADD key score member [[score member] [score member] …]

將一個或多個 member 元素及其 score 值加入到有序集 key 當中。如果某個 member 已經是有序集的成員,那么更新這個 member 的 score 值,并通過重新插入這個 member 元素,來保證該 member 在正確的位置上。score 值可以是整數值或雙精度浮點數。如果 key 不存在,則創建一個空的有序集并執行 ZADD 操作。當 key 存在但不是有序集類型時,返回一個錯誤。

對有序集的更多介紹請參見 sorted set 。

在 Redis 2.4 版本以前, ZADD 每次只能添加一個元素。

返回值:被成功添加的新成員的數量,不包括那些被更新的、已經存在的成員。

// 添加單個元素

redis> ZADD page_rank 10 google.com
(integer) 1

// 添加多個元素

redis> ZADD page_rank 9 baidu.com 8 bing.com
(integer) 2

redis> ZRANGE page_rank 0 -1 WITHSCORES
1) “bing.com”
2) “8”
3) “baidu.com”
4) “9”
5) “google.com”
6) “10”

// 添加已存在元素,且 score 值不變

redis> ZADD page_rank 10 google.com
(integer) 0

redis> ZRANGE page_rank 0 -1 WITHSCORES # 沒有改變
1) “bing.com”
2) “8”
3) “baidu.com”
4) “9”
5) “google.com”
6) “10”

// 添加已存在元素,但是改變 score 值

redis> ZADD page_rank 6 bing.com
(integer) 0

redis> ZRANGE page_rank 0 -1 WITHSCORES # bing.com 元素的 score 值被改變
1) “bing.com”
2) “6”
3) “baidu.com”
4) “9”
5) “google.com”
6) “10”

2、Pub/Sub發布訂閱管理

發布訂閱(pub/sub)是一種消息通信模式,主要的目的是解耦消息發布者和消息訂閱者之間的耦合,這點和設計模式中的觀察者模式比較相似。

Redis作為一個server,在訂閱者和發布者之間起到了消息路由的功能。訂閱者可以通過subscribe和psubscribe命令向Redis server訂閱自己感興趣的消息類型,Redis將消息類型稱為通道(channel)。當發布者通過publish命令向Redis server發送特定類型的消息時。訂閱該消息類型的全部client都會收到此消息。這里消息的傳遞是多對多的。一個client可以訂閱多個 channel,也可以向多個channel發送消息。

例如,一個客戶端訂閱了“CCTV-5”頻道的消息:

127.0.0.1:6379> SUBSCRIBE CCTV-5 Reading messages... (press Ctrl-C to quit) 1) "subscribe" 2) "CCTV-5" 3) (integer) 1

另一個客戶端在“CCTV-5”發布了兩條消息:

127.0.0.1:6379> PUBLISH CCTV-5 "Kobe will say good bye to NBA in 2016.4.4" (integer) 1 127.0.0.1:6379>PUBLISH CCTV-5 "Cavaliers Cleveland won the championship" (integer) 1

第一個客戶端就會收到這兩條消息:

127.0.0.1:6379> SUBSCRIBE CCTV-5 Reading messages... (press Ctrl-C to quit) 1) "subscribe" 2) "CCTV-5" 3) (integer) 1 1)"message" 2)"CCTV-5" 3)"Kobe will say good bye to NBA in 2016.4.4" 1)"message" 2)"CCTV-5" 3) "CavaliersCleveland won the championship"

命令示例

PSUBSCRIBE pattern [pattern …]

訂閱一個或多個符合給定模式的頻道。每個模式以 * 作為匹配符,比如 it* 匹配所有以 it 開頭的頻道( it.news 、 it.blog 、 it.tweets 等等), news.* 匹配所有以 news. 開頭的頻道( news.it 、 news.global.today 等等),諸如此類。

返回值:接收到的信息(請參見下面的代碼說明)。

// 訂閱 news.* 和 tweet.* 兩個模式

// 第 1 - 6 行是執行 psubscribe 之后的反饋信息
// 第 7 - 10 才是接收到的第一條信息
// 第 11 - 14 是第二條
// 以此類推。。。

redis> psubscribe news.* tweet.*
Reading messages… (press Ctrl-C to quit)
1) “psubscribe” # 返回值的類型:顯示訂閱成功
2) “news.*” # 訂閱的模式
3) (integer) 1 # 目前已訂閱的模式的數量

1) “psubscribe”
2) “tweet.*”
3) (integer) 2

1) “pmessage” # 返回值的類型:信息
2) “news.*” # 信息匹配的模式
3) “news.it” # 信息本身的目標頻道
4) “Google buy Motorola” # 信息的內容

1) “pmessage”
2) “tweet.*”
3) “tweet.huangz”
4) “hello”

1) “pmessage”
2) “tweet.*”
3) “tweet.joe”
4) “@huangz morning”

1) “pmessage”
2) “news.*”
3) “news.life”
4) “An apple a day, keep doctors away”

3、Transaction事務管理

4、Script(腳本)管理命令

命令示例

EVALSHA sha1 numkeys key [key …] arg [arg …]

根據給定的 sha1 校驗碼,對緩存在服務器中的腳本進行求值。將腳本緩存到服務器的操作可以通過 SCRIPT LOAD 命令進行。這個命令的其他地方,比如參數的傳入方式,都和 EVAL 命令一樣。

redis> SCRIPT LOAD “return ‘hello moto’”
“232fd51614574cf0867b83d384a5e898cfd24e5a”

redis> EVALSHA “232fd51614574cf0867b83d384a5e898cfd24e5a” 0
“hello moto”

5、connection連接管理命令

默認情況下,Redis沒有密碼要求,意味著無需通過密碼驗證就可以連接到Redis 服務。

可以通過更改配置文件中的“requirepass”配置項,來設置密碼。

winner@winnerdeMacBook-Pro:~$ Redis-cli 127.0.0.1:6379> CONFIG get requirepass 1) "requirepass" 2) "" --默認沒有密碼 127.0.0.1:6379> CONFIG set requirepass"chenlongfei" --設置密碼 OK 127.0.0.1:6379> QUIT --退出重新連接 winner@winnerdeMacBook-Pro:~$ Redis-cli 127.0.0.1:6379> SET name "clf" (error) NOAUTH Authentication required. –提示沒權限 127.0.0.1:6379> AUTH chenlongfei --驗證密碼 OK 127.0.0.1:6379> SET name "clf" --之后才能進行操作 OK 127.0.0.1:6379> GET name "clf"

命令示例

AUTH password

通過設置配置文件中 requirepass 項的值(使用命令 CONFIG SET requirepass password ),可以使用密碼來保護 Redis 服務器。

如果開啟了密碼保護的話,在每次連接 Redis 服務器之后,就要使用 AUTH 命令解鎖,解鎖之后才能使用其他 Redis 命令。

如果 AUTH 命令給定的密碼 password 和配置文件中的密碼相符的話,服務器會返回 OK 并開始接受命令輸入。

另一方面,假如密碼不匹配的話,服務器將返回一個錯誤,并要求客戶端需重新輸入密碼。

因為 Redis 高性能的特點,在很短時間內嘗試猜測非常多個密碼是有可能的,因此請確保使用的密碼足夠復雜和足夠長,以免遭受密碼猜測攻擊。

返回值:密碼匹配時返回 OK ,否則返回一個錯誤。

// 設置密碼

redis> CONFIG SET requirepass secret_password # 將密碼設置為 secret_password
OK

redis> QUIT # 退出再連接,讓新密碼對客戶端生效

[huangz@mypad]$ redis

redis> PING # 未驗證密碼,操作被拒絕
(error) ERR operation not permitted

redis> AUTH wrong_password_testing # 嘗試輸入錯誤的密碼
(error) ERR invalid password

redis> AUTH secret_password # 輸入正確的密碼
OK

redis> PING # 密碼驗證成功,可以正常操作命令了
PONG

//清空密碼

redis> CONFIG SET requirepass “” # 通過將密碼設為空字符來清空密碼
OK

redis> QUIT

$ redis # 重新進入客戶端

redis> PING # 執行命令不再需要密碼,清空密碼操作成功
PONG

6、Server(服務器)管理命令

Redis定義了一組與服務器相關的命令,用于查詢服務器信息,如當前時間、客戶端連接數量,以及修改配置文件、手動觸發某些操作等。

命令示例

SAVE

SAVE 命令執行一個同步保存操作,將當前 Redis 實例的所有數據快照(snapshot)以 RDB 文件的形式保存到硬盤。

一般來說,在生產環境很少執行 SAVE 操作,因為它會阻塞所有客戶端,保存數據庫的任務通常由 BGSAVE 命令異步地執行。然而,如果負責保存數據的后臺子進程不幸出現問題時, SAVE 可以作為保存數據的最后手段來使用。

返回值:保存成功時返回 OK 。

redis> SAVE
OK

總結

以上是生活随笔為你收集整理的【Redis学习】Redis管理命令总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。