一.概念
在Redis中,也提供了和其他语言一样键值对结构的hash类型,Redis的hash类型的键值本身又是一个键值对结构.
如:
key | value | |
user:1 | key | value |
code | 01 | |
name | shl | |
user:2 | key | value |
code | 02 | |
name | zyc |
二.命令
2.1 设置值
命令:hset key field value
例如: hset user:1 name shl
返回:0
2.2 批量设置值
命令:hmset key field1 value1 field2 value2 …
例如:
hmset user:1 name shl age 32
返回 ok
2.3 获取值
命令:hget key field
例如:hset user:1 name shl
hget user:1 name
返回shl
2.4 批量获取值
命令:hmget key field1 field2
例如:hmset user:1 name shl age 32
hmget user:1 name age
返回: shl
32
2.5 删除field
命令:hdel key field
例如:hset user:2 name zyc
hdel user:2 name
返回: 1 表示删除成功
2.6 计算field的个数
命令:hlen key
例如:hmset user:3 name shl age 32 city tianjin
hlen user:3
返回:3
2.7 判断field是否存在
命令:hexists key field,包含返回1,不包含返回0.
例如hset user:2 name zyc
hexistsuser:2 name
返回:1
2.8 获取指定key的所有field
命令:hkeys key 获取指定key的所有field
例如:hmset user:4 name shl age 32
hkeys user:4
返回:name
age
2.9 获取指定key的所有value
命令:hvals key
例如:hmset user:4 name shl age 32
hvals user:4
返回:shl
32
2.10 获取指定key的所有field-value
命令:hgetall key
例如:hmset user:4 name shl age 32
hgetall user:4
返回:name
shl
age
32
2.11 指定field的value的计数。
命令:
(1)hincrby key field
例如:hset user:1 age 32
hincrby user:1 age 10
返回:42
(2)hincrbyfloat key field
例如:hset user:1 age 32
hincrbyfloat user:1 age -8.1
返回:23.9
2.12 计算指定field的value的内容的字符串长度
命令:hstrlen key field
例如:hset user:1 name shl
hstrlen user:1 name
返回:3
三. hash类型命令的时间复杂度
四.内部编码
hash类型的内部编码有两种:
(1) ziplist(压缩列表)
当哈希类型的元素个数小于hash-max-ziplist-entries配置(默认512个),同时所有值都小于hash-maxziplist-value配置(默认为64字节),Redis会使用ziplist做为哈希的内部实现。Ziplist可以使用更加紧凑的结构来实现多个元素的连续存储,所以在节省内存方面更加优秀。
(2) hashtable(哈希表)
当哈希类型无法满足ziplist要求时,redis会采用hashtable做为哈希的内部实现,因为此时ziplist的读写效率会下降
知识小贴士:作者尽心运营的知识星球社群【请点击:简道源码&&架构分析 加入】(可添加运营同学WX:wx454876882)持续拉新中...,定期的jdk与核心框架源码解析,主流行业解决方案与架构设计资料查阅与下载尽在其中。帮助行业新人和有志于技术的专业人士体系化的学习源码与系统架构,获取业界知名技术峰会和厂商对外公布的主流业务场景的解决方案。同时这个星球也是一个社群,大家可以在社群中结识有识之士,共同探讨,答疑解惑。希望可以通过这个星球帮助大家每日进步一点点,一年持续365天,共勉
本星球 聚焦于Java源码分析,架构解析。低代码,可扩展和高可用架构设计。帮助你更好地学编程,欢迎想进步的同学!仅精品案例的资料整理即物超所值。让我们大家一起每日进步一点点~~,你可以:
1. 阅读星球专属的编程知识和优质文章
2.JAVA知识从点和面,深度挖掘。通过点,形成面。提升自身的技术广度和深度。
3. 加入星球专属交流群,帮你找到学习伙伴、获取每日优质文章推送等
4.业界优秀案例资料学习及下载
5. 和伙伴们一起学习打卡,增加动力,共同进步
6.工作、学习和方法论。如何提升软实力,比如写文章、画架构图、技术产品的营销、社区的运营等等。
7.招聘、面试和晋升。如何提前准备面试,有什么套路?如何提升硬实力,少走弯路?
8.提供简历优化服务哟。本人常年招聘,也就面试了1000+程序员和架构师~~
9.解答你的疑问。
10.每日进步一点点(最重要的一点): 让自己与众不同,每天学习1-2小时源码和架构知识,365天后再回首,1年前的自己可能是个SB吧。用通勤的时间让自己成长,让优秀变成一种习惯。