版权声明: 转载请注明出处!本文采用 知识共享 署名-非商业性使用-禁止演绎 4.0 国际许可协议
前言
到目前为止学习的散列表的命令都是直接设置和读取对应数据的,今天学习的这个两个命令是用于数值计算的,在散列表中没有和 INCR 、 DECR 对应的命令,也就是说散列表中的字段不能直接自增或自减,只能添加参数来确定增加和减少的数值。
这篇笔记中的2个命令分别是 HINCRBY 、 HINCRBYFLAOT ,可以参考:
- 《Redis每日一练(06):INCR、DECR、INCRBY、DECRBY、INCYBYFLOAT命令》 中的 INCRBY 和 INCRBYFLOAT 命令
HINCRBY
- 最早出现版本:2.0.0
- 时间复杂度:O(1)
- 命令参数: HINCRBY key field increment
- 操作类型:hashes
- 官方文档
作用
为散列表中的整数字段值增加或减少一个整数数值,原字段和命令参数都必须是整数,否则会报错,如果指定的字段不存在会先初始化成0,然后再进行增减操作,返回操作后得到的数值。
练习
给一个不存在的字段增加数值20,查看结果后,将该值减小1再查看结果:
127.0.0.1:6379> HGET users:3 age (nil) 127.0.0.1:6379> HINCRBY users:3 age 20 (integer) 20 127.0.0.1:6379> HGET users:3 age "20" 127.0.0.1:6379> HINCRBY users:3 age -1 (integer) 19 127.0.0.1:6379> HGET users:3 age "19" 127.0.0.1:6379>
复制
接着再试下参数或着字段数值不是整数的情况:
127.0.0.1:6379> HGET users:3 age "19" 127.0.0.1:6379> HINCRBY users:3 age 1.2 (error) ERR value is not an integer or out of range 127.0.0.1:6379> HSET users:3 weight 58.0 (integer) 1 127.0.0.1:6379> HINCRBY users:3 weight 1 (error) ERR hash value is not an integer 127.0.0.1:6379>
复制
当参数不是整数的情况报错 ERR value is not an integer or out of range
,当字段不是整数的时候报错 ERR hash value is not an integer
。
HINCRBYFLOAT
- 最早出现版本:2.6.0
- 时间复杂度:O(1)
- 命令参数:HINCRBYFLOAT key field increment
- 操作类型:hashes
- 官方文档
作用
鉴于 HINCRBY 命令原数据和参数都必须是整数的限制, HINCRBYFLOAT 命令进行了突破,无论整数浮点数都可以进行运算,当指定的字段不存在时会先初始化成0,然后再进行计算。
练习
对散列表一个原本不存在的字段分别增加整数和浮点数,减少整数和浮点数:
127.0.0.1:6379> HGET users:104 weight (nil) 127.0.0.1:6379> HINCRBYFLOAT users:104 weight 57 "57" 127.0.0.1:6379> HINCRBYFLOAT users:104 weight 1 "58" 127.0.0.1:6379> HINCRBYFLOAT users:104 weight 1.3 "59.299999999999997" 127.0.0.1:6379> HINCRBYFLOAT users:104 weight -2 "57.299999999999997" 127.0.0.1:6379> HINCRBYFLOAT users:104 weight -0.1 "57.199999999999996" 127.0.0.1:6379>
复制
无论参数是整数还是浮点数都可以正常运算,只不过计算浮点数的时候出现了误差。
再试一下原字段类型不是数字的情况:
127.0.0.1:6379> HSET users:101 name albert (integer) 1 127.0.0.1:6379> HINCRBYFLOAT users:101 name 1 (error) ERR hash value is not a valid float 127.0.0.1:6379>
复制
当操作一个散列表不是数字的字段的时候,会给出该字段不是浮点数的报错,ERR hash value is not a valid float
;
总结
- HINCRBY 命令可以在原字段为整数的情况下增加或者减少一个整数。
- HINCRBYFLAOT 命令在原字段是数字的情况下增加或减少一个数字,可以是整数也可以是浮点数。
2019-12-7 16:28:48
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
国产非关系型数据库 Eloqkv 初体验
JiekeXu
126次阅读
2025-04-10 23:51:35
融合Redis缓存的PostgreSQL高可用架构
梧桐
84次阅读
2025-04-08 06:35:40
Redis概要
听溪
38次阅读
2025-04-11 10:23:10
安装与配置Redis
鲁鲁
32次阅读
2025-04-11 10:26:10
Redis数据库——Cluster集群模式
编程Cookbook
27次阅读
2025-04-16 15:34:44
使用Jedis访问Redis数据库
怀念和想念
27次阅读
2025-04-11 15:08:30
Redis geo 实战:“附近的人”实现,打造社交的新维度
老王两点中
25次阅读
2025-04-11 09:02:30
Redis改协议内幕曝光!核心开发者亲述被“踢出局”,外部贡献者几乎全跑光了!
老鱼笔记
24次阅读
2025-04-17 10:41:56
Redis提供的持久化机制
luyingjun
22次阅读
2025-04-11 15:11:05
Redis
鲁鲁
21次阅读
2025-04-07 20:14:35