当前位置:网站首页>Redis学习笔记—数据类型:哈希(hash)
Redis学习笔记—数据类型:哈希(hash)
2022-06-23 09:00:00 【爱锅巴】
几乎所有的编程语言都提供了哈希(hash)类型,它们的叫法可能是哈希、字典、关联数组。在Redis中,哈希类型是指键值本身又是一个键值对结构,形如value={ {field1,value1},…{fieldN,valueN}}
哈希类型中的映射关系叫作field-value,注意这里的value是指field对应的值,不是键对应的值,请注意value在不同上下文的作用。
设置值
hset key filed value
为key名为user:1设置field-value
127.0.0.1:6379> hset user:1 name Tom
(integer) 1
127.0.0.1:6379> hset user:1 age 26
(integer) 1
Redis额外提供了hsetnx命令;hset和hsetnx的关系与set和setnx的关系类似,如果没有则添加,如果有则不作操作,只不过hsetnx是对于field操作的,setnx是相对于key来做操作
获取值
hget key field
获取key为user:1,分别获取field为name和age的值
127.0.0.1:6379> hget user:1 name
"Tom"
127.0.0.1:6379> hget user:1 age
"26"
删除field
hdel key field [field ...]
删除key为user:1,field为sex的值;返回的是删除的个数
127.0.0.1:6379> hset user:1 sex male
(integer) 1
127.0.0.1:6379> hdel user:1 sex
(integer) 1
计算field个数
hlen key
获取key为user:1的field个数
127.0.0.1:6379> hlen user:1
(integer) 2
批量设置field-value
hmset key field value [field value ...]
批量设置key为user:2的field-value
127.0.0.1:6379> hmset user:2 name Jerry age 15
OK
批量获取field-value
hmget key field [field ...]
批量获取key为user:2的field为name和age的value
127.0.0.1:6379> hmget user:2 name age
1) "Jerry"
2) "15"
判断field是否存在
hexists key field
返回个数,没有就返回0
127.0.0.1:6379> hexists user:1 name
(integer) 1
127.0.0.1:6379> hexists user:1 job
(integer) 0
获取所有field
hkeys key
获取key为user:1的所有field
127.0.0.1:6379> hkeys user:1
1) "name"
2) "age"
获取所有value
hvals key
获取key为user:1的所有value
127.0.0.1:6379> hkeys user:1
1) "name"
2) "age"
获取所有的filed-value
hgetall key
获取key为user:1的所有filed-value
127.0.0.1:6379> hgetall user:1
1) "name"
2) "Tom"
3) "age"
4) "26"
使用hgetall时如果哈希元素过多,有可能造成Redis阻塞,尽量避免使用,可以用hscan命令渐进式遍历哈希类型
计数
增加指定数字
hincrby key field increment
给key为user:1,filed为age的value加5
127.0.0.1:6379> hget user:1 age
"26"
127.0.0.1:6379> hincrby user:1 age 5
(integer) 31
增加指定浮点数
hincrbyfloat key field increment
计算value的字符串长度
hstrlen key field
获取key为user:1,field为name的value长度
127.0.0.1:6379> hstrlen user:1 name
(integer) 3
内部编码
哈希类型的内部编码有两种:
- ziplist(压缩列表):当哈希类型元素个数小于hash-max-ziplist-entries配置(默认512个)、同时所有值都小于hash-max-ziplist-value配置(默认64字节)时,Redis会使用ziplist作为哈希的内部实现,ziplist使用更加紧凑的结构实现多个元素的连续存储,所以在节省内存方面比hashtable更加优秀。
- hashtable(哈希表):当哈希类型无法满足ziplist的条件时,Redis会使用hashtable作为哈希的内部实现,因为此时ziplist的读写效率会下降,而hashtable的读写时间复杂度为O(1)
边栏推荐
- Subsets of leetcode topic resolution
- “教练,我想打篮球“ —— 给做系统的同学们准备的 AI 学习系列小册
- Combination sum of leetcode topic analysis
- 2022-06-22:golang选择题,以下golang代码输出什么?A:3;B:1;C:4;D:编译失败。
- [QNX Hypervisor 2.2用户手册]6.1 使用QNX Hypervisor系统
- Jog运动模式
- 三层架构与SSM之间的对应关系
- Leetcode topic analysis sort colors
- 528. Random Pick with Weight
- ucosii(学习笔记)
猜你喜欢

297. Serialize and Deserialize Binary Tree

S5P4418裸机编程的实现(替换2ndboot)

Flink错误--Caused by: org.apache.calcite.sql.parser.SqlParseException: Encountered “time“

一元函数求极限三大方法---洛必达法则,泰勒公式

297. Serialize and Deserialize Binary Tree

一个采用直接映射方式的32KB缓存......存储器课后习题

扫码登录基本流程

“教练,我想打篮球“ —— 给做系统的同学们准备的 AI 学习系列小册

The fourth online workshop review

Click Add drop-down box
随机推荐
670. Maximum Swap
Arthas vmtool命令小结
Leetcode topic analysis spiral matrix II
[QNX Hypervisor 2.2用户手册]6.2 网络
528. Random Pick with Weight
3、 System analysis and design
Testing -- automated testing selenium (about API)
[QNX Hypervisor 2.2用户手册]6.1 使用QNX Hypervisor系统
C#之Lambda不得不说的用法
自定义标签——jsp标签增强
16.系统启动流程
How to use matrix analysis to build your thinking scaffold in flowus, notation and other note taking software
线性表(SequenceList)的顺序表示与实现----线性结构
986. Interval List Intersections
173. Binary Search Tree Iterator
Use of type dependent names must be prefixed with 'typename'
636. Exclusive Time of Functions
简易学生管理
Le rapport d'analyse de l'industrie chinoise des bases de données a été publié en juin. Le vent intelligent se lève, les colonnes se régénèrent
Detailed explanation of srl16e in xilinxffpga