Redis實戰 - 4.Key

Redis 鍵(key)

Redis 鍵命令用於管理 redis 的鍵。css

DEL key

該命令用於在 key 存在時刪除 key。html

127.0.0.1:6379> set w3ckey redis
OK
127.0.0.1:6379> EXISTS w3ckey
(integer) 1
127.0.0.1:6379> del w3ckey
(integer) 1
127.0.0.1:6379> EXISTS w3ckey
(integer) 0
127.0.0.1:6379>

DUMP

DUMP key
序列化給定 key ,並返回被序列化的值。mysql

返回值
若是 key 不存在,那麼返回 nil 。 不然,返回序列化以後的值。redis

127.0.0.1:6379> SET greeting "hello, dumping world!"
OK
127.0.0.1:6379> dump greeting
"\x00\x15hello, dumping world!\a\x00,\x7f\xe7\xf1%\xed(W"
127.0.0.1:6379> DUMP not-exists-key
(nil)
127.0.0.1:6379>

EXISTS

EXISTS key
檢查給定 key 是否存在。sql

返回值
若 key 存在返回 1 ,不然返回 0 。mongodb

redis 127.0.0.1:6379> set runoob-new-key newkey
OK
redis 127.0.0.1:6379> EXISTS runoob-new-key
(integer) 1
redis 127.0.0.1:6379>

EXPIRE

EXPIRE key seconds
爲給定 key 設置過時時間,以秒計。shell

返回值
設置成功返回 1 。 當 key 不存在或者不能爲 key 設置過時時間時(好比在低於 2.1.3 版本的 Redis 中你嘗試更新 key 的過時時間)返回 0數據庫

redis 127.0.0.1:6379> SET runooobkey redis
OK
redis 127.0.0.1:6379> EXPIRE runooobkey 60
(integer) 1

以上實例中咱們爲鍵 runooobkey 設置了過時時間爲 1 分鐘,1分鐘後該鍵會自動刪除。swift

EXPIREAT

EXPIREAT key timestamp
EXPIREAT 的做用和 EXPIRE 相似,都用於爲 key 設置過時時間。 不一樣在於 EXPIREAT 命令接受的時間參數是 UNIX 時間戳(unix timestamp)。cookie

返回值
設置成功返回 1 。 當 key 不存在或者不能爲 key 設置過時時間時(好比在低於 2.1.3 版本的 Redis 中你嘗試更新 key 的過時時間)返回 0 。

redis 127.0.0.1:6379> SET runoobkey redis
OK
redis 127.0.0.1:6379> EXPIREAT runoobkey 1293840000
(integer) 1
redis 127.0.0.1:6379> EXISTS runoobkey
(integer) 0

PEXPIRE

PEXPIRE key milliseconds
設置 key 的過時時間以毫秒計。

redis> SET mykey "Hello"
"OK"
redis> PEXPIRE mykey 1500
(integer) 1
redis> TTL mykey
(integer) 1
redis> PTTL mykey
(integer) 1498
redis>

PEXPIREAT

PEXPIREAT key milliseconds-timestamp
設置 key 過時時間的時間戳(unix timestamp) 以毫秒計

返回值
設置成功返回 1 。 當 key 不存在或者不能爲 key 設置過時時間時(好比在低於 2.1.3 版本的 Redis 中你嘗試更新 key 的過時時間)返回 0 。

redis 127.0.0.1:6379> SET runoobkey redis
OK
redis 127.0.0.1:6379> PEXPIREAT runoobkey 1555555555005
(integer) 1

KEYS

KEYS pattern
查找全部符合給定模式( pattern)的 key 。

首先建立一些 key,並賦上對應值:

127.0.0.1:6379> SET runoob1 redis
OK
127.0.0.1:6379> SET runoob2 mysql
OK
127.0.0.1:6379> SET runoob3 mongodb
OK

查找以 runoob 爲開頭的 key:

127.0.0.1:6379> keys runoob*
1) "runoob3"
2) "runoob2"
3) "runoob1"

獲取 redis 中全部的 key 可用使用 *。

127.0.0.1:6379> KEYS *
1) "runoob3"
2) "runoob1"
3) "runoob2"

MOVE

MOVE key db
將當前數據庫的 key 移動到給定的數據庫 db 當中。

# key 存在於當前數據庫

redis> SELECT 0                             # redis默認使用數據庫 0,爲了清晰起見,這裏再顯式指定一次。
OK

redis> SET song "secret base - Zone"
OK

redis> MOVE song 1                          # 將 song 移動到數據庫 1
(integer) 1

redis> EXISTS song                          # song 已經被移走
(integer) 0

redis> SELECT 1                             # 使用數據庫 1
OK

redis:1> EXISTS song                        # 證明 song 被移到了數據庫 1 (注意命令提示符變成了"redis:1",代表正在使用數據庫 1)
(integer) 1


# 當 key 不存在的時候

redis:1> EXISTS fake_key
(integer) 0

redis:1> MOVE fake_key 0                    # 試圖從數據庫 1 移動一個不存在的 key 到數據庫 0,失敗
(integer) 0

redis:1> select 0                           # 使用數據庫0
OK

