Redis基礎系列-0x002:KEY相關操作

weixin_34127717發表於2018-05-15

0x001 概述

redis是儲存鍵值對的資料庫,儲存形式可以表達為如下:

key value
key value
key value
key value
key value
  • key:
    key是二進位制安全的,這意味著可以使用任意的二進位制序列作為key,從類似foo的字串到一個JPEG檔案內容,甚至空字串也可以。
  • value
    value有多種的資料結構,並不是單純的字串

    • Strings: 字串
    • Lists:列表
    • Sets:集合
    • Hashes:雜湊
    • Sorted sets:有序雜湊
    • Bitmaps and HyperLogLogs:不討論

0x002 新增key

語法格式:SET key value
127.0.0.1:6379> SET name helloworld
OK
# 如果`key`已經存在了將會覆蓋原先的`key`
127.0.0.1:6379> SET name helloworld2
OK
127.0.0.1:6379> GET name helloworld2
"helloworld2"

0x003 判斷key是否存在

語法格式:EXITS key
127.0.0.1:6379> EXISTS name
(integer) 1

# 如果`key`不存在,將會返回0
127.0.0.1:6379> EXISTS name2
(integer) 0

0x004 獲取keyvalue

語法格式:GET key
127.0.0.1:6379> GET name
"helloworld"

# 如果`key`不存在,將會返回`nil`
127.0.0.1:6379> GET name2
(nil)

0x005 刪除keyvalue

命令格式:DEL KEY_NAME
# 該命令返回刪除的條數,如果`key`不存在,則返回0
127.0.0.1:6379> DEL name
(integer) 1
127.0.0.1:6379> DEL name2
(integer) 0

0x006 修改key的值,是key的名字,不是value

命令格式: RENAME name newName
127.0.0.1:6379> SET name helloworld
OK
127.0.0.1:6379> RENAME name newName
OK
127.0.0.1:6379> Get name
(nil)
127.0.0.1:6379> GET newName
"helloworld"
# 如果`key`不存在,將會報錯
127.0.0.1:6379> RENAME name2 name
(error) ERR no such key
# 如果`newKey`已經存在,則將覆蓋
127.0.0.1:6379> set name2 helloworld2
OK
127.0.0.1:6379> RENAME name name2
OK
127.0.0.1:6379> GET name2
"helloworld"
# 只有在`newKey`不存在的時候,才重新命名,防止被覆蓋要用以下命令
127.0.0.1:6379> SET name helloworld
OK
127.0.0.1:6379> SET name2 helloworld2
OK
127.0.0.1:6379> RENAMENX name name2
(integer) 0
127.0.0.1:6379> GET name
"helloworld"
127.0.0.1:6379> GET name2
"helloworld2"

0x007 獲取key儲存value的資料型別

127.0.0.1:6379> set name helloworld
OK
127.0.0.1:6379> TYPE name
string
# 如果`key`不存在,將會返回`none`
127.0.0.1:6379> TYPE name2
none

0x008 設定過期時間

語法格式: EXPIRE key seconde|timestamp , PEXPIRE secode|timestamp
127.0.0.1:6379> SET name helloworld
OK
127.0.0.1:6379> GET name
"helloworld"
# 設定5s過期
127.0.0.1:6379> EXPIRE name 5
(integer) 1
# 5s內
127.0.0.1:6379> GET name
"helloworld"
# 5s後
127.0.0.1:6379> GET name
(nil)

0X009 獲取剩餘時間

命令格式:TTL key | PTTL key
# 返回單位:秒
127.0.0.1:6379> SET name helloworld
OK
127.0.0.1:6379> EXPIRE name 5
(integer) 1
127.0.0.1:6379> TTL name
(integer) 3
127.0.0.1:6379> TTL name
(integer) 2
127.0.0.1:6379> TTL name
(integer) 1
127.0.0.1:6379> TTL name
(integer) -2
127.0.0.1:6379> GET name
(nil)
# 返回單位:毫秒
127.0.0.1:6379> SET name helloworld
OK
127.0.0.1:6379> EXPIRE name 5
(integer) 1
127.0.0.1:6379> PTTL name
(integer) 1106
127.0.0.1:6379> PTTL name
(integer) 445
127.0.0.1:6379> PTTL name
(integer) -2
127.0.0.1:6379> PTTL name
(integer) -2
127.0.0.1:6379> PTTL name
(integer) -2
127.0.0.1:6379> GET name
(nil)

0x010 移除過期時間

命令格式: PERSIST key
127.0.0.1:6379> SET name helloworld
OK
127.0.0.1:6379> EXPIRE name 10
(integer) 1
127.0.0.1:6379>  TTL name
(integer) 7
127.0.0.1:6379>  PTTL name
(integer) 4323
127.0.0.1:6379> PERSIST name
(integer) 1
127.0.0.1:6379> GET name
"helloworld"

0x011 注意
redis的命令不區分大小寫,所以get nameGET name一樣。

相關文章