1. 程式人生 > 實用技巧 >Redis教程7-鍵(key)命令使用參考2

Redis教程7-鍵(key)命令使用參考2

1.MOVE

MOVE key db

將當前資料庫的key移動到給定的資料庫db當中。

如果當前資料庫(源資料庫)和給定資料庫(目標資料庫)有相同名字的給定key,或者key不存在於當前資料庫,那麼MOVE沒有任何效果。

因此,也可以利用這一特性,將MOVE當作鎖(locking)原語(primitive)。

可用版本:>= 1.0.0

時間複雜度:O(1)

返回值:移動成功返回1,失敗則返回0

127.0.0.1:6379> keys name    // 預設db 0資料庫
(empty list or set)
127.0.0.1:6379> set name redis666    //
設定name OK 127.0.0.1:6379> get name "redis666" 127.0.0.1:6379> select 1 // 切換到db 1 OK 127.0.0.1:6379[1]> get name // db 1中沒有name (nil) 127.0.0.1:6379[1]> select 0 // 切換回db 0 OK 127.0.0.1:6379> move name 1 // move name -> db 1 (integer) 1 127.0.0.1:6379> exists name // db 0中name已經沒了 (integer) 0
127.0.0.1:6379> select 1 OK 127.0.0.1:6379[1]> get name // db 1中有了剛才的name "redis666" 127.0.0.1:6379[1]>

從db 1 move一個不存在的key到db 0

127.0.0.1:6379[1]> keys *    // db 1中只有name
1) "name"
127.0.0.1:6379[1]> move age 0    // move age 到 db 0, 返回0, 不成功
(integer) 0

當db 1 和 db 0 都有相同key的時候

127.0.0.1:6379[1]> keys *    //
db 1中有name 1) "name" 127.0.0.1:6379[1]> select 0 // 切換到 db 0 OK 127.0.0.1:6379> get name // db 0 中沒有name (nil) 127.0.0.1:6379> set name redis888 // set 一個 name OK 127.0.0.1:6379> move name 1 // 從db 0 move 到 db 1, 不成功, 因為db0 和 db 1 都有name (integer) 0

2.PERSIST

PERSIST key

移除給定key的生存時間,將這個key從『易失的』(帶生存時間key)轉換成『持久的』(一個不帶生存時間、永不過期的key)。

可用版本:>= 2.2.0

時間複雜度:O(1)

返回值:

當生存時間移除成功時,返回1.

如果key不存在或key沒有設定生存時間,返回0

127.0.0.1:6379> get name
"redis888"
127.0.0.1:6379> expire name 5000    // 設定name過期時間5000s
(integer) 1
127.0.0.1:6379> ttl name    // 剩餘過期時間4997s
(integer) 4997
127.0.0.1:6379> persist name    // 移除過期時間的限制
(integer) 1
127.0.0.1:6379> ttl name    // 剩餘過期時間已經沒了
(integer) -1
127.0.0.1:6379> persist name    // 移除一個沒有過期時間的, 返回0
(integer) 0
127.0.0.1:6379> persist age    // 移除一個不存在的key, 返回0
(integer) 0
127.0.0.1:6379>

3.PEXPIRE

PEXPIRE key milliseconds

這個命令和EXPIRE命令的作用類似,但是它以毫秒為單位設定key的生存時間,而不像EXPIRE命令那樣,以秒為單位

可用版本:>= 2.6.0

時間複雜度:O(1)

返回值:

設定成功,返回1 key不存在或設定失敗,返回0
127.0.0.1:6379> pexpire name 20000    // 設定name的過期時間20s
(integer) 1
127.0.0.1:6379> ttl name    // ttl檢視剩餘過期時間, 檢視的是s
(integer) 18
127.0.0.1:6379> pttl name    // pttl檢視剩餘過期時間, 檢視的是ms
(integer) 12623
127.0.0.1:6379> ttl name
(integer) 6
127.0.0.1:6379> ttl name    // 已經過期了
(integer) -2
127.0.0.1:6379> get name    // name不存在了
(nil)
127.0.0.1:6379> keys name    // name不存在
(empty list or set)
127.0.0.1:6379>

4.PEXPIREAT

PEXPIREAT key milliseconds-timestamp