redis> EXISTS fake_key                      # 證明 fake_key 不存在
(integer) 0


# 當源數據庫和目標數據庫有相同的 key 時

redis> SELECT 0                             # 使用數據庫0
OK
redis> SET favorite_fruit "banana"
OK

redis> SELECT 1                             # 使用數據庫1
OK
redis:1> SET favorite_fruit "apple"
OK

redis:1> SELECT 0                           # 使用數據庫0,並試圖將 favorite_fruit 移動到數據庫 1
OK

redis> MOVE favorite_fruit 1                # 由於兩個數據庫有相同的 key,MOVE 失敗
(integer) 0

redis> GET favorite_fruit                   # 數據庫 0 的 favorite_fruit 沒變
"banana"

redis> SELECT 1
OK

redis:1> GET favorite_fruit                 # 數據庫 1 的 favorite_fruit 也是
"apple"

PERSIST

PERSIST key
移除 key 的過時時間,key 將持久保持。

redis> SET mykey "Hello"
OK

redis> EXPIRE mykey 10  # 爲 key 設置生存時間
(integer) 1

redis> TTL mykey
(integer) 10

redis> PERSIST mykey    # 移除 key 的生存時間
(integer) 1

redis> TTL mykey
(integer) -1

PTTL

PTTL key
以毫秒爲單位返回 key 的剩餘的過時時間。

返回值
當 key 不存在時,返回 -2 。 當 key 存在但沒有設置剩餘生存時間時,返回 -1 。 不然,以毫秒爲單位,返回 key 的剩餘生存時間。
注意:在 Redis 2.8 之前,當 key 不存在,或者 key 沒有設置剩餘生存時間時,命令都返回 -1 。

# 不存在的 key

redis> FLUSHDB
OK

redis> PTTL key
(integer) -2


# key 存在,但沒有設置剩餘生存時間

redis> SET key value
OK

redis> PTTL key
(integer) -1


# 有剩餘生存時間的 key

redis> PEXPIRE key 10086
(integer) 1

redis> PTTL key
(integer) 6179

TTL

TTL key
以秒爲單位,返回給定 key 的剩餘生存時間(TTL, time to live)。

# 不存在的 key

redis> FLUSHDB
OK

redis> TTL key
(integer) -2


# key 存在,但沒有設置剩餘生存時間

redis> SET key value
OK

redis> TTL key
(integer) -1


# 有剩餘生存時間的 key

redis> EXPIRE key 10086
(integer) 1

redis> TTL key
(integer) 10084

RANDOMKEY

RANDOMKEY
從當前數據庫中隨機返回一個 key 。

# 數據庫不爲空

redis> MSET fruit "apple" drink "beer" food "cookies"   # 設置多個 key
OK

redis> RANDOMKEY
"fruit"

redis> RANDOMKEY
"food"

redis> KEYS *    # 查看數據庫內全部key,證實 RANDOMKEY 並不刪除 key
1) "food"
2) "drink"
3) "fruit"


# 數據庫爲空

redis> FLUSHDB  # 刪除當前數據庫全部 key
OK

redis> RANDOMKEY
(nil)

RENAME

RENAME oldkey newkey
修改 key 的名稱

返回值
更名成功時提示 OK ,失敗時候返回一個錯誤。
當 oldkey 和 newkey 相同,或者 oldkey 不存在時,返回一個錯誤。 當 newkey 已經存在時, RENAME 命令將覆蓋舊值。

# key 存在且 newkey 不存在

redis> SET message "hello world"
OK

redis> RENAME message greeting
OK

redis> EXISTS message               # message 不復存在
(integer) 0

redis> EXISTS greeting              # greeting 取而代之
(integer) 1


# 當 key 不存在時,返回錯誤

redis> RENAME fake_key never_exists
(error) ERR no such key


# newkey 已存在時, RENAME 會覆蓋舊 newkey

redis> SET pc "lenovo"
OK

redis> SET personal_computer "dell"
OK

redis> RENAME pc personal_computer
OK

redis> GET pc
(nil)

redis:1> GET personal_computer      # 原來的值 dell 被覆蓋了
"lenovo"

RENAMENX

RENAMENX oldkey newkey
僅當 newkey 不存在時,將 oldkey 更名爲 newkey 。

# newkey 不存在,更名成功

redis> SET player "MPlyaer"
OK

redis> EXISTS best_player
(integer) 0

redis> RENAMENX player best_player
(integer) 1


# newkey存在時,失敗

redis> SET animal "bear"
OK

redis> SET favorite_animal "butterfly"
OK

redis> RENAMENX animal favorite_animal
(integer) 0

redis> get animal
"bear"

redis> get favorite_animal
"butterfly"

RENAME 與 RENAMENX 區別

相同:
newkey 不存在
RENAMERENAMENX同樣:oldkey刪除
不一樣:
newkey 已存在時
RENAME 會覆蓋舊 newkey,RENAMENX 失敗。

TYPE

TYPE key
返回 key 所儲存的值的類型。

# 字符串

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

參考

runoob,Redis 鍵(key)

相關文章
相關標籤/搜索