Redis-02.雜湊與列表基本型別
阿新 • • 發佈:2021-11-08
Redis-02.雜湊與列表基本型別
一、雜湊型別
在Redis中,雜湊型別是指鍵值本身又是一個鍵值對結構,形如value={{field1,value1},...{fieldN,valueN}}。
1、命令
在下面的命理中,user:1只是一個字串而已,一個鍵。
#設定值 hset key field value #為user:1新增一對field-value hset user:1 name tom #獲取值 hget key field #獲取user:1的name域(屬性)對應的值 hget user:1 name #刪除field hdel key field [field ...] #hdel會刪除一個或者多個field,返回結果為常規刪除field的個數 hdel user:1 name #計算field個數 hlen key #批量設定或者獲取fielld-value hmget key field [field ...] hmset key field value [field value ...] #例如: hmset user:1 name mike age 12 city tianjin hmget user:1 name city #判斷field是否存在 hexists key field #例如,user:1包含name域,所以返回結果1,不包含時返回0: hexists user:1 name #獲取所有的field,它返回制定哈西鍵所有的field hkeys key #例如: hkeys user:1 #獲取所有value hvals key #下面操作獲取user:1全部value hvals user:1 #獲取所有的field-value hgetall key #下面操作獲取user:1所有的field-value #hincrby hincrbyfloat hincrby key field hincrbyfloat key field #hincrby和hincrbyfloat,就先incrby和incrbyfloat命令一樣,但是它們的作用域是field #計算value的字串長度 hstrlen key field #例如hget user:1 name的value時tom。那麼hstrlen的返回結果是3 hstrlen user:1 name
2、內部編碼
演示
- 另外:當field個數超過512個,內部編碼也會由ziplist變為hashtable
3、使用場景
①關係型資料庫表的對映
②做快取
二、列表型別
1、列表的特點
列表型別(list)是用來儲存多個有序的字串。列表中的每個字串稱為元素(element),一個列表最多可以儲存2^32-1個元素。在Redis中,可以對列表兩端插入(push)和彈出(pop),還可以獲取指定範圍的元素列表、獲取指定索引下標的元素等。因此,它可以充當棧和佇列的角色。
- 列表重元素有序
- 可以通過索引下標獲取某個元素或者某個範圍內的元素列表
2、命令
- 列表的操作型別
新增
#從右邊插入元素
rpush key value [value ...]
#從右向左插入元素c、b、a
rpush listkey c b a
#lrang0-l命令可以從左到右獲取列表的所有元素
lrange listkey 0 -1
#從左邊插入元素
lpush key value [value...]
#向某個元素前或者後插入元素
linsert key before|after pivot value
#linsert會從列表中找到等於pivot的元素,在其前或者後插入一個新的元素
linsert list key before b java
查詢
#獲取指定範圍內的元素列表 lrange key start end #第一,索引下標從左到右分別是0到N-1,但是從右到左分別是-1到-N。 #第二,lrange中的end選項包含了自身,這個和很多程式語言不包含end不太相同,例如想獲取列表的第2到第4個元素,可以執行如下操作: lrange listkey 1 3 #獲取列表指定索引下標的元素 lindex key index #獲取當前列表最後一個元素 lindex listkey -1 #獲取列表長度 llen key
刪除
#從列表左側彈出元素
lpop key
#從列表右側彈出
rpop key
#刪除指定元素
lrem key count value
#lrem命令會從列表中找到等於value的元素進行刪除,根據count的不同
#分為三種情況:
#·count>0,從左到右,刪除最多count個元素。
#·count<0,從右到左,刪除最多count絕對值個元素。
#·count=0,刪除所有。
#按照索引範圍修剪列表
ltrim key start end
#下面的操作只會保留列表listkey第2到4個元素
ltrim listkey 1 3
修改
#修改指定索引下標的元素
lset key index newValue
#將列表listkey中的第3個元素設定為python:
lset listkey 2 python
阻塞操作
#阻塞式彈出:
blpop key [key ...] timeout
brpop key [key ...] timeout
#blpop和brpop是lpop和rpop的阻塞版本,它們除了彈出方向不同,使用
#方法基本相同,所以下面以brpop命令進行說明,brpop命令包含兩個引數:
·key[key...]:多個列表的鍵。
·timeout:阻塞時間(單位:秒)。
- 第二點,如果多個客戶端對同一個鍵執行brpop,那麼最先執行brpop命 令的客戶端可以獲取到彈出的值。然後其他執行brpop的客戶端會繼續阻塞。
3、內部編碼
4、使用場景
①訊息佇列
- Redis的lpush+brpop命令組合即可實現阻塞佇列,生產者客戶端使用
lrpush
從列表左側插入元素,多個消費者客戶端使用brpop
命令 阻塞式的“搶”列表尾部的元素,多個客戶端保證了消費的負載均衡和高可用 性。