首页 资讯内容详情

分布式缓存 - Redis基础入门(五)

2024-03-05 44 yuneu

Redis 五大数据类型(相关命令):https://redis.io/commands/

这里说的数据类型是value的数据类型,key的类型都是字符串。

5种数据类型:

  • redis字符串(String)
  • redis列表(List)
  • redis集合(Set)
  • redis哈希表(Hash)
  • redis有序集合(Zset)

Redis哈希(Hash)

分布式缓存 - Redis基础入门(五),分布式缓存 - Redis基础入门(五),第1张

1、简介

Redis hash是一个键值对集合,是一个string类型的field和value的映射表,hash特别适合用于存储对象。类似于java里面的Map<String,Object>。

2、常用命令

2.1、hset:设置多个field的值

hset key field value [field value ...]

将哈希表 key 中的域 field 的值设为 value 。

如果 key 不存在,一个新的哈希表被创建并进行 hset 操作。

如果域 field 已经存在于哈希表中,旧值将被覆盖。

返回值:

如果 field 是哈希表中的一个新建域,并且值设置成功,返回 1 。

如果哈希表中域 field 已经存在且旧值已被新值覆盖,返回 0 。

示例:

127.0.0.1:6379> flushdb #清空db,方便测试OK127.0.0.1:6379> hset user name ready age 30 #哈希表user中设置2个域:name和age,name的值为ready,age的值为30(integer) 2

2.2、hget:获取指定filed的值

hget key field

示例:

127.0.0.1:6379> flushdb #清空db,方便测试OK127.0.0.1:6379> hset user name ready age 30 #哈希表user中设置2个域:name和age,name的值为ready,age的值为30(integer) 2127.0.0.1:6379> hget user name #获取user中的name"ready"

2.3、hgetall:返回hash表所有的域和值

hgetall key

示例:

127.0.0.1:6379> flushdb #清空db,方便测试OK127.0.0.1:6379> hset user name ready age 30 #哈希表user中设置2个域:name和age,name的值为ready,age的值为30(integer) 2127.0.0.1:6379> hgetall user #获取user所有信息1) "name"2) "ready"3) "age"4) "30"

2.4、hmset:和hset类似(从4.0版本之后欧,此命令已弃用)

hmset key field value [field value ...]

2.5、hexists:判断给定的field是否存在,1:存在,0:不存在

hexists key field

查看哈希表 key 中,给定域 field 是否存在。

返回值:

如果哈希表含有给定域,返回 1 。

如果哈希表不含有给定域,或 key 不存在,返回 0 。

示例:

127.0.0.1:6379> flushdb #清空db,方便测试OK127.0.0.1:6379> hset user name ready age 30 #哈希表user中设置2个域:name和age,name的值为ready,age的值为30(integer) 2127.0.0.1:6379> hexists user name #user中存在name域(integer) 1127.0.0.1:6379> hexists user address #user中不存在address域,返回0(integer) 0127.0.0.1:6379> hexists user1 address #user1这个key不存在,返回0(integer) 0

2.6、hkeys:列出所有的filed

hkeys key

示例:

127.0.0.1:6379> flushdb #清空db,方便测试OK127.0.0.1:6379> hset user name ready age 30 #哈希表user中设置2个域:name和age,name的值为ready,age的值为30(integer) 2127.0.0.1:6379> hkeys user #获取user中的所有filed1) "name"2) "age"

2.7、hvals:列出所有的value

hvals key

示例:

127.0.0.1:6379> flushdb #清空db,方便测试OK127.0.0.1:6379> hset user name ready age 30 #哈希表user中设置2个域:name和age,name的值为ready,age的值为30(integer) 2127.0.0.1:6379> hvals user #获取user中的所有filed的值列表1) "ready"2) "30"

2.8、hlen:返回filed的数量

hlen key

返回哈希表 key 中域的数量。

返回值:

哈希表中域的数量。

当 key 不存在时,返回 0 。

