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 獲取key
的value
語法格式:GET key
127.0.0.1:6379> GET name
"helloworld"
# 如果`key`不存在,將會返回`nil`
127.0.0.1:6379> GET name2
(nil)
0x005 刪除key
的value
命令格式: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 name
和GET name
一樣。