1. 程式人生 > 其它 >Redis-02.雜湊與列表基本型別

Redis-02.雜湊與列表基本型別

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命令 阻塞式的“搶”列表尾部的元素,多個客戶端保證了消費的負載均衡和高可用 性。

②其他場景