Redis中Hash类型是键值对的形式保存数据,其中键被称为字段(field),值称为字段值(value)。在一个key中,字段不能重复,而值可以重复。无论是字段还是值都是无序的(保存的次序和添加的次序不同)
默认情况下hash使用listpack存储,当保存的字段-值的数量大于512个或者当个字段的值大于64个字节时,改为hashtable。
一、使用场景
1、购物车
可以使用redis的hash实现购物车,字段为商品的信息,值为数量
2、权限列表
保存用户的权限,字段为权限的标识 ,值为状态
3、缓存进度
比如小说的阅读进度,字段为小说编号,值为位置。还比如视频的播放进度,字段为视频编号 ,值为已播放的位置。
二、添加和修改
1、hset
向Hash中添加一到多个字段和值,返回添加成功的数量,如果其中某个字段名已存在,会忽略此字段的添加
语法
hset key field value [field value ...]
示例
//添加两个商品类型,添加成功,返回2
hset product_type 1 家电 2 鞋帽//字段1已存在,只会添加3,返回1
hset prouct_type 1 果蔬 3 成衣
2、hmset
向hash中添加一到多个字段和值,与hset不同的是,当字段已存在,它会替换原来的值,如果成功,返回“OK”
语法
hmset key field value [field value ...]
示例
//添加两个商品类型,2会把之前的鞋帽替换,返回OK
hmset product_type 2 '手机' 6 '数码'
3、hsetnx
仅当字段不存在时,才会添加此字段和值,成功返回1,失败返回0
语法
hsetnx key field value
示例
//添加一个新的字段
hsetnx product_type 7 '保健'
三、删除
1、hdel
删除一个或多个字段,返回实际删除的字段数量
语法
hdel key field [field ...] [exists match field]
其中
exists match为判断条件,如果指定字段存在,则删除此字段,否则不删除
示例
//删除1和9两个字段
hdel product_type 1 9//如果3存在,则删除
hdel product_type exists match 3
四、查看
1、hexists
用于判断指定的字段是否存在,如果存在返回1,不存在返回0
语法
hexists key field
示例
//判断字段2是否存在
hexists product_type 2
2、hlen
用于查看字段的数量
语法
hlen key
示例
hlen product_type
3、hgetall
查看所有的字段和值,返回的结果的格式为
字段名
字段值
字段名
字段值
........
语法
hgetall key
示例
hgetall product_type
4、hkeys
查看所有字段的名称,返回字段名列表
语法
hkeys key
示例
hkeys product_type
5、hvals
查看所有的值,返回字段值列表
语法
hvals key
示例
hvals product_type
6、hget
查看指定字段的值,如果字段不存在,返回null
语法
hget key field
示例
hget product_type 2
7、hmget
查看一到多个字段的值,如果字段不存在,对应的值返回为null
语法
hmget key field [field ...]
示例
hmget product_type 1 2 3
8、hscan
以游标的方式查看所有或符合条件的字段和值
语法
hscan key cursor [MATCH pattern] [COUNT count]
其中
cursor:为游标名,一般为0,即游标开始的位置
match:筛选条件,pattern为条件,可以使用“*”做为通配符来进行模糊匹配
count:从指定的游标开始,在此指定字段数中查询,默认值为10,在默认情况(存储结构不是hashtable)下此值无效,只有当hash中字段数大于512或者某个字段的值的长度大于64个字节的时候才有效(ziplist存储结构会转换成hashtable)。
但要注意的是实际查询的数量会等于或大于count,特别是指定了match时。
示例
//查看所有字段和值
hscan product_type 0//查看所有字段
hscan product_type 0 match '*'//查看字段名中包含1的字段
hscan product_type 0 match '*1*'//返回前2个字段
hscan product_type 0 count 2
9、hincrby
为字段添加指定的整数增量,如果此字段的值不是数值,会提示错误“ERR hash value is not an integer”,如果成功返回增加增量后的值
语法
hincrby key field increment
示例
//添加一个整数值的字段
hset product_type 11 '11'//字段值加3
hincrby product_type 11 3
10、hincrbyfloat
为字段添加指定的浮点数增量,如果此字段的值不是数值,会提示错误“ERR hash value is not an integer”,如果成功返回增加增量后的值
语法
hincrbyfloat key field increment
示例
//添加一个整数值的字段
hset product_type 10 '10'//字段值加2.5
hincrbyfloat product_type 10 2.5
11、hstrlen
查询值的字节数
语法
HSTRLEN key field
示例
hstrlen product_type 10
文章来源于哔站《Redis中Hash类的操作》
更多学习视频和专栏文章请到哔站个人空间: 布道师学院的个人空间-布道师学院个人主页-哔哩哔哩视频
更多资源和项目下载请到:”开源吧(找实战项目和毕设项目的好网站)“ :开源吧