> **Redis-常用類型操作命令(數據庫/string)**
[TOC]
## 說明 ##
**記錄以下Redis常用類型的操作命令。**
----------
## Redis簡單說明 ##
<h5>參考文檔</h5>
>redis中文網:http://www.redis.cn/
>菜鳥教程: https://www.runoob.com/redis/redis-tutorial.html
>redis文檔: http://redisdoc.com/
<h5>簡單介紹</h5>
Redis 是一個高性能的 key-value 數據庫。
Redis 與其他 key - value 緩存產品有以下三個特點:
Redis支持數據的持久化,可以將內存中的數據保存在磁盤中,重啟的時候可以再次加載進行使用。
Redis不僅僅支持簡單的key-value類型的數據,同時還提供list,set,zset,hash等數據結構的存儲。
Redis支持數據的備份,即master-slave模式的數據備份。
## 通用數據庫命令 ##
<h5>KEYS * 查看所有</h5>
127.0.0.1:6379> set a 1
OK
127.0.0.1:6379> set b 2
OK
127.0.0.1:6379> keys *
1) "b"
2) "a"
<h5>KEYS 模糊匹配key</h5>
keys 也支持模糊匹配,keys pattern 模式
keys pattern模式支持三種通配符* ? []
* 匹配任意字符
? 通配單個字符
[] 通配指定字符
----------
127.0.0.1:6379> set zhangsan 19
OK
127.0.0.1:6379> set zhangqiang 18
OK
127.0.0.1:6379> set wangwu 16
OK
127.0.0.1:6379> set wangliu 17
OK
127.0.0.1:6379> keys z*
1) "zhangqiang"
2) "zhangsan"
127.0.0.1:6379> keys zha??*
1) "zhangqiang"
2) "zhangsan"
127.0.0.1:6379> keys wang[w]u
1) "wangwu"
<h5>TYPE 獲取key類型 </h5>
TYPE key:返回 key 所儲存的值的類型。
返回值
none (key不存在)
string (字符串)
list (列表)
set (集合)
zset (有序集)
hash (哈希表)
stream (流)
----------
# 字符串
redis> SET weather "sunny"
OK
redis> TYPE weather
string
# 列表
redis> LPUSH book_list "programming in scala"
(integer) 1
redis> TYPE book_list
list
# 集合
redis> SADD pat "dog"
(integer) 1
redis> TYPE pat
set
<h5>DEL 刪除key </h5>
DEL key [key …]:刪除給定的一個或多個 key 。
不存在的 key 會被忽略。
返回值:被刪除 key 的數量。
----------
127.0.0.1:6379> keys *
1) "1"
2) "zhangsan"
3) "wangwu"
4) "wangliu"
5) "zhangqiang"
127.0.0.1:6379> del 1
(integer) 1
127.0.0.1:6379> keys *
1) "zhangsan"
2) "wangwu"
3) "wangliu"
4) "zhangqiang"
<h5>EXISTS 判斷key存在</h5>
> 1存在 0不存在
127.0.0.1:6379> keys *
1) "zhangsan"
2) "wangwu"
3) "wangliu"
4) "zhangqiang"
127.0.0.1:6379> exists zhangsan
(integer) 1
127.0.0.1:6379> exists lisi
(integer) 0
<h5>RENAME 重命名</h5>
給key值重命名,如果名字已存在,在名字的原值被覆蓋
127.0.0.1:6379> rename zhangsan zhangsans
OK
127.0.0.1:6379> keys *
1) "zhangsans"
2) "wangwu"
3) "wangliu"
4) "zhangqiang"
----------
127.0.0.1:6379> get wangwu
"19"
127.0.0.1:6379> get wangliu
"17"
127.0.0.1:6379> rename wangliu wangwu
OK
127.0.0.1:6379> get wangwu
"17"
<h5>RENAMENX 名字不存在時重命名</h5>
> 1修改 0不修改
127.0.0.1:6379> keys *
1) "wangwu"
2) "zhangqiang"
127.0.0.1:6379> renamenx wangwu zhangqiang
(integer) 0
<h5>MOVE移動key到其他庫</h5>
> redis 默認開啟16個庫 從0開始
127.0.0.1:6379> keys *
1) "wangwu"
2) "zhangqiang"
127.0.0.1:6379> move wangwu 2
(integer) 1
127.0.0.1:6379> select 2
OK
127.0.0.1:63
<h5>EXPIRE 設置key過期時間(秒)</h5>
> pexpire 設置過期時間毫秒
127.0.0.1:6379> expire zhangqiang 10000
(integer) 1
127.0.0.1:6379> ttl zhangqiang
(integer) 9996
<h5>TTL 返回key過期時間(秒)</h5>
> pttl 返回key過期時間毫秒
> 鍵值不存在時返回-2
127.0.0.1:6379> ttl zhangqiang
(integer) 9792
127.0.0.1:6379> pttl zhangqiang
(integer) 9788177
127.0.0.1:6379> ttl wangliu
(integer) -2
<h5>PERSITE 設置key為永久</h5>
> 1成功 0失敗
127.0.0.1:6379> persist zhangqiang
(integer) 1
127.0.0.1:6379> persist wangliu
(integer) 0
<h5>DBSIZE</h5>
DBSIZE返回當前數據庫的 key 的數量。
返回值:當前數據庫的 key 的數量。
----------
redis> DBSIZE
(integer) 5
redis> SET new_key "hello_moto" # 增加一個 key 試試
OK
redis> DBSIZE
(integer) 6
<h5>FLUSHDB</h5>
清空當前數據庫中的所有 key。
此命令從不失敗。
<h5>FLUSHDB</h5>
清空整個 Redis 服務器的數據(刪除所有數據庫的所有 key )。
此命令從不失敗。
<h5>SELECT</h5>
切換到指定的數據庫,數據庫索引號 index 用數字值指定,以 0 作為起始索引值。
默認使用 0 號數據庫。
----------
redis> SET db_number 0 # 默認使用 0 號數據庫
OK
redis> SELECT 1 # 使用 1 號數據庫
OK
redis[1]> GET db_number # 已經切換到 1 號數據庫,注意 Redis 現在的命令提示符多了個 [1]
(nil)
redis[1]> SET db_number 1
OK
redis[1]> GET db_number
"1"
redis[1]> SELECT 3 # 再切換到 3 號數據庫
OK
redis[3]> # 提示符從 [1] 改變成了 [3]
<h5>SWAPDB</h5>
SWAPDB db1 db2
對換指定的兩個數據庫, 使得兩個數據庫的數據立即互換。
----------
# 對換數據庫 0 和數據庫 1
redis> SWAPDB 0 1
OK
## 字符串 string ##
<h5>SET</h5>
> MSET同時為多個鍵設置值。
SET key value [EX seconds] [PX milliseconds] [NX|XX]
將字符串值 value 關聯到 key 。
如果 key 已經持有其他值, SET 就覆寫舊值, 無視類型。
當 SET 命令對一個帶有生存時間(TTL)的鍵進行設置之后, 該鍵原有的 TTL 將被清除。
----------
EX seconds : 將鍵的過期時間設置為 seconds 秒。 執行 SET key value EX seconds 的效果等同于執行 SETEX key seconds value 。
PX milliseconds : 將鍵的過期時間設置為 milliseconds 毫秒。 執行 SET key value PX milliseconds 的效果等同于執行 PSETEX key milliseconds value 。
NX : 只在鍵不存在時, 才對鍵進行設置操作。 執行 SET key value NX 的效果等同于執行 SETNX key value 。
XX : 只在鍵已經存在時, 才對鍵進行設置操作。
127.0.0.1:6379> set zhangsan 1000 ex 100
OK
127.0.0.1:6379> ttl zhangsan
(integer) 94
127.0.0.1:6379> get zhangsan
"1000"
<h5>SETNX</h5>
> MSETNX 當且僅當所有給定鍵都不存在時, 為所有給定鍵設置值。
只在鍵 key 不存在的情況下, 將鍵 key 的值設置為 value 。
若鍵 key 已經存在, 則 SETNX 命令不做任何動作。
SETNX 是『SET if Not eXists』(如果不存在,則 SET)的簡寫。
返回值
命令在設置成功時返回 1 , 設置失敗時返回 0 。
127.0.0.1:6379> setnx zhangsan 1000
(integer) 1
127.0.0.1:6379> setnx zhangsan 600
(integer) 0
<h5>SETEX</h5>
SETEX key seconds value
將鍵 key 的值設置為 value , 并將鍵 key 的生存時間設置為 seconds 秒鐘。
如果鍵 key 已經存在, 那么 SETEX 命令將覆蓋已有的值。
SETEX 命令的效果和以下兩個命令的效果類似:
SET key value
EXPIRE key seconds # 設置生存時間
SETEX 和這兩個命令的不同之處在于 SETEX 是一個原子(atomic)操作, 它可以在同一時間內完成設置值和設置過期時間這兩個操作, 因此 SETEX 命令在儲存緩存的時候非常實用。
返回值
命令在設置成功時返回 OK 。 當 seconds 參數不合法時, 命令將返回一個錯誤。
PSETEX key milliseconds value
PSETEX 設置毫秒 語法跟SETEX相同
----------
127.0.0.1:6379> setex lisi 600 100
OK
127.0.0.1:6379> ttl lisi
(integer) 595
<h5>GET</h5>
返回與鍵 key 相關聯的字符串值。
返回值
如果鍵 key 不存在, 那么返回特殊值 nil ; 否則, 返回鍵 key 的值。
如果鍵 key 的值并非字符串類型, 那么返回一個錯誤, 因為 GET 命令只能用于字符串值。
----------
127.0.0.1:6379> set a zhangsan
OK
127.0.0.1:6379> get a
"zhangsan"
<h5>GETSET</h5>
GETSET key value
將鍵 key 的值設為 value , 并返回鍵 key 在被設置之前的舊值。
返回值
返回給定鍵 key 的舊值。
如果鍵 key 沒有舊值, 也即是說, 鍵 key 在被設置之前并不存在, 那么命令返回 nil 。
當鍵 key 存在但不是字符串類型時, 命令返回一個錯誤。
----------
127.0.0.1:6379> set a zhangsan
OK
127.0.0.1:6379> get a
"zhangsan"
127.0.0.1:6379> getset a lisi
"zhangsan"
127.0.0.1:6379> get a
"lisi"
<h5>STRLEN</h5>
STRLEN key返回鍵 key 儲存的字符串值的長度。
返回值
STRLEN 命令返回字符串值的長度。
當鍵 key 不存在時, 命令返回 0 。
當 key 儲存的不是字符串值時, 返回一個錯誤。
----------
127.0.0.1:6379> strlen a
(integer) 4
127.0.0.1:6379> strlen b
(integer) 0
127.0.0.1:6379>
<h5>APPEND</h5>
APPEND key value 如果鍵 key 已經存在并且它的值是一個字符串, APPEND 命令將把 value 追加到鍵 key 現有值的末尾。
如果 key 不存在, APPEND 就簡單地將鍵 key 的值設為 value , 就像執行 SET key value 一樣。
返回值
追加 value 之后, 鍵 key 的值的長度。
----------
127.0.0.1:6379> append a wangwu
(integer) 10
127.0.0.1:6379> get a
"lisiwangwu"
<h5>INCR</h5>
> INCRBY 為鍵 key 儲存的數字值加上增量 increment 。
> INCRBYFLOAT 為鍵 key 儲存的值加上浮點數增量 increment 。
> DECR為鍵 key 儲存的數字值減去一。
> DECRBY將鍵 key 儲存的整數值減去減量 decrement 。
為鍵 key 儲存的數字值加上一。
如果鍵 key 不存在, 那么它的值會先被初始化為 0 , 然后再執行 INCR 命令。
如果鍵 key 儲存的值不能被解釋為數字, 那么 INCR 命令將返回一個錯誤。
本操作的值限制在 64 位(bit)有符號數字表示之內。
INCR 命令會返回鍵 key 在執行加一操作之后的值。
----------
127.0.0.1:6379> set age 20
OK
127.0.0.1:6379> incr age
(integer) 21
127.0.0.1:6379> incr age
(integer) 22
127.0.0.1:6379> incr age
(integer) 23
<h5>SETRANGE</h5>
從偏移量 offset 開始, 用 value 參數覆寫(overwrite)鍵 key 儲存的字符串值。
不存在的鍵 key 當作空白字符串處理。
SETRANGE 命令會確保字符串足夠長以便將 value 設置到指定的偏移量上, 如果鍵 key 原來儲存的字符串長度比偏移量小(比如字符串只有 5 個字符長,但你設置的 offset 是 10 ), 那么原字符和偏移量之間的空白將用零字節(zerobytes, "\x00" )進行填充。
因為 Redis 字符串的大小被限制在 512 兆(megabytes)以內, 所以用戶能夠使用的最大偏移量為 2^29-1(536870911) , 如果你需要使用比這更大的空間, 請使用多個 key 。
返回值
SETRANGE 命令會返回被修改之后, 字符串值的長度。
----------
127.0.0.1:6379> set zw "zhans san"
OK
127.0.0.1:6379> SETRANGE zw 6 "lisi"
(integer) 10
127.0.0.1:6379> get zw
"zhans lisi"
127.0.0.1:6379> SETRANGE zw 12 "lisi"
(integer) 16
127.0.0.1:6379> get zw
"zhans lisi\x00\x00lisi"
127.0.0.1:6379>
<h5>GETRANGE</h5>
返回鍵 key 儲存的字符串值的指定部分, 字符串的截取范圍由 start 和 end 兩個偏移量決定 (包括 start 和 end 在內)。
負數偏移量表示從字符串的末尾開始計數, -1 表示最后一個字符, -2 表示倒數第二個字符, 以此類推。
GETRANGE 通過保證子字符串的值域(range)不超過實際字符串的值域來處理超出范圍的值域請求。
GETRANGE 命令會返回字符串值的指定部分。
----------
127.0.0.1:6379> GETRANGE zw 6 12
"lisi\x00\x00l"
127.0.0.1:6379> GETRANGE zw 0 -6
"zhans lisi\x00"
## 結尾 ##
<p style="background-image: -webkit-linear-gradient(left, #3498db, #f47920 10%, #d71345 20%, #f7acbc 30%,#ffd400 40%, #3498db 50%, #f47920 60%, #d71345 70%, #f7acbc 80%, #ffd400 90%, #3498db);color: transparent;-webkit-text-fill-color: transparent;-webkit-background-clip: text;text-align:center;">
腹有詩書氣自華,最是書香能致遠。
</p>