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) 0127.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不存在或設定失敗,返回0127.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>