【Redis】Hash类型的常用命令

背景:redis中存储数据采取key-value键值对的形式,而hash内部也是键值对,为了区别这两个东西,hash内部的键值对称为:field-value,而redis的为key-value,这里的value包括:field-value。

对于hash类型的命令和String很像,大多数是在前面加上h,表示hash的意思

1.命令小结
命令 含义 时间复杂度
hset key field value 设置值 O(1)
hget key field 获取值 O(1)
hdel key field [field ...] 删除field O(n)
hlen key 计算field个数 O(1)
hgetall field [field ...] 获取所有的field-value O(n)
hmget field [field ...] 批量获取field-value O(n)
hexists key field 判断field是否存在 O(1)
hkeys key 获取所有的field O(n)
hvals key 获取所有的value O(n)
hsetnx key field value 设置field值,field不存在时成功 O(1)
hincrby key field n 对应field-value+n O(1)
hincrbyfloat key field n 对应field-value+n(浮点数版) O(1)
hstrlen key field 计算value的字符串长度 O(1)
2.hash命令详解

(1)hset

语法:hset key field value [field value ......]

含义:设置键值对

返回值:设置成功后的field-value键值对的个数

时间复杂度:O(N),N为插入的个数

(2)hget

语法:hget key field

返回值:返回field对应的value,每次只能获取一个

时间复杂度:O(1)

(3)hexists

语法:hexists key field

含义:判断hash中指定的字段是否存在

返回值:1表示存在,0表示不存在

时间复杂度:O(1)

(4)hdel

语法:hdel key field [field ...]

含义:删除hash中指定的字段(删除的是field而不是key)

返回值:成功删除的field个数

时间复杂度:O(N),N为删除field的个数

(5)hkeys

语法:hkeys key

含义:获取hash中所有的field

时间复杂度:O(N),N为field的个数

(6)hvals

语法:hvals key

含义:返回所有的value(field对应的value)

时间复杂度:O(N),N为value的个数

(7)hgetall

语法:hgetall key

含义:获取hash中所有的field-value

时间复杂度:O(N),N为field的个数

(8)hmget

语法:hmget key field [field ...]

含义:返回hash中指定的field(可以同时查询多个field)

时间复杂度:O(N),N为查询field的个数

(9)hlen

语法:hlen key

含义:返回key对应的hash中所有字段的个数(field个数)

时间复杂度:O(1)

存在个数:

不存在:

(10)hsetnx

语法:hsetnx key field value

含义:在field不存在的时候才能设置成功

返回值:1表示设置成功,0表示失败

时间复杂度:O(1)

(11)hincrby

语法:hincrby key field increment

含义:将hash中指定字段对应的数值添加指定的值

时间复杂度:O(1)

(12)hincybyfloat

语法:hincybyfloat key field increment

含义:将hash中指定字段对应的数值添加指定的值(浮点数版本)

时间复杂度:O(1)

(13)hstrlen

语法:hstrlen key field

含义:计算value的字符串长度

时间复杂度:O(1)

3.hash编码方式

哈希内部编码的方式有两种:ziplist和hashtable。

(1)ziplist(压缩列表)

含义:两种情况都满足,redis就会采取该种编码方式。第一种:元素个数小于一定值(默认hash-max-ziplist-entries为512个)第二种:hash中所有的value值小于一定字节(hash-max-ziplist-value默认为64字节),同时满足才会采取ziplist编码方式。这种编码方式会更加的节省内存

(2)hashtable(哈希表)

下面让hash中的value过长,看一下hashtable的编码方式

相关推荐
计算机毕设定制辅导-无忧学长4 小时前
西门子 PLC 与 Modbus 集成:S7-1500 RTU/TCP 配置指南(一)
服务器·数据库·tcp/ip
麦兜*4 小时前
Spring Boot启动优化7板斧(延迟初始化、组件扫描精准打击、JVM参数调优):砍掉70%启动时间的魔鬼实践
java·jvm·spring boot·后端·spring·spring cloud·系统架构
KK溜了溜了4 小时前
JAVA-springboot 整合Redis
java·spring boot·redis
大只鹅4 小时前
解决 Spring Boot 对 Elasticsearch 字段没有小驼峰映射的问题
spring boot·后端·elasticsearch
天河归来4 小时前
使用idea创建springboot单体项目
java·spring boot·intellij-idea
程序员柳4 小时前
基于微信小程序的校园二手交易平台、微信小程序校园二手商城源代码+数据库+使用说明,layui+微信小程序+Spring Boot
数据库·微信小程序·layui
梦在深巷、5 小时前
MySQL/MariaDB数据库主从复制之基于二进制日志的方式
linux·数据库·mysql·mariadb
IT乌鸦坐飞机5 小时前
ansible部署数据库服务随机启动并创建用户和设置用户有完全权限
数据库·ansible·centos7
IT_10245 小时前
Spring Boot项目开发实战销售管理系统——数据库设计!
java·开发语言·数据库·spring boot·后端·oracle
武昌库里写JAVA5 小时前
Oracle如何使用序列 Oracle序列使用教程
java·开发语言·spring boot·学习·课程设计