Redis五種數據類型

redis是一個鍵值對的數據庫,其中value支持五種基本數據類型:字符串類型(String),散列類型(hash),集合類型(set),列表類型(list),有序集合類型(zset)。

一、String(字符串)

String是redis最基本的數據類型,一個key對應一個value,一個鍵最大能存儲512MB。

String類型是二進制安全的(也就是說redis的String可以包含任何數據。例如圖片或者序列化對象),對字符串的一些常用的操作命令如下:

1)set key value:設置指定key的值
2)get key:獲取指定的key的值
3)getrance key_name start end:用於獲取存儲在指定key的字符串的字字符串。子字符串的截取範圍由 start 和 end 這 兩個偏移量決定(包括 start 和 end )。

例如:

test:0>set mykey "this is my test key"
OK

test:0>getrange mykey 0 3
this

test:0>getrange mykey 0 -1
this is my test key

4)getset key_name value:設置指定key的值,並返回key的舊值。
返回值:返回給定的key的舊值。當key沒有舊值的時候,即key值不存在時,返回null 。當key值存在但不是字 符串類型時,返回一個錯誤。

例如:當key沒有舊值時

test:0>getset db mongodb         
NULL

test:0>get db
mongodb

當key有舊值的時候

test:0>getset db redis          
mongodb

test:0>get db
redis

當key存在但不是字符串類型時

test:0>lpush list 1               
1

test:0>getset list 2              
WRONGTYPE Operation against a key holding the wrong kind of value

二、Hash(哈希)

Redis hash是一個鍵值(key>=value)對的集合。
Redis hash是一個String類型的field 和 value的映射表,hash特別適合用於存儲對象。
一些常用的操作命令如下:

1) hedel key_name field1………fieldn:用於刪除哈希表key中的一個或多個指定字段,不存在的字段將被忽略。

例如:

test:0>hset myhash field2 "foo"     
1
test:0>hgetall myhash
1) field2
2) foo
test:0>hdel myhash field2
1
test:0>hdel myhash field2
0

2)hexists key_name field_name:用於查看哈希表指定字段是否存在。
返回值:如果哈希表含有給定的字段,返回1。如果不含有或key不存在,返回0。

例如:

test:0>hset myhash field2 "foo"
1

test:0>hexists myhash field2
1

test:0>hexists myhash field1
0

3)hget key_name field_name:用於返回哈希表中指定字段的值。
返回值:返回給定子段的值。如果給定的字段或key不存在時,返回null

4)hkeys key_name:獲取所有哈希表中的字段
返回值:包含哈希表中所有域列表。當key不存在時,返回一個空表。
例如:

test:0>hkeys myhash
1) field2
test:0>hkeys myhashs

5)hlen key_name:用於獲取哈希表中字段的數量
返回值:哈希表中字段的數量。當key不存在時,返回0。

6)hvals key_name:返回哈希表所有域的值
返回值:包含哈希表中所有域列表。當key不存在時,返回一個空表。

例如:

test:0>hset myhash field2 "foo"
1
test:0>hset myhash field1 "f001"
1
test:0>hvals myhash
1) foo
2) f001

三、List(列表)

Redis列表是簡單的字符串列表,按照插入的順序,你可以添加一個元素到列表中的頭部(左邊)或者尾部(右邊)。列表最多可存儲2的23次冪-1個元素(4294967295,每個列表最多可存儲40多億)。
一些常用的操作命令如下:

1)lindex key_name index_position:用於通過索引獲取列表中的元素。也可以使用負數下標,以-1表示列表的最後一個元素,-2表示列表的倒數第二個元素,以此類推。
返回值:列表中下標爲指定索引值的元素。如果指定索引值不再在列表的區間範圍內,返回null。

例如:

test:0>lpush mylist "world"           
1

test:0>lpush mylist "hello"
2

test:0>lindex mylist 0
hello

test:0>lindex mylist -1
world

test:0>lindex mylist -2
hello

test:0>lindex mylist 3
NULL

