1. 程式人生 > >Redis鍵(Key)

Redis鍵(Key)

lec array mes ima name sele 將不 設置 ren

Redis 鍵(key)

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

語法

Redis 鍵命令的基本語法如下:

redis 127.0.0.1:6379> COMMAND KEY_NAME

實例

127.0.0.1:6379> SET NoSQL0 redis
OK
127.0.0.1:6379> DEL NoSQL0
(integer) 1
127.0.0.1:6379>

在以上實例中 DEL 是一個命令, runoobkey 是一個鍵。 如果鍵被刪除成功,命令執行後輸出 (integer) 1,否則將輸出 (integer) 0

Redis keys 命令

命令執行成功則返回 (integer) 1

,否則將輸出 (integer) 0

DEL

Redis DEL 命令用於刪除已存在的鍵。不存在的 key 會被忽略。

127.0.0.1:6379> SET NoSQL0 redis
OK
127.0.0.1:6379> DEL NoSQL0
(integer) 1
127.0.0.1:6379>

DUMP

Redis DUMP 命令用於序列化給定 key ,並返回被序列化的值。如果 key 不存在,那麽返回 nil 。 否則,返回序列化之後的值。

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

Redis EXISTS 命令用於檢查給定 key 是否存在。若 key 存在返回 1 ,否則返回 0 。

127.0.0.1:6379> EXISTS greeting
(integer) 1
127.0.0.1:6379> EXISTS no-existing
(integer) 0
127.0.0.1:6379>

Keys

Redis Keys 命令用於查找所有符合給定模式 pattern 的 key .符合給定模式的 key 列表 (Array)。

127.0.0.1:6379> SET nosql0 redis   
OK                                 
127.0.0.1:6379> SET nosql2 mongodb 
OK                                 
127.0.0.1:6379> SET nosql3 Counchdb
OK                                 
127.0.0.1:6379> KEYS nosql*
1) "nosql0"
2) "nosql2"
3) "nosql3"
127.0.0.1:6379>                    

Expire

Redis Expire 命令用於設置 key 的過期時間。key 過期後將不再可用。設置成功返回 1 。 當 key 不存在或者不能為 key 設置過期時間時(比如在低於 2.1.3 版本的 Redis 中你嘗試更新 key 的過期時間)返回 0 。

127.0.0.1:6379> SET ttl-key redis
OK
127.0.0.1:6379> EXPIRE ttl-key 60
(integer) 1
127.0.0.1:6379>

設置了過期時間為 1 分鐘,1分鐘後該鍵會自動刪除。

Expireat

Redis Expireat 命令用於以 UNIX 時間戳(unix timestamp)格式設置 key 的過期時間。key 過期後將不再可用。設置成功返回 1 。 當 key 不存在或者不能為 key 設置過期時間時(比如在低於 2.1.3 版本的 Redis 中你嘗試更新 key 的過期時間)返回 0 。

127.0.0.1:6379> SET ttl-key redis
OK
127.0.0.1:6379> EXPIREAT ttl-key 1518689999
(integer) 1
127.0.0.1:6379>

EXPIREAT 的作用和 EXPIRE 類似,都用於為 key 設置過期時間。 不同在於 EXPIREAT 命令接受的時間參數是 UNIX 時間戳(unix timestamp)。類似的還有:

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

TTL & PERSIST

Redis TTL 命令以秒為單位返回 key 的剩余過期時間。當 key 不存在時,返回 -2 。 當 key 存在但沒有設置剩余生存時間時,返回 -1 。 否則,以秒為單位,返回 key 的剩余生存時間。類似的還有PTTL key以毫秒為單位返回 key 的剩余的過期時間。

Redis PERSIST 命令用於移除給定 key 的過期時間,使得 key 永不過期。當過期時間移除成功時,返回 1 。 如果 key 不存在或 key 沒有設置過期時間,返回 0 。

127.0.0.1:6379> SET mykey "Hello"
OK
127.0.0.1:6379> EXPIRE mykey 10
(integer) 1
127.0.0.1:6379> TTL mykey
(integer) 2
127.0.0.1:6379> PERSIST mykey
(integer) 0
127.0.0.1:6379> TTL mykey
(integer) -2

RANDOMKEY

Redis RANDOMKEY 命令從當前數據庫中隨機返回一個 key 。當數據庫不為空時,返回一個 key 。 當數據庫為空時,返回 nil 。

127.0.0.1:6379> FLUSHDB
OK                                                            
127.0.0.1:6379> RANDOMKEY
(nil)                                                         
127.0.0.1:6379> MSET fruit "apple" drink "beer" food "cookies"
OK                                                            
127.0.0.1:6379> RANDOMKEY 
"drink"                                                       
127.0.0.1:6379> RANDOMKEY
"fruit"                                                       
127.0.0.1:6379> RANDOMKEY
"fruit"                                                       

其中 FLUSHDB 刪除當前數據庫所有 key

Rename & Renamenx

Redis Rename 命令用於修改 key 的名稱 。改名成功時提示 OK ,失敗時候返回一個錯誤。當 OLD_KEY_NAME 和 NEW_KEY_NAME 相同,或者 OLD_KEY_NAME 不存在時,返回一個錯誤。 當 NEW_KEY_NAME 已經存在時, 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"

Redis Renamenx 命令用於在新的 key 不存在時修改 key 的名稱 。修改成功時,返回 1 。 如果NEW_KEY_NAME 已經存在,返回 0 。

# 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"

Type

Redis Type 命令用於返回 key 所儲存的值的類型。返回 key 的數據類型,數據類型有:

  • none (key不存在)
  • string (字符串)
  • list (列表)
  • set (集合)
  • zset (有序集)
  • hash (哈希表)
# 字符串

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

Move

Redis MOVE 命令用於將當前數據庫的 key 移動到給定的數據庫 db 當中。移動成功返回 1,失敗則返回 0 。

# 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

# 證實 song 被移到了數據庫 1 (註意命令提示符變成了"redis:1",表明正在使用數據庫 
redis:1> EXISTS song
(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"

Redis鍵(Key)