Redis系列-存储hash主要操作命令

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: Redis系列-存储hash主要操作命令

Redis系列-存储篇hash主要操作函数小结

hash是一些列key value(field value)的映射表。常常用其存储一些对象实例。相对于把一个对象的各个字段存储为string,存储为hash会占用更少的内存。为什么会更省内存呢?需要搞清楚两个配置(hash-max-zipmap-entries和hash-max-zipmap-value)的含义,配置的详细介绍,我打算放在最后的配置优化环节讲。

1)新增

a)hset

语法:hset key field value
解释:设置hash表key中的field的值。如果hash表不存在,则创建,并执行设置field的值,如果hash表存在,值field的值覆盖或新增
[root@localhost ~]# redis-cli 
redis 127.0.0.1:6379> hset user.1 name lisi    #设置key user.1 name域 的值
(integer) 1
redis 127.0.0.1:6379> hset user.1 age 45 #设置age域
(integer) 1
redis 127.0.0.1:6379> hset user.1 tech lisi
(integer) 1

b)hmset

语法:hash key field value[key value]
解释:批量设置hash表key的域
redis 127.0.0.1:6379> hmset user.2 name niuer age 34 #同时设置name 和age域
OK

c)hsetnx

语法:hsetnx key field value
解释:仅仅当field域不存在时,设置hash表field的值
redis 127.0.0.1:6379> hsetnx user.1 name lisi  #由于name域已经设置过,所以返回0
(integer) 0
redis 127.0.0.1:6379> hsetnx user.1 fri 5  
(integer) 1   #fri域没有设置过,所以hset并返回1

2)查询

a)hget

语法:hget key field
 
解释:获取哈希表key的field值
 
redis 127.0.0.1:6379> hget user.1 name  #存在的hash表及域
"lisi"
redis 127.0.0.1:6379> hget user.3 name  #不存在的hash表
(nil)
redis 127.0.0.1:6379> hget user.1 bb  #不存在的域
(nil)

b)hmget

语法:hmget key field[field]
 
解释:批量获取hash表的filed
 
redis 127.0.0.1:6379> hmget user.1 name age fri tech
1) "lisi"
2) "45"
3) "5"
4) "lisi"
redis 127.0.0.1:6379> hmget user.1 name age fri tech nofield #存在hash表中包含不存在的域nofield
1) "lisi"
2) "45"
3) "5"
4) "lisi"
5) (nil)
redis 127.0.0.1:6379> hmget user.3 name age fri #不存在的hash表
1) (nil)
2) (nil)
3) (nil)

c)hgetall

语法:hgetall key
 
解释:获取hash表的所有域值
 
redis 127.0.0.1:6379> hgetall user.2  #存在的hash表
1) "name"   #域
2) "niuer"  #域name的值
3) "age"    #域
4) "34"     #域age的值
redis 127.0.0.1:6379> hgetall user.3  #不存在的hansh表
(empty list or set)

d)hexists

语法:hexists key field
 
解释:判断hash表中是否存在某个域
 
redis 127.0.0.1:6379> hexists user.1 name  #存在
(integer) 1
redis 127.0.0.1:6379> hexists user.1 nofield  #不存在
(integer) 0
redis 127.0.0.1:6379> hexists use1 nofield #hash表不存在
(integer) 0

e)hkeys

语法:hkeys key
 
解释:获取hash表的所有域
 
redis 127.0.0.1:6379> hkeys user.1  #存在的hash表
1) "name"
2) "age"
3) "tech"
4) "fri"
redis 127.0.0.1:6379> hkeys user.4 #不存在的hash
(empty list or set)

f)hvals

语法:hvals key
 
解释:获取hash表的所有域值
 
redis 127.0.0.1:6379> hvals user.1  #存在hash
1) "lisi"
2) "45"
3) "lisi"
4) "5" 
redis 127.0.0.1:6379> hvals user.4 #不存在
(empty list or set)

3)修改

语法:hincrby key field increment
 
解释:hash表field域的数值增加步长increment,如果increment是负值,则是递减。如果域不存在,初始值视为0
 
