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命令 阻塞式的“抢”列表尾部的元素,多个客户端保证了消费的负载均衡和高可用 性。
②其他场景


浙公网安备 33010602011771号