這個命令和EXPIRE, PEXPIRE 命令類似,但它以毫秒為單位設定key的過期 unix 時間戳,而不是像EXPIRE 那樣,以秒為單位(PEXPIRE為毫秒為單位)。

可用版本:>= 2.6.0

時間複雜度:O(1)

返回值:

如果生存時間設定成功,返回1

key不存在或沒辦法設定生存時間時,返回0。(檢視 上面 EXPIRE命令獲取更多資訊)

127.0.0.1:6379> set name redis666
OK
127.0.0.1:6379> pexpireat name 1600481820000    // 設定name過期時間為2020/9/19 10:17:00的unix時間戳1600481820000, 現在是2020/9/19 10:15:00
(integer) 1
127.0.0.1:6379> ttl name    // 剩餘過期時間30s
(integer) 30
127.0.0.1:6379> pttl name    // 剩餘過期時間 ms
(integer) 27723
127.0.0.1:6379> ttl name
(integer) 9
127.0.0.1:6379> ttl name    // 已過期
(integer) -2
127.0.0.1:6379> exists name    // name不存在了
(integer) 0
127.0.0.1:6379>

5.PTTL

PTTL key

這個命令類似於TTL命令,但它以毫秒為單位返回key的剩餘生存時間,而不是像TTL命令那樣,以秒為單位。

可用版本:>= 2.6.0

複雜度:O(1)

返回值:

key不存在時,返回-2。 當key存在但沒有設定剩餘生存時間時,返回-1。 否則,以毫秒為單位,返回key的剩餘生存時間。
在 Redis 2.8 以前,當 key 不存在,或者 key 沒有設定剩餘生存時間時,命令都返回 -1
127.0.0.1:6379> set name redis666
OK
127.0.0.1:6379> pttl name    // key存在但是沒有設定過期時間
(integer) -1
127.0.0.1:6379> pttl age    // key不存在
(integer) -2
127.0.0.1:6379> pexpire name 10000
(integer) 1
127.0.0.1:6379> pttl name    // 返回剩餘過期時間ms
(integer) 7084
127.0.0.1:6379> ttl name    // ttl返回剩餘過期時間s
(integer) 5
127.0.0.1:6379>

6.RANDOMKEY

RANDOMKEY

從當前資料庫中隨機返回(不刪除)一個key

可用版本:>= 1.0.0

時間複雜度:O(1)返回值:

當資料庫不為空時,返回一個key。 當資料庫為空時,返回nil
127.0.0.1:6379> keys *    // 空的db
(empty list or set)
127.0.0.1:6379> randomkey    // 返回nil
(nil)
127.0.0.1:6379> set name redis666    // set 三個值
OK
127.0.0.1:6379> set age 66
OK
127.0.0.1:6379> set tel 111111
OK
127.0.0.1:6379> randomkey    // 隨機返回
"tel"
127.0.0.1:6379> randomkey
"age"
127.0.0.1:6379> randomkey
"tel"
127.0.0.1:6379> randomkey
"age"
127.0.0.1:6379> randomkey
"tel"
127.0.0.1:6379> randomkey
"tel"
127.0.0.1:6379> randomkey
"age"
127.0.0.1:6379> randomkey
"age"
127.0.0.1:6379> randomkey
"tel"
127.0.0.1:6379> randomkey
"name"
127.0.0.1:6379> randomkey
"tel"

7.RENAME

RENAME KEY newkey

將key改名為newkey。

當key不存在時, 返回一個錯誤.

當newkey已經存在時, rename命令將覆蓋舊值

可用版本:>= 1.0.0

時間複雜度:O(1)

返回值:改名成功時提示OK,失敗時候返回一個錯誤。

127.0.0.1:6379> set name redis666
OK
127.0.0.1:6379> set name2 redis888
OK
127.0.0.1:6379> rename age newage    // 1.當key不存在時, 報錯
(error) ERR no such key
127.0.0.1:6379> rename name name3    // 2.當key存在, newkey不存在
OK
127.0.0.1:6379> exists name  // key不存在了
(integer) 0
127.0.0.1:6379> get name3  // newkey
"redis666"
127.0.0.1:6379> rename name3 name2    // 3.當newkey已經存在, key覆蓋newkey
OK
127.0.0.1:6379> exists name3    // key不存在了
(integer) 0
127.0.0.1:6379> get name2    // newkey值被覆蓋了
"redis666"
127.0.0.1:6379>