2)linsert key_name before existing_value new _value:在列表的元素前或者後插入元素,當指定元素不存在列表中時,不執行任何操作。當列表不存在時,被視爲空列表,不執行任何操作。如果key不是列表類型,返回一個錯誤。
返回值:如果命令執行成功,返回插入操作完成之後列表的長度。如果沒有找到指定元素,返回-1。如果key不存在或爲空列表,返回0。
例如:

test:0>linsert mylist before "world" "three"     插入元素
3

test:0>lrange mylist 0 -1                                輸出元素
1) hello
2) three
3) world
test:0>linsert mylist before "aa""bb"            指定元素不存在
-1

test:0>linsert mylis before "aa""bb"                 key值不存在
0

test:0>set name "aa"
OK

test:0>linsert name before "aa""bb"                key值不是列表類型 
WRONGTYPE Operation against a key holding the wrong kind of value

3)llen key_name:用於返回列表的長度。如果列表key不存在,則key會被解釋爲一個空列表,返回0。如果key不是列表類型,返回一個錯誤。
返回值:列表的長度
例如:

test:0>llen mylist
3

4)lpop key:移出並獲取列表的第一個元素
返回值列表的第一個元素,當列表key不存在時,返回null
例如:

test:0>lpop list1
NULL

test:0>lpop mylist
hello

5)rpop key:移出並獲取列表的最後一個元素
返回值列表的最後一個元素,當列表key不存在時,返回null

6)lrange key_name start end:返回列表中指定區間內的元素,區間以偏移量start和end指定。其中0表示列表的一個元素,1表示列表中的第二個元素,也可以使用負數下標,-1表示列表的最後一個元素,-2表示列表的倒數第二個元素。
返回值:一個列表,包含指定區間內的元素

四 、Redis集合(set)

Redis的Set是String類型的無序集合。
集合是通過哈希表實現的,所以添加、刪除、查找的複雜度都是O(1)。

1)sadd key_name value1..valuen:將一個或多個成員元素加入到集合中,已經存在於集合的成員元素將被忽略。假如key不存在,則創建一個只包含添加元素作成員的集合。當key不是集合類型時,返回一個錯誤。
返回值:被添加到集合中的新元素的數量,不包括被忽略的元素。
例如:

test:0>sadd myset "hello" "foo"
2

test:0>sadd myset "hello"
0

test:0>smembers myset
1) foo

2)scard key_name:返回集合中元素的數量
返回值:集合的數量。當集合key不存在時,返回0。
例如:

test:0>scard myset
2

3)smembers key_name:返回集合中所有成員。不存在的集合key視爲空集合。
返回值:集合中所有成員。
例如:

test:0>smembers myset
1) foo
2) hello

五、zset (sorted set有序集合)

Redis zset和set一樣也是string類型元素的集合,且不允許重複的成員,不同的是每個元素都會關聯一個double類型的分數。redis正是通過分數來爲集合中的成員進行從小到大的排序。
zset的成員是唯一的。但是分數(score)卻可以重複。
一些常用的操作命令如下:

1)zadd key_name key_name score1 value1….valuen:
將一個或多個成員元素及其分數值加入到有序集合中,如果某個成員已經是有序集合的成員,那麼更新這個成員的分數值並通過重新插入這個成員元素來保證該成員在正確的位置上。分數值可以是整數值或雙精度浮點數。
如果有序集合key不存在,則創建一個空的有序集並執行zadd操作。
當key存在但不是有序集類型時,返回一個錯誤。
返回值:被成功添加的新成員的數量,不包括那些被更新的,已經存在成員。
例如:

test:0>zadd mysets 1 "one"
1

test:0>zadd mysets 2 "two"
1

test:0>zadd mysets 3 "two" 3 "three"
1

test:0>zrange mysets 0 -1 withscores
1) one
2) 1
3) three
4) 3
5) two

2)zcard key_name :用於計算集合中元素的數量
返回值:當key存在且是有序集類型時,返回有序集合的基數。當key不存在時,返回0
例如:

test:0>zcard mysets
3

以上就是對redis的基本數據類型的介紹。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章