【学习Redis】- 散列(哈希)类型和常用命令

散列类型

Redis采用字典结构以键值对的形式存储数据的,而散列类型(hash)的键值也是一种字典结构,其存储了字段(field)和字段值的映射,但字段值只能是字符串,不支持其他数据类型,即散列类型不能嵌套其他的数据类型。一个散列类型键可以包含至多2的32次方减一个字段。

注:除了散列类型,Redis 的其他数据类型同样不支持数据类型嵌套。

散列类型适合存储对象。存储结构如下:


而在关系数据库中如果要存储汽车对象,存储结构如下:


数据是以二维表的形式存储的,这要求所有的记录都拥有同样的属性,无法单独为某条记录增减属性。

而当使用ORM(对象关系映射)将关系数据库中的对象实体映射成程序中的实体时,修改表结构往往意味着要中断服务(重启网站程序)。为了防止这些问题,在关系数据库中存储这种半结构化数据还需要额外的表才行。

而Redis的散列结构类型则不存在这个问题。虽然在图3-5中描述了汽车的存储结构,但是这个结构只是人为的约定,Redis并不要求每个键都依据此存储结构,我们完全可以自由地为任何键增减字段而不影响其他键。

命令

赋值与取值

HSET key field value

HGET key field

HMSET key field value [field value ....]

HMGET key field [field]

HGETALL key

127.0.0.1:6379> HSET car price 500
(integer) 1
127.0.0.1:6379> HSET car name BMW
(integer) 1
127.0.0.1:6379> HGET car name
"BMW"

HSET命令的不区分插入和更新操作,当执行的是插入操作时HSET命令返回1,更新则返回0。当键不存在时,则自动建立它。

注:在Redis中每个键都属于一个明确的数据类型。使用一种数据类型的命令操作另一种数据类型的键会提示错误,当然也不是所有命令都是如此,如SET命令可以覆盖已经存在的键而不论原来键是什么类型。

127.0.0.1:6379> HMSET car1 price 200 name "sss"
OK
127.0.0.1:6379> HMGET car1 price name
1) "200"
2) "sss"

HMSET 和 HMGET命令可同时设置,获取多个字段的值。

127.0.0.1:6379> HGETALL car
1) "price"
2) "500"
3) "name"
4) "BMW"
HGETALL命令获取键中所有字段和字段值。

判断字段是否存在

HEXISTS key field

HEXISTS 命令用来判断一个字段是否存在。存在返回1,否则返回0。

127.0.0.1:6379> HEXISTS car model
(integer) 0
127.0.0.1:6379> HEXISTS car name
(integer) 1

下面命令就不一一举例了,当然操作散列的命令也不止这些。

当字段不存在时赋值

HSETNX key field value

增加数字

HINCRBY key field increment

删除字段

HDEL key field [field ...]

HDEL命令可以删除一个或多个字段,返回值是被删除的字段个数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值