引言
在Redis學習筆記(一)中我們已經會安裝並且簡單使用Redis了,接下來我們一起來學習下Redis支持的5大數據類型。
簡介
Redis是REmote DIctionary Server(遠程字段服務器)的縮寫,它以字典結構存儲數據,並允許其他應用通過TCP協議讀寫字典中的內容。同大多數腳本語言中的字典一樣,Redis字典中的鍵值除了可以是字符串,還可以是其他的數據類型。到目前為止Redis支持的鍵值數據類型如下:
(1)字符串類型(String)
(2)散列類型(Hash)
(3)列表類型(List)
(4)集合類型(Set)
(5)有序集合類型(SortedSet)
在學習這5種數據類型之前,我們先了解幾個基礎的命令來熱身。
1)KEYS pattern
此命令用來獲取復核規則的鍵名列表,pattern支持glob風格通配符格式,具體規則如下圖:
下圖的例子中,SELECT 0 表示選擇0號數據庫,KEYS * 表示查詢所有的key,KEYS foo* 表示查詢所有以foo開頭的key。
2)EXISTS key
此命令用來判斷一個鍵是否存在。存在返回1,不存在返回0。實例如下圖:
3)TYPE key
此命令用來獲取鍵值的數據類型,返回值可以是以上提到的5種數據類型。
通過上面的簡單命令,相信大家已經對Redis有了個初步的認識。下面來詳細的介紹各個類型所涉及的命令。
一、字符串類型(String)
1.介紹
字符串類型是Redis中最基礎的數據類型,它能存儲任何的字符串,包括二進制數據。你也可以用它來存儲用戶的郵箱、JSON對象和圖片等。一個字符串類型鍵允許存儲的數據的最大容量是512M。字符串類型也是其他4種數據類型的基礎,只能說他們的組織字符串的形式不同罷了。
2.基本命令
1)賦值與取值
SET key value 此命令用來賦值,如果key存在,則會覆蓋原有的value值;如若不存在則會新建一個key,賦值為value。
GET key 此命令用來取值,如果key存在,則返回原有的value;不存在則返回nil。
2)遞增或遞減整數
當存儲的字符串是整數形式時,以下命令才會有實際作用,否則Redis會提示錯誤:
INCR key INCRBY key increment
INCR key命令用來使key的當前值(整數)遞增,並返回遞增后的值。當要操作的鍵不存在時會默認值為0。
INCRBY key increment 命令與 INCR 命令基本一樣,INCRBY key increment命令可以通過increment參數來控制每次遞增的值。示例如下:
DECR key DECRBY key increment 這兩命令與以上兩個命令用法一致,此處不再贅述。
3)增加指定浮點數
INCRBYFLOAT key increment
INCRBYFLOAT 命令類似INCRBY命令,差別是INCRBYFLOAT命令可以增加一個雙精度浮點數。示例如下:
4)向尾部增加值
APPEND key value
此命令是像鍵值的末尾追加value。返回值為追加后的字符串的長度。如果key不存在則新增一個鍵為key,它的值為value。
5)獲取字符串的長度
STRLEN key
此命令返回鍵值的長度。
6)同時獲取或者設置多個鍵值
MSET key value [key1 value1 key2 value2 ...] MGET key[key1 key2 ...]
7)位操作
GETBIT key offset SETBIT key offset value
BITCOUNT key [start] [end]
BITOP oppration destkey key [key1 key2 ...]
一個字節由8個二進制組成,上面4個命令可以直接對二進制位進行操作。由於此命令在開發中不太常用,此處不再贅述,如有興趣,大家可參考《REDIS入門指南》的30頁。
二、散列類型(Hash)
1.介紹
Hash存儲了字段和字段值的映射,但字段值只能是字符串類型,也就是說,散列類型不支持嵌套其他的數據類型。一個散列類型鍵至多可以包含 2的32次方減1 個字段。散列類型很適合存儲對象,使用對象類別和ID組成鍵名,字段名來表示對象屬性名,字段值來存儲屬性值。例如要存儲ID為2的汽車:
注:Redis的其他數據類型同樣也不支持數據類型嵌套。
2.命令
1)賦值與取值
HSET key field value HGET key field
HMSET key field value [field1 value1 ...] HMGET key field [field1...]
HGETALL key
在上述命令中key表示Hash鍵值的鍵名,field表示字段名,value則表示字段所對應的字段值。用法與String類型基本一致,此處不再贅述。需要注意的是,HSET命令不區分插入和更新操作。當執行插入操作時返回值為1,當執行更新操作時返回值為0。更進一步,當鍵不存在時,HSET命令還會自動創建它。
特別的,HGETALL命令適用於想獲取鍵中所有字段和字段值,卻又不知道鍵中有哪些字段時這樣的場景。如:
另外,每種數據類型都有屬於自己的命令,但是都是基於字符串類型(String)來改變的,如散列類型(Hash)的命令就是H開頭的。如果使用一種數據類型的命令去操作另外一種數據類型的話,Redis會提示錯誤。
2)判斷字符串是否存在
HEXISTS key field
此命令用來判斷一個字段是否存在,如果存在返回值為1,否則為0。鍵如果不存在也會返回0。
3)HSETNX key field value
此命令與HSET命令相似,區別在於如果字段已經存在,將不執行任何操作,否則執行HSET key field value 操作。
4)增加數字
HINCRBY key field increment
此命令與String的INCRBY命令用法一致,此處不再贅述。
5)刪除字段
HDEL key field [field1 ...]
HDEL 命令可以刪除一個或多個字段,返回值是刪除的字段的個數。
6)只獲取字段或字段值
HKEYS key KVALS key
7)獲得字段個數
HLEN key
由於時間問題,今天先更新2個數據類型,后續會繼續更新。