redis 127.0.0.1:6379> hincrby user.1 age 2  #增加2
(integer) 47
redis 127.0.0.1:6379> hincrby user.1 age -3  #减少3
(integer) 44
redis 127.0.0.1:6379> hincrby user.1 age2 -3 #域不能存在,初始值是0
(integer) -3

4)删除

语法:hdel key field[field]
 
解释:删除hash的域,如果指定多个field,则删除多个
 
redis 127.0.0.1:6379> hkeys user.1
1) "name"
2) "age"
3) "tech"
4) "fri"
5) "age2"
redis 127.0.0.1:6379> hdel user.1 age2  #删除一个域
(integer) 1
redis 127.0.0.1:6379> hkeys user.1
1) "name"
2) "age"
3) "tech"
4) "fri"
redis 127.0.0.1:6379> hdel user.1 fri tech #删除2个域
(integer) 2
redis 127.0.0.1:6379> hkeys user.1
1) "name"
2) "age"
redis 127.0.0.1:6379> hdel user.1 bb #删除一个不存在的域 
(integer) 0 #返回0

5)其他

语法:hlen key
 
解释:获取hash的域数量
 
redis 127.0.0.1:6379> hkeys user.1
1) "name"
2) "age"
redis 127.0.0.1:6379> hlen user.1 #存在2个域
(integer) 2
redis 127.0.0.1:6379> hlen user.4  #不存在的hash
(integer) 0

关于hash的更多详细用法,请参阅:http://redis.io/commands#hash

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
3月前
|
消息中间件 缓存 NoSQL
Redis 是一个高性能的键值对存储系统,常用于缓存、消息队列和会话管理等场景。
【10月更文挑战第4天】Redis 是一个高性能的键值对存储系统,常用于缓存、消息队列和会话管理等场景。随着数据增长,有时需要将 Redis 数据导出以进行分析、备份或迁移。本文详细介绍几种导出方法:1)使用 Redis 命令与重定向;2)利用 Redis 的 RDB 和 AOF 持久化功能;3)借助第三方工具如 `redis-dump`。每种方法均附有示例代码,帮助你轻松完成数据导出任务。无论数据量大小,总有一款适合你。
85 6
|
17天前
|
存储 消息中间件 监控
Redis Stream:实时数据流的处理与存储
通过上述分析和具体操作示例,您可以更好地理解和应用 Redis Stream,满足各种实时数据处理需求。
53 14
|
16天前
|
NoSQL 应用服务中间件 API
Redis是如何建立连接和处理命令的
本文主要讲述 Redis 是如何监听客户端发出的set、get等命令的。
|
2月前
|
存储 NoSQL 算法
Redis分片集群中数据是怎么存储和读取的 ?
Redis集群采用哈希槽分区算法,共有16384个哈希槽,每个槽分配到不同的Redis节点上。数据操作时,通过CRC16算法对key计算并取模,确定其所属的槽和对应的节点,从而实现高效的数据存取。
56 13
|
3月前
|
存储 NoSQL Redis
Redis 哈希(Hash)
10月更文挑战第16天
52 1
|
2月前
|
存储 NoSQL Redis
【赵渝强老师】Redis的存储结构
Redis 默认配置包含 16 个数据库,通过 `databases` 参数设置。每个数据库编号从 0 开始,默认连接 0 号数据库,可通过 `SELECT <dbid>` 切换。Redis 的核心存储结构包括 `dict`、`expires` 等字段,用于处理键值和过期行为。添加键时需指定数据库信息。视频讲解和代码示例详见内容。
|
2月前
|
存储 NoSQL Java
Redis命令:列表模糊删除详解
通过本文的介绍,我们详细探讨了如何在Redis中实现列表的模糊删除。虽然Redis没有直接提供模糊删除命令,但可以通过组合使用 `LRANGE`和 `LREM`命令,并在客户端代码中进行模糊匹配,来实现这一功能。希望本文能帮助你在实际应用中更有效地操作Redis列表。
83 0
|
3月前
|
缓存 NoSQL 测试技术
Redis如何解决频繁的命令往返造成的性能瓶颈!
Redis如何解决频繁的命令往返造成的性能瓶颈!
|
3月前
|
NoSQL Redis 数据安全/隐私保护
Redis 命令
10月更文挑战第15天
44 0