redis(二):redis的五種數據類型及常見命令

Redis支持五種數據類型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。

注:在redis中的命令語句中,命令是忽略大小寫的,而key是不忽略大小寫的。

1、String類型

1.1基本介紹

string 類型是二進制安全的,即redis 的 string 可以包含任何數據,比如jpg圖片或者序列化的對象。而且鍵的值有最大值限制,一個鍵最大能存儲512MB。

1.2 常見命令

賦值:set key value
取值:get key

127.0.0.1:6379> set test zhangsan
OK
127.0.0.1:6379> get test
"zhangsan"

2、Hash類型

2.1 基本介紹

Hash類型也叫散列類型,它提供了字段和字段值的映射。hash 特別適合用於存儲對象,字段值只能是字符串類型,不支持散列類型、集合類型等其它類型。每個 hash 可以存儲 232 -1 鍵值對(40多億)。
結構如下圖:
在這裏插入圖片描述

2.2 常見命令

賦值:
HSET命令不區分插入和更新操作,當執行插入操作時HSET命令返回1,當執行更新操作時返回0。

  • 一次只能設置一個字段值
    語法:HSET key field value
127.0.0.1:6379> hset user username zhangsan 
(integer) 1
  • 一次可以設置多個字段值
    語法:HMSET key field value [field value …]
127.0.0.1:6379> hmset user age 20 username lisi 
OK
  • 當字段不存在時賦值,類似HSET,區別在於如果字段存在,該命令不執行任何操作
    語法:HSETNX key field value
127.0.0.1:6379> hsetnx user age 30	如果user中沒有age字段則設置age值爲30,否則不做任何操作
(integer) 0

取值:

  • 一次只能獲取一個字段值
    語法:HGET key field
127.0.0.1:6379> hget user username
"zhangsan“
  • 一次可以獲取多個字段值
    語法:HMGET key field [field …]
127.0.0.1:6379> hmget user age username
1) "20"
2) "lisi"
  • 獲取所有字段值
    語法:HGETALL key
127.0.0.1:6379> hgetall user
1) "age"
2) "20"
3) "username"
4) "lisi"

3、List類型

3.1 基本介紹

Redis的列表類型(list)是簡單的字符串列表,可以存儲一個有序的字符串列表。按照插入順序排序。你可以添加一個元素到列表的頭部(左邊)或者尾部(右邊)。列表最多可存儲 232 - 1 元素 (4294967295, 每個列表可存儲40多億)。

列表類型內部是使用雙向鏈表(double linked list)實現的,所以向列表兩端添加元素的時間複雜度爲0(1),獲取越接近兩端的元素速度就越快。這意味着即使是一個有幾千萬個元素的列表,獲取頭部或尾部的10條記錄也是極快的。

3.2 常見命令

向列表兩端增加元素:

  • 向列表左邊增加元素
    語法:LPUSH key value [value …]
127.0.0.1:6379> lpush list:1 1 2 3
(integer) 3
  • 向列表右邊增加元素
    語法:RPUSH key value [value …]
127.0.0.1:6379> rpush list:1 4 5 6
(integer) 3

查看列表:

  • 語法:LRANGE key start stop

LRANGE命令是列表類型最常用的命令之一,獲取列表中的某一片段,將返回start、stop之間的所有元素(包含兩端的元素),索引從0開始。索引可以是負數,如:“-1”代表最後邊的一個元素。

4、Set類型

4.1 基本介紹

Redis的Set是string類型的無序集合,其中的數據是不重複且沒有順序。集合中最大的成員數爲 232 - 1(4294967295, 每個集合可存儲40多億個成員)。

集合類型和列表類型的對比:
在這裏插入圖片描述
集合類型的常用操作是向集合中加入或刪除元素、判斷某個元素是否存在等,由於集合類型的Redis內部是使用值爲空的散列表實現,所有這些操作的時間複雜度都爲0(1)。

Redis還提供了多個集合之間的交集、並集、差集的運算。

4.2 常見命令

增加/刪除元素:

  • 語法:SADD key member [member …]
127.0.0.1:6379> sadd set a b c
(integer) 3
127.0.0.1:6379> sadd set a
(integer) 0

由於對鍵set添加了兩次a,因爲集合的唯一性,所以第二次添加a被忽略。

  • 語法:SREM key member [member …] (移除集合中一個或多個成員)
127.0.0.1:6379> srem set c d
(integer) 1

5、Zset類型

5.1 基本介紹

Redis 有序集合和集合一樣也是string類型元素的集合,且不允許重複的成員。

在集合類型的基礎上,有序集合類型爲集合中的每個元素都關聯一個分數,這使得我們不僅可以完成插入、刪除和判斷元素是否存在在集合中,還能夠獲得分數最高或最低的前N個元素、獲取指定分數範圍內的元素等與分數有關的操作。

有序集合的成員是唯一的,但分數(score)卻可以重複。

集合是通過哈希表實現的,所以添加,刪除,查找的複雜度都是O(1)。 集合中最大的成員數爲 232 - 1 (4294967295, 每個集合可存儲40多億個成員)。

在某些方面有序集合和列表類型有些相似。

1、二者都是有序的。
2、二者都可以獲得某一範圍的元素。
但是,二者有着很大區別:
1、列表類型是通過鏈表實現的,獲取靠近兩端的數據速度極快,而當元素增多後,訪問中間數據的速度會變慢。
2、有序集合類型使用散列表實現,所有即使讀取位於中間部分的數據也很快。
3、列表中不能簡單的調整某個元素的位置,但是有序集合可以(通過更改分數實現)
4、有序集合要比列表類型更耗內存。

5.2 常見命令

增加元素:

向有序集合中加入一個元素和該元素的分數,如果該元素已經存在則會用新的分數替換原有的分數。返回值是新加入到集合中的元素個數,不包含之前已經存在的元素。

  • 語法:ZADD key score member [score member …]
127.0.0.1:6379> zadd scoreboard 80 zhangsan 89 lisi 94 wangwu 
(integer) 3
127.0.0.1:6379> zadd scoreboard 97 lisi 
(integer) 0

獲得排名在某個範圍的元素列表:

按照元素分數從小到大的順序返回索引從start到stop之間的所有元素(包含兩端的元素)

  • 語法:ZRANGE key start stop [WITHSCORES]
127.0.0.1:6379> zrange scoreboard 0 2
1) "zhangsan"
2) "wangwu"
3) "lisi“

按照元素分數從大到小的順序返回索引從start到stop之間的所有元素(包含兩端的元素)

  • 語法:ZREVRANGE key start stop [WITHSCORES]
127.0.0.1:6379> zrevrange scoreboard 0 2
1) " lisi "
2) "wangwu"
3) " zhangsan “

如果需要獲得元素的分數的可以在命令尾部加上WITHSCORES參數

127.0.0.1:6379> zrange scoreboard 0 1 WITHSCORES
1) "zhangsan"
2) "80"
3) "wangwu"
4) "94"
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章