redis的hash类型的详解

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: redis的hash类型的详解

 简介

Hash是一个键值对的集合。Hash 是一个 String 类型的 field(字段) 和 value(值) 的映射表,hash 特别适合用于存储对象。

Hash存储结构优化:

如果field数量较少,存储结构优化为类数组结构

如果field数量较多,存储结构使用HashMap结构

原生操作

增加/修改【key的field的value】

增加/修改
hset key field value

image.gif

如果哈希表不存在,一个新的哈希表被创建并进行 HSET 操作。 如果字段已经存在于哈希表中,旧值将被重写

增加(多个)
hmset key field1 value1 field2 value2……

image.gif

增加(锁,只有field不存在时生效)
hsetnx key field value

image.gif

如果哈希表不存在,一个新的哈希表被创建并进行 hsetnx 操作。

如果字段已经存在于哈希表中,操作无效。

如果 key 不存在,一个新哈希表被创建并执行 hsetnx 命令

查询

查询一个(key的field的value)
hget key field

image.gif

查询所有field
hkeys key

image.gif

查询所有value
hvals key

image.gif

删除【key的field】

删除一个或多个
hdel key field1 field2……

image.gif

不存在的字段将被忽略

方法

判断指定key中是否存在field
hexists key field

image.gif

如果哈希表含有给定字段,返回 1 。 如果哈希表不含有给定字段,或 key 不存在,返回 0

为哈希表key中的field字段的值加上增量increment(数字)
hincrby key field increment

image.gif

增量也可以为负数,相当于对指定字段进行减法操作 如果哈希表的 key 不存在,一个新的哈希表被创建并执行 hincrby 命令 如果指定的字段不存在,那么在执行命令前,字段的值被初始化为 0 对一个储存字符串值的字段执行 hincrby 命令将造成一个错误

java操作redis的hash类型【boundHashOps()】

增加

往指定key中存储 键值
redisTemplate.boundHashOps("demo").put("1",1);

image.gif

批量存储到指定key中
Map<String,String> map = new HashMap<>();
          map.put("3","zhangsan");
          map.put("4","lisi");
          redisTemplate.boundHashOps("demo").putAll(map);

image.gif

根据指定key判断键是否存在,存在返回false不新增,不存在则新增键值对返回true
System.out.println(redisTemplate.boundHashOps("demo").putIfAbsent("7", 5));

image.gif

修改

重新命名当前key的名称
redisTemplate.boundHashOps(key).rename("test");

image.gif

查询

根据指定key中得键取出值
System.out.println(redisTemplate.boundHashOps("demo").get("1"));

image.gif

根据指定key取出所有键
Set<Object> keys = redisTemplate.boundHashOps("demo").keys();

image.gif

获取指定key中所有键值对得值
List<Object> values = redisTemplate.boundHashOps("demo").values();
          System.out.println(values);

image.gif

根据指定key取出全部键值对
Map<Object, Object> entries = redisTemplate.boundHashOps("demo").entries();

image.gif

删除

根据指定key中得键删除
redisTemplate.boundHashOps("demo").delete("1");

image.gif

方法

设置key得到期时间 TimeUnit 设置时间类型(时、分、秒...)
redisTemplate.boundHashOps("demo").expire(100000, TimeUnit.MILLISECONDS);

image.gif

获取当前key过期时间
System.out.println(redisTemplate.boundHashOps("demo").getExpire());

image.gif

获取指定key得元素长度
Long size = redisTemplate.boundHashOps("demo").size();

image.gif

判断指定key中是否存在该键
System.out.println(redisTemplate.boundHashOps("demo").hasKey("1"));

image.gif

获取当前key的存储方式
System.out.println(redisTemplate.boundHashOps("demo").getType());

image.gif


相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
2月前
|
存储 NoSQL Java
Redis如何处理Hash冲突?
在 Redis 中,哈希表是一种常见的数据结构,通常用于存储对象的属性,对于哈希表,最常遇到的是哈希冲突,那么,当 Redis遇到Hash冲突会如何处理?这篇文章,我们将详细介绍Redis如何处理哈希冲突,并探讨其性能和实现细节。
65 1
|
1月前
|
存储 消息中间件 NoSQL
Redis数据结构:List类型全面解析
Redis数据结构——List类型全面解析:存储多个有序的字符串,列表中每个字符串成为元素 Eelement,最多可以存储 2^32-1 个元素。可对列表两端插入(push)和弹出(pop)、获取指定范围的元素列表等,常见命令。 底层数据结构:3.2版本之前,底层采用**压缩链表ZipList**和**双向链表LinkedList**;3.2版本之后,底层数据结构为**快速链表QuickList** 列表是一种比较灵活的数据结构,可以充当栈、队列、阻塞队列,在实际开发中有很多应用场景。
|
2月前
|
存储 NoSQL Redis
Redis 哈希(Hash)
10月更文挑战第16天
40 1
|
2月前
|
消息中间件 存储 监控
redis 的List类型 实现 排行榜
【10月更文挑战第8天】
39 2
|
2月前
|
存储 NoSQL Redis
redis-set类型
【10月更文挑战第6天】
44 1
|
2月前
|
存储 分布式计算 NoSQL
大数据-40 Redis 类型集合 string list set sorted hash 指令列表 执行结果 附截图
大数据-40 Redis 类型集合 string list set sorted hash 指令列表 执行结果 附截图
27 3
|
2月前
|
消息中间件 分布式计算 NoSQL
大数据-41 Redis 类型集合(2) bitmap位操作 geohash空间计算 stream持久化消息队列 Z阶曲线 Base32编码
大数据-41 Redis 类型集合(2) bitmap位操作 geohash空间计算 stream持久化消息队列 Z阶曲线 Base32编码
27 2
|
1月前
|
存储 NoSQL 关系型数据库
Redis的ZSet底层数据结构,ZSet类型全面解析
Redis的ZSet底层数据结构,ZSet类型全面解析;应用场景、底层结构、常用命令;压缩列表ZipList、跳表SkipList;B+树与跳表对比,MySQL为什么使用B+树;ZSet为什么用跳表,而不是B+树、红黑树、二叉树
|
3月前
|
存储 JSON NoSQL
redis基本数据结构(String,Hash,Set,List,SortedSet)【学习笔记】
这篇文章是关于Redis基本数据结构的学习笔记,包括了String、Hash、Set、List和SortedSet的介绍和常用命令。文章解释了每种数据结构的特点和使用场景,并通过命令示例演示了如何在Redis中操作这些数据结构。此外,还提供了一些练习示例,帮助读者更好地理解和应用这些数据结构。
redis基本数据结构(String,Hash,Set,List,SortedSet)【学习笔记】
|
3月前
|
JSON 缓存 NoSQL
redis序列化数据时,如何包含clsss类型信息?
通过配置 `com.fasterxml.jackson.databind.ObjectMapper` 的 `enableDefaultTyping` 方法,可以使序列化后的 JSON 包含类信息。
54 2