Redis第五弹-HASH结构相关指令和介绍,计数功能Hash-哈希(Redis本来就是键值对结构,哈希,就相当于键值对嵌套了一个键值对)的多种指令Hset key field value-

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: Redis第五弹-HASH结构相关指令和介绍,计数功能Hash-哈希(Redis本来就是键值对结构,哈希,就相当于键值对嵌套了一个键值对)的多种指令Hset key field value-

计数功能

企业愿意去收集用户的数据,从而使用大数据推广->明确你的需求->根据需求改进产品和迭代产品。

Redis其实并不擅长技术统计,而这种操作应该去找mysql,

获取之后,用异步的方式同步到数据库(但是这也面临非常多的挑战,比如作弊找水军,点赞,收藏,转发)

这就需要用到数据持久化

Session(会话)->服务器用于跟踪和存储关于用户会话信息的机制(比如说我们的火影服务器,来存储你有多少忍者,多少高招卷,多少时装啥的)

Cookie->客户端的浏览器存储数据的一种机制,(记录用户状态,cookie会被浏览器保存起来,下次再次放送请求的时候,就会把该请求相关的Cookie添加到请求头中(类似于你登陆了csdn,还是这个浏览器,下次登陆的时候,就无须登陆了再)

Hash-哈希(Redis本来就是键值对结构,哈希,就相当于键值对嵌套了一个键值对)的多种指令

我们可以发现多了一个field,这是为了区分前面的key

Hset key field value-设置字段field的value

Hget key field value-获取字段key  field的value

hexists key field-判断当前值是否存在(1存在,0不存在)

hdel  key field-删除key的field

HKEYS key-获取hash中所有字段key(会根据key找到对应的hash)a

这里面我们可以发现一个问题:我们查找key的时候,他两个是在一起的,那就说明哈希表的储存结构,是两个字段相互独立的存储在同一个哈希结构中,他们各自相互独立存在,相互之间没有什么联系,但是他们两个还是在相同的一个key中,就像是dp[x][x]->

dp[0][0 ],dp[0][1],都是在dp[0][x]里面,但是两者没有相关联系。

HGETALL key(获取所有的field和value)

HMGET key field[field]-,可以一次查询多个field,类似于之前的HGET,HGET一次能查一个field.

Hlen key-查找当前哈希元素

HSETNX key field value-不存在当前值的时候,才会设置成功,如果存在,则会设置失败

Hscan key

为啥没有HMSET,因为Hset已经支持了多个field,上述Hkeys,hgetall,都存在一定风险,hash元素执行太多,执行表耗时太多,从而会阻塞redis,hscan遍历redis的hash,但是他是"渐进式遍历",一次一小部分,连续多次就可以完成整个遍历过程。

ConcurrentHashMap线程安全的哈希表(类似于这个哈希表在扩容的时候,也是化整为零)

hash这里的value也可以当做整数来处理

hincrby key field value-对于value加减整数

Hincrbyfloat key field value-可以加减小数

哈希的内部编码:

压缩链表               ziplist目的是为了节省空间。

代价:读写元素,比较慢,但是元素的个数一般比较少,慢的不明显。

元素个数

hash-max-ziplist-value(默认64字节长度)

hash-max-ziplist-entries配置里面有(默认是512个,当元素超过多少,换成hashtable)

object encoding key-查看内部编码

作为缓存 -String也是作为缓存来使用的,存储结构化时候,使用hash类型更好。上述使用string类型也能做

方式2

1.       id      age     city
2. user1 1        11      Shenyang
3. user2 2        12      Xian

如果使用String(JSON)的格式来去存储这种结构,万一我们只想获取某个field或者修改field,就需要把整个JSON读出来,解析对象,再去重写JSON字符,再去写回去

方式3

如果我们使用hash表示这种结构,就可以使用field来表示对象的每个属性(数据表的每个列),此时就可以修改/获取任何一个属性的值

使用hash的方式,读写field更加高效,但是会付出空间的待见

,需要控制内部ziplist和hashtable两种内部编码的转换,可能造成内存较大消耗

user1     uid 1     age1
user2     uid 1     age2

set user:1name jam

set user:2:age  23

set user:2:city shenyang     追求高内聚-低耦合(但是这个又过于分散)

高内聚:有关联的东西,放到指定的地方

耦合:两个模版/代码之间关联关系,关联关系越大,越容易相互影响,认为耦合性越大

关系型数据库可以做复杂的关系查询,而用Redis去模拟关系型数据库型复杂查询,但是你要是连表,聚合,那还是算了

这个uid不存储可以吗?是否可以直接使用key中的id进行区分呢?是否存储空间进一步节省了?如果不存uid也行,但是在工程中,一般会把uid在value中再去存储一份,方便后续写代码的时候使用。


相关实践学习
基于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
相关文章
|
4月前
|
缓存 NoSQL Java
Redis应用—6.热key探测设计与实践
热key问题在高并发系统中可能导致数据层和服务层的严重瓶颈,如Redis集群瘫痪和用户体验下降。为解决此问题,京东开发了JdHotkey热key探测框架,具备实时性、准确性、集群一致性和高性能等特点。该框架由etcd集群、Client端jar包、Worker端集群和Dashboard控制台组成,通过分布式计算快速识别热key并推送至应用内存,有效减轻数据层负载,提升服务性能。JdHotkey适用于多种场景,安装部署简便,支持毫秒级热key探测和集群一致性维护。
225 61
Redis应用—6.热key探测设计与实践
|
1月前
|
存储 缓存 NoSQL
告别数据僵尸!Redis实现自动清理过期键值对
在数据激增的时代,Redis如同内存管理的智能管家,支持键值对的自动过期功能,实现“数据保鲜”。通过`EXPIRE`设定生命倒计时、`TTL`查询剩余时间,结合惰性删除与定期清理策略,Redis高效维护内存秩序。本文以Python实战演示其过期机制,并提供最佳实践指南,助你掌握数据生命周期管理的艺术,让数据优雅退场。
123 0
|
1月前
|
NoSQL 测试技术 Redis
Redis批量删除Key的三种方式
Redis批量删除Key是优化数据库性能的重要操作,本文介绍三种高效方法:1) 使用通配符匹配(KEYS/SCAN+DEL),适合不同数据规模;2) Lua脚本实现原子化删除,适用于需要事务保障的场景;3) 管道批量处理提升效率。根据实际需求选择合适方案,注意操作不可逆,建议先备份数据,避免内存溢出或阻塞。
|
3月前
|
存储 NoSQL Redis
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 + 无锁架构 + EDA架构 + 异步日志 + 集群架构
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 + 无锁架构 + EDA架构 + 异步日志 + 集群架构
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 +  无锁架构 +  EDA架构  + 异步日志 + 集群架构
|
5月前
|
存储 缓存 NoSQL
Redis哈希结构在提升数据检索速度中的实践应用
本文详细介绍了 Redis 哈希结构的特点、常见使用场景以及如何在实际应用中利用哈希结构提升数据检索速度。通过合理使用 Redis 哈希结构,可以显著提高系统的性能和响应速度。在实际开发中,结合具体业务需求,灵活运用 Redis 提供的多种数据结构,构建高效的缓存和数据存储解决方案。希望本文能帮助您更好地理解和应用 Redis 哈希结构,提升数据检索速度。
128 18
|
6月前
|
NoSQL API Redis
在C程序中实现类似Redis的SCAN机制的LevelDB大规模key分批扫描
通过上述步骤,可以在C程序中实现类似Redis的SCAN机制的LevelDB大规模key分批扫描。利用LevelDB的迭代器,可以高效地遍历和处理数据库中的大量键值对。该实现方法不仅简单易懂,还具有良好的性能和扩展性,希望能为您的开发工作提供实用的指导和帮助。
86 7
|
缓存 监控 NoSQL
【Redis性能瓶颈揭秘】「调优系列」深入分析热Key的排查策略和解决方案
【Redis性能瓶颈揭秘】「调优系列」深入分析热Key的排查策略和解决方案
215879 12
|
存储 缓存 NoSQL
Redis 大数据量(百亿级)Key存储需求及解决方案
最近我在思考实时数仓问题的时候,想到了巨量的redis的存储的问题,然后翻阅到这篇文章,与各位分享
|
10月前
|
存储 缓存 NoSQL
Redis中大Key与热Key的解决方案
在工作中,Redis作为一款高性能缓存数据库被广泛应用,但常遇到“大key”和“热key”问题。“大key”指单个键包含大量数据,导致内存消耗高、性能下降及持久化效率降低;“热key”则是频繁访问的键,会引起CPU占用率高、请求阻塞等问题。本文详细分析了这些问题的定义、影响、原因,并提供了相应的解决方案,如合理设置缓存时间和数据结构、拆分大key、采用热点数据分片等方法。
642 4
Redis中大Key与热Key的解决方案
|
10月前
|
存储 缓存 NoSQL
Redis 大 Key 对持久化的影响及解决方案
Redis 大 Key 对持久化的影响及解决方案
137 1