示例:

127.0.0.1:6379> flushdb #清空db,方便测试OK127.0.0.1:6379> hset user name ready age 30 #哈希表user中设置2个域:name和age,name的值为ready,age的值为30(integer) 2127.0.0.1:6379> hlen user(integer) 2

2.9、hincrby:filed的值加上指定的增量

hincrby key field increment

为哈希表 key 中的域 field 的值加上增量 increment 。

增量也可以为负数,相当于对给定域进行减法操作。

如果 key 不存在,一个新的哈希表被创建并执行 HINCRBY 命令。

如果域 field 不存在,那么在执行命令前,域的值被初始化为 0 。

对一个储存字符串值的域 field 执行 HINCRBY 命令将造成一个错误。

返回值:

执行 hincrby 命令之后,哈希表 key 中域 field 的值。

示例:

127.0.0.1:6379> flushdb #清空db,方便测试OK127.0.0.1:6379> hset siteInfo site itsoku.com pv 1000 #hash表siteInfo中有2个域:{site:"itsoku.com",pv:1000}(integer) 2127.0.0.1:6379> hget siteInfo pv #获取siteInfo中pv的值"1000"127.0.0.1:6379> hincrby siteInfo pv 10 #siteInfo中的pv值增加10(integer) 1010127.0.0.1:6379> hget siteInfo pv #获取siteInfo中的pv"1010"127.0.0.1:6379> hincrby siteInfo uv 500 #siteInfo中的uv值增加500,uv这个域不存在,则会先添加,然后再执行hincrby(integer) 500

2.10、hsetnx:当filed不存在的时候,设置filed的值

hsetnx key field value

将哈希表 key 中的域 field 的值设置为 value ,当且仅当域 field 不存在。

若域 field 已经存在,该操作无效。

如果 key 不存在,一个新哈希表被创建并执行 hsetnx 命令。

返回值:

设置成功,返回 1 。

如果给定域已经存在且没有操作被执行,返回 0 。

示例:

127.0.0.1:6379> flushdb #清空db,方便测试OK127.0.0.1:6379> hset user name ready age 30 #创建user,包含2个域:name、age(integer) 2127.0.0.1:6379> hsetnx user name tom #name已存在,设置失败,返回0(integer) 0127.0.0.1:6379> hget user name #name依旧是ready"ready"127.0.0.1:6379> hsetnx user address shanghai #address不存在,设置成功(integer) 1127.0.0.1:6379> hget user address #输出address的值"shanghai"

3、数据结构

Hash类型对应的数据结构是两种:ziplist(压缩列表),hashtable(哈希表)

当field-value长度较短个数较少时,使用ziplist,否则使用hashtable。

4、命名分类

Hash常用操作:

  • HSET key field value //存储一个哈希表key的键值
  • HSETNX key field value //存储一个不存在的哈希表key的键值
  • HMSET key field value [field value ...] //在一个哈希表key中存储多个键值对
  • HGET key field //获取哈希表key对应的field键值
  • HMGET key field [field ...] //批量获取哈希表key中多个field键值
  • HDEL key field [field ...] //删除哈希表key中的field键值
  • HLEN key //返回哈希表key中field的数量
  • HGETALL key //返回哈希表key中所有的键值
  • HINCRBY key field increment //为哈希表key中field键的值加上增量increment

5、应用场景

电商购物车

  • 1)以用户id为key
  • 2)商品id为field
  • 3)商品数量为value

购物车操作:

分布式缓存 - Redis基础入门(五),分布式缓存 - Redis基础入门(五),第2张

  • 1)添加商品→hset cart:1001 10088 1
  • 2)增加数量→hincrby cart:1001 10088 1
  • 3)商品总数>hlen cart:1001
  • 4)删除商品→hdel cart:1001 10088
  • 5)获取购物车所有商品→hgetall cart:1001
  • 评论列表 (0条)

 暂无评论,快来抢沙发吧~

发布评论