![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Redis
文章平均质量分 94
阿昌喜欢吃黄桃
这个作者很懒,什么都没留下…
展开
-
Day819.缓存优化系统性能 -Java 性能调优实战
Hi,我是,今天学习记录的是关于。缓存 是提高的一项必不可少的技术,无论是前端、还是后端,都应用到了缓存技术。使用缓存,可以降低多次请求服务的压力;使用缓存,可以降低数据库操作的压力,提升读取数据的性能。如果是一位 Java 开发工程师,可能会想,有必要去了解前端的技术吗?不想当将军的士兵不是好士兵,作为一个技术人员,不想做架构师的开发不是好开发。作为架构工程师的话,就很有必要去了解前端的知识点了,这样有助于设计和优化系统。前端做缓存,可以缓解服务端的压力,减少带宽的占用,同时也可以提升前端的查询性能。平时原创 2022-12-03 13:47:53 · 281 阅读 · 0 评论 -
Day817.分布式锁的实现 -Java 性能调优实战
实现分布式锁的方式有很多,有最简单的数据库实现,还有 Zookeeper 多节点实现和缓存实现。可以分别对这三种实现方式进行性能压测,可以发现在同样的服务器配置下,Redis 的性能是最好的,Zookeeper 次之,数据库最差。从实现方式和可靠性来说,Zookeeper 的实现方式简单,且基于分布式集群,可以避免单点问题,具有比较高的可靠性。因此,在对业务性能要求不是特别高的场景中,建议使用 Zookeeper 实现的分布式锁。原创 2022-12-01 22:21:21 · 291 阅读 · 0 评论 -
Day774.能向 Redis 学到什么 -Redis 核心技术与实战
Hi, 我是阿昌,今天学习记录的是关于。大多数人人都会觉得,就是掌握具体的原理,进行实战,并且学习别人的经验,解决自己在实际工作中的问题。比如说,学习 Redis 时,会把它用在缓存、分布式锁、数据集群等业务场景中,这就需要掌握关键实践技巧、常见问题和应对方法,这也是这么多文章的聚焦点。但是,这只是学习技术的。当对技术的认识和积累达到一定程度后,就应该“向技术致敬”。所谓的致敬,就是向技术学习,来解决在生活中遇到的问题。这是第二个层面。原创 2022-10-19 22:07:52 · 409 阅读 · 0 评论 -
Day773.微博的Redis实践经验 -Redis 核心技术与实战
总结来说,微博对 Redis 的技术需求可以概括为 3 点,分别是高性能大容量易扩展为了满足这些需求,除了对 Redis 进行优化,微博也在自研扩展系统,包括基于 RocksDB 的容量扩展机制,以及服务化的 RedisService 集群。分享一下我两个感受第一个是关于微博做的 RedisService 集群,这个优化方向是大厂平台部门同学的主要工作方向。业务纵切、平台横切是当前构建大规模系统的基本思路。所谓业务纵切,是指把不同的业务数据单独部署,这样可以避免相互之间的干扰。原创 2022-10-18 22:56:50 · 1038 阅读 · 0 评论 -
Day772.Redis的使用规范建议 -Redis 核心技术与实战
按照强制、推荐、建议这三个类别,把这些规范分了下类,如下表所示:解释一下这 3 个类别的规范。强制类别的规范:这表示,如果不按照规范内容来执行,就会给 Redis 的应用带来极大的负面影响,例如性能受损。推荐类别的规范:这个规范的内容能有效提升性能、节省内存空间,或者是增加开发和运维的便捷性,你可以直接应用到实践中。建议类别的规范:这类规范内容和实际业务应用相关,我只是从我的经历或经验给你一个建议,你需要结合自己的业务场景参考使用。原创 2022-10-17 22:31:20 · 759 阅读 · 0 评论 -
Day771.Redis好用的运维工具 -Redis 核心技术与实战
介绍了几种 Redis 的运维工具。先了解了 Redis 的INFO 命令,这个命令是监控工具的基础,监控工具都会基于 INFO 命令提供的信息进行二次加工。3 种用来监控 Redis 实时运行状态的运维工具,分别是 Redis-exporter、redis-stat 和 Redis Live。关于数据迁移,既可以使用 Redis-shake 工具,也可以通过 RDB 文件或是 AOF 文件进行迁移。关于集群管理。原创 2022-10-16 12:12:22 · 1210 阅读 · 0 评论 -
Day770.Redis客户端如何与服务器端交换命令和数据 -Redis 核心技术与实战
RESP 2 协议。这个协议定义了 Redis 客户端和服务器端进行命令和数据交互时的编码格式。RESP 2 提供了 5 种类型的编码格式,包括简单字符串类型、长字符串类型、整数类型、错误类型和数组类型。为了区分这 5 种类型,RESP 2 协议使用了 5 种不同的字符作为这 5 种类型编码结果的第一个字符,分别是+、 $、:、- 和 *。RESP 2 协议是文本形式的协议,实现简单,可以减少客户端开发出现的 Bug,而且可读性强,便于开发调试。原创 2022-10-15 14:29:53 · 1031 阅读 · 2 评论 -
Day769.Kaito大佬的学习方法&技巧&认识 -Redis 核心技术与实战
Hi, 我是阿昌,今天学习记录的是关于。原创 2022-10-14 23:26:51 · 785 阅读 · 0 评论 -
Day768.大佬推荐的经典的Redis学习资料 -Redis 核心技术与实战
三本参考书,分别对应了Redis 的命令操作使用、关键机制的实现原理,以及实战经验,还介绍了 Redis 操作命令快速查询的两个网站,这可是日常使用 Redis 的必备工具,可以提升你使用操作 Redis 的效率。另外,对于 Redis 关键机制涉及到的扩展知识点,从操作系统和分布式系统两个方面进行了补充。如果觉得这些书读起来困难,推荐一本《Redis 深度历险:核心原理与应用实践。原创 2022-10-13 22:26:41 · 1372 阅读 · 0 评论 -
Day767.Redis常见问题④ -Redis 核心技术与实战
集群是实际业务应用中很重要的一个需求。一个小建议。集群部署和运维涉及的工作量非常大,所以,一定要重视集群方案的选择。集群的可扩展性是我们评估集群方案的一个重要维度,一定要关注,集群中元数据是用 Slot 映射表,还是一致性哈希维护的。如果是 Slot 映射表,那么,是用中心化的第三方存储系统来保存,还是由各个实例来扩散保存,这也是需要考虑清楚的。Redis Cluster、Codis 和 Memcached 采用的方式各不相同。:使用 Slot 映射表并由实例扩散保存。- Codis。原创 2022-10-12 22:44:33 · 262 阅读 · 0 评论 -
Day766.Redis基于NVM内存的实践 -Redis 核心技术与实战
性能高容量大数据可以持久化保存软件系统可以像访问传统 DRAM 内存一样,访问 NVM 内存。目前,Intel 已经推出了 NVM 内存产品 Optane AEP。这款 NVM 内存产品给软件提供了两种使用模式,分别是 Memory 模式和 App Direct 模式。在 Memory 模式时,Redis 可以利用 NVM 容量大的特点,实现大容量实例,保存更多数据。原创 2022-10-11 22:00:45 · 287 阅读 · 0 评论 -
Day765.Redis 6.0的新特性:多线程、客户端缓存与安全 -Redis 核心技术与实战
Redis 6.0 的新特性,总结在了一张表里。小建议:因为 Redis 6.0 是刚刚推出的,新的功能特性还需要在实际应用中进行部署和验证,所以,如果想试用 Redis 6.0,可以尝试先在非核心业务上使用 Redis 6.0,一方面可以验证新特性带来的性能或功能优势,另一方面,也可以避免因为新特性不稳定而导致核心业务受到影响。Redis 6.0 的哪些新特性帮助最大?我觉得 Redis 6.0 提供的多 IO 线程和客户端缓存这两大特性,对于使用 Redis 帮助最大。多 IO 线程。原创 2022-10-10 22:04:22 · 288 阅读 · 0 评论 -
Day764.RedisCluster规模导致的通信开销问题 -Redis 核心技术与实战
Redis Cluster 运行时,各实例间需要通过 PING、PONG 消息进行信息交换,这些心跳消息包含了当前实例和部分其它实例的状态信息,以及 Slot 分配信息。这种通信机制有助于 Redis Cluster 中的所有实例都拥有完整的集群状态信息。但是,随着集群规模的增加,实例间的通信量也会增加。如果盲目地对 Redis Cluster 进行扩容,就可能会遇到集群性能变慢的情况。这是因为,集群中大规模的实例间心跳消息会挤占集群处理正常请求的带宽。原创 2022-10-09 21:42:02 · 219 阅读 · 0 评论 -
Day763.Redis数据倾斜问题 -Redis 核心技术与实战
数据倾斜的两种情况数据量倾斜和数据访问倾斜。数据中有 bigkey,导致某个实例的数据量增加;Slot 手工分配不均,导致某个或某些实例上有大量数据;使用了 Hash Tag,导致数据集中到某些实例上。而数据访问倾斜的主要原因就是有热点数据存在,导致大量访问请求集中到了热点数据所在的实例上。为了应对数据倾斜问题,我给你介绍了四个方法,也分别对应了造成数据倾斜的四个原因。我把它们总结在下表中,你可以看下。当然,如果已经发生了数据倾斜,可以通过数据迁移来缓解数据倾斜的影响。原创 2022-10-08 21:19:25 · 823 阅读 · 0 评论 -
Day762.Redis秒杀场景 -Redis 核心技术与实战
秒杀场景有 2 个负载特征,分别是瞬时高并发请求和读多写少。Redis 良好的高并发处理能力,以及高效的键值对读写特性,正好可以满足秒杀场景的需求。在秒杀场景中,可以通过前端 CDN 和浏览器缓存拦截大量秒杀前的请求。在实际秒杀活动进行时,库存查验和库存扣减是承受巨大并发请求压力的两个操作,同时,这两个操作的执行需要保证原子性。Redis 的原子操作、分布式锁这两个功能特性可以有效地来支撑秒杀场景的需求。当然,对于秒杀场景来说,只用 Redis 是不够的。原创 2022-10-07 13:50:19 · 661 阅读 · 0 评论 -
Day761.Redis集群方案:Codis -Redis 核心技术与实战
Codis 集群包含codis server、codis proxy、Zookeeper、codis dashboard 和 codis fe 这四大类组件。和负责处理数据读写请求,其中,codis proxy 和客户端连接,接收请求,并转发请求给 codis server,而 codis server 负责具体处理请求。codis dashboard 和 codis fe 负责集群管理,其中,codis dashboard 执行管理操作,而 codis fe 提供 Web 管理界面。原创 2022-10-06 17:34:26 · 1108 阅读 · 2 评论 -
Day760.Redis常见问题③ -Redis 核心技术与实战
Hi,我是阿昌,今天学习记录Redis常见问题③的部分。原创 2022-10-05 11:27:04 · 373 阅读 · 0 评论 -
Day759.Redis脑裂问题 -Redis 核心技术与实战
主从切换时可能遇到的脑裂问题。脑裂是指在主从集群中,同时有两个主库都能接收写请求。在 Redis 的主从切换过程中,如果发生了脑裂,客户端数据就会写入到原主库,如果原主库被降为从库,这些新写入的数据就丢失了。脑裂发生的原因主要是原主库发生了假故障,我们来总结下假故障的两个原因。和主库部署在同一台服务器上的其他程序临时占用了大量资源(例如 CPU 资源),导致主库资源使用受限,短时间内无法响应心跳。其它程序不再使用资源时,主库又恢复正常。原创 2022-10-05 00:42:06 · 1382 阅读 · 1 评论 -
Day758.Redis主从同步与故障切换的坑 -Redis 核心技术与实战
Redis 主从库同步时可能出现的 3 个坑,分别是主从数据不一致读取到过期数据不合理配置项导致服务挂掉。最后,关于主从库数据不一致的问题,一个小建议:Redis 中的 slave-serve-stale-data 配置项设置了从库能否处理数据读写命令,可以把它设置为 no。这样一来,从库只能服务 INFO、SLAVEOF 命令,这就可以避免在从库中读到不一致的数据了。原创 2022-10-03 10:40:06 · 830 阅读 · 0 评论 -
Day757.Redis事务机制 -Redis 核心技术与实战
Redis通过MULTI、EXEC、DISCARD和WATCH四个命令来支持事务机制,这 4 个命令的作用,总结在下面的表中事务的 ACID 属性是使用事务进行正确操作的基本要求。Redis 的事务机制可以保证一致性和隔离性,但是无法保证持久性。不过,因为 Redis 本身是内存数据库,持久性并不是一个必须的属性,我们更加关注的还是原子性、一致性和隔离性这三个属性。原子性的情况比较复杂,只有当事务中使用的命令语法有误时,原子性得不到保证,在其它情况下,事务都可以原子性执行。原创 2022-10-02 10:01:14 · 268 阅读 · 0 评论 -
Day756.Redis实现分布式锁 -Redis 核心技术与实战
分布式锁是由共享存储系统维护的变量,多个客户端可以向共享存储系统发送命令进行加锁或释放锁操作。Redis 作为一个共享存储系统,可以用来实现分布式锁。在基于单个 Redis 实例实现分布式锁时,对于加锁操作,我们需要满足三个条件。加锁包括了读取锁变量、检查锁变量值和设置锁变量值三个操作,但需要以原子操作的方式完成,所以,我们使用 SET 命令带上 NX 选项来实现加锁;锁变量需要设置过期时间。原创 2022-10-01 14:10:54 · 223 阅读 · 0 评论 -
Day755.Redis的原子操作 -Redis 核心技术与实战
在并发访问时,并发的 RMW 操作会导致数据错误,所以需要进行并发控制。所谓并发控制,就是要保证临界区代码的互斥执行。Redis 提供了两种原子操作的方法来实现并发控制单命令操作Lua 脚本因为原子操作本身不会对太多的资源限制访问,可以维持较高的系统并发性能。但是,单命令原子操作的适用范围较小,并不是所有的 RMW 操作都能转变成单命令的原子操作(例如 INCR/DECR 命令只能在读取数据后做原子增减),当需要对读取的数据做更多判断,或者是我们对数据的修改不是简单的增减时,单命令操作就不适用了。原创 2022-09-30 20:11:31 · 432 阅读 · 0 评论 -
Day754.Pika键值对数据库 -Redis 核心技术与实战
跟 Redis 相比,Pika 的好处非常明显:既支持 Redis 操作接口,又能支持保存大容量的数据。如果你原来就在应用 Redis,现在想进行扩容,那么,Pika 无疑是一个很好的选择,无论是代码迁移还是运维管理,Pika 基本不需要额外的工作量。不过,Pika 毕竟是把数据保存到了 SSD 上,数据访问要读写 SSD,所以,读写性能要弱于 Redis。针对这一点,提供两个降低读写 SSD 对 Pika 的性能影响的小建议利用 Pika 的。原创 2022-09-29 22:32:41 · 743 阅读 · 0 评论 -
Day753.缓存污染问题 -Redis 核心技术与实战
缓存污染问题指的是留存在缓存中的数据,实际不会被再次访问了,但是又占据了缓存空间。如果这样的数据体量很大,甚至占满了缓存,每次有新数据写入缓存时,还需要把这些数据逐步淘汰出缓存,就会增加缓存操作的时间开销。因此,要解决缓存污染问题,最关键的技术点就是能识别出这些只访问一次或是访问次数很少的数据,在淘汰数据时,优先把它们筛选出来并淘汰掉。因为 noviction 策略不涉及数据淘汰,就从能否有效解决缓存污染这个维度,Redis 的其他 7 种数据淘汰策略。原创 2022-09-28 22:29:37 · 420 阅读 · 0 评论 -
Day752.缓存雪崩、击穿、穿透问题 -Redis 核心技术与实战
从问题成因来看,缓存雪崩和击穿主要是因为数据不在缓存中了,而缓存穿透则是因为数据既不在缓存中,也不在数据库中。所以,缓存雪崩或击穿时,一旦数据库中的数据被再次写入到缓存后,应用又可以在缓存中快速访问数据了,数据库的压力也会相应地降低下来,而缓存穿透发生时,Redis 缓存和数据库会同时持续承受请求压力。一张表格:服务熔断、服务降级、请求限流这些方法都是属于“有损”方案,在保证数据库和整体系统稳定的同时,会对业务应用带来负面影响。原创 2022-09-27 22:38:18 · 267 阅读 · 0 评论 -
Day751.缓存和数据库的数据不一致问题-Redis 核心技术与实战
Redis 缓存缓存和数据库不一致的问题。针对这个问题,可以分成读写缓存和只读缓存两种情况进行分析。对于读写缓存来说,如果采用同步写回策略,那么可以保证缓存和数据库中的数据一致。只读缓存的情况比较复杂,总结了一张表。在大多数业务场景下,会把 Redis 作为只读缓存使用。针对只读缓存来说,既可以先删除缓存值再更新数据库,也可以先更新数据库再删除缓存。建议是,优先使用先更新数据库再删除缓存的方法先删除缓存值再更新数据库,有可能导致请求因缓存缺失而访问数据库,给数据库带来压力;原创 2022-09-26 22:46:41 · 343 阅读 · 0 评论 -
Day750.Redis缓存淘汰替换策略:Redis是如何工作的 -Redis 核心技术与实战
介绍缓存替换时的数据淘汰策略,以及被淘汰数据的处理方法。Redis 4.0 版本以后一共提供了 8 种数据淘汰策略,从淘汰数据的候选集范围来看,有两种候选范围:一种是所有数据都是候选集,一种是设置了过期时间的数据是候选集。另外,无论是面向哪种候选数据集进行淘汰数据选择,都有三种策略,分别是随机选择,根据 LRU 算法选择,以及根据LFU 算法选择。当然,当面向设置了过期时间的数据集选择淘汰数据时,我们还可以根据数据离过期时间的远近来决定。原创 2022-09-25 16:17:23 · 405 阅读 · 0 评论 -
Day749.旁路缓存:Redis是如何工作的 -Redis 核心技术与实战
缓存的两个特征,分别是在分层系统中,数据暂存在快速子系统中有助于加速访问;缓存容量有限,缓存写满时,数据需要被淘汰。而 Redis 天然就具有高性能访问和数据淘汰机制,正好符合缓存的这两个特征的要求,所以非常适合用作缓存。另外,还学习了 Redis 作为旁路缓存的特性,旁路缓存就意味着需要在应用程序中新增缓存逻辑处理的代码。当然,如果是无法修改源码的应用场景,就不能使用 Redis 做缓存了。Redis 做缓存时,还有两种模式,分别是只读缓存和读写缓存。原创 2022-09-24 22:35:56 · 365 阅读 · 0 评论 -
Day748.Redis常见问题② -Redis 核心技术与实战
Hi,我是阿昌,今天记录统计聚合一下前面学习过来的一系列Redis常见问题②。原创 2022-09-23 23:46:00 · 247 阅读 · 0 评论 -
Day747.Redis缓冲区 -Redis 核心技术与实战
Redis 中使用的缓冲区。使用缓冲区以后,当命令数据的接收方处理速度跟不上发送方的发送速度时,缓冲区可以避免命令数据的丢失。按照缓冲区的用途,例如是用于客户端通信还是用于主从节点复制,我把缓冲区分成了客户端的输入和输出缓冲区,以及主从集群中主节点上的复制缓冲区和复制积压缓冲区。现在,从缓冲区溢出对 Redis 的影响的角度,再把这四个缓冲区分成两类做个总结。缓冲区溢出导致网络连接关闭。原创 2022-09-22 23:05:41 · 390 阅读 · 0 评论 -
Day746.Redis内存碎片问题 -Redis 核心技术与实战
通常情况下,内存空间闲置,往往是因为操作系统发生了较为严重的内存碎片。那么,什么是内存碎片呢?借助高铁的车厢座位来进行解释。假设一个车厢的座位总共有 60 个,现在已经卖了 57 张票,你和 2 个小伙伴要乘坐高铁出门旅行,刚好需要三张票。不过,你们想要坐在一起,这样可以在路上聊天。但是,在选座位时,你们却发现,已经买不到连续的座位了。于是,你们只好换了一趟车。这样一来,你们需要改变出行时间,而且这趟车就空置了三个座位。原创 2022-09-21 22:27:48 · 548 阅读 · 0 评论 -
Day745.如何应对变慢的Redis② -Redis 核心技术与实战
从文件系统和操作系统两个维度,介绍了应对 Redis 变慢的方法。为了方便你应用,我给你梳理了一个包含 9 个检查点的Checklist,希望你在遇到 Redis 性能变慢时,按照这些步骤逐一检查,高效地解决问题。获取 Redis 实例在当前环境下的基线性能。是否用了慢查询命令?如果是的话,就使用其他命令替代慢查询命令,或者把聚合计算命令放在客户端做。是否对过期 key 设置了相同的过期时间?对于批量删除的 key,可以在每个 key 的过期时间上加一个随机数,避免同时删除。是否存在 bigkey。原创 2022-09-20 22:08:07 · 233 阅读 · 0 评论 -
Day744.如何应对变慢的Redis① -Redis 核心技术与实战
判断 Redis 变慢的方法,一个是看响应延迟,一个是看基线性能。从慢查询命令开始排查,并且根据业务需求替换慢查询命令;排查过期 key 的时间设置,并根据实际使用需求,设置不同的过期时间。性能诊断通常是一件困难的事,所以我们一定不能毫无目标地“乱找”。在 Redis 中,还有哪些其他命令可以代替 KEYS 命令,实现同样的功能呢?这些命令的复杂度会导致 Redis 变慢吗?如果想要获取整个实例的所有key,建议使用SCAN命令代替。客户端通过执行可以得到一批key以及下一个游标。原创 2022-09-19 22:29:24 · 263 阅读 · 2 评论 -
Day743.CPU结构影响Redis的性能问题 -Redis 核心技术与实战
学习了CPU 架构对 Redis 性能的影响。首先了解了目前主流的多核 CPU 架构,以及NUMA 架构。在多核 CPU 架构下,Redis 如果在不同的核上运行,就需要频繁地进行上下文切换,这个过程会增加 Redis 的执行时间,客户端也会观察到较高的尾延迟了。所以,建议在 Redis 运行时,把实例和某个核绑定,这样,就能重复利用核上的 L1、L2 缓存,可以降低响应延迟。为了提升 Redis 的网络性能,有时还会把网络中断处理程序和 CPU 核绑定。在这种情况下,如果服务器使用的是。原创 2022-09-18 20:28:54 · 989 阅读 · 0 评论 -
Day742.Redis阻塞主线程的问题 -Redis 核心技术与实战
Redis 实例运行时的 4 大类交互对象客户端磁盘主从库实例切片集群实例基于这 4 大类交互对象,梳理了会导致Redis 性能受损的 5 大阻塞点集合全量查询聚合操作bigkey 删除清空数据库AOF 日志同步写从库加载 RDB 文件在这 5 大阻塞点中,bigkey 删除、清空数据库、AOF 日志同步写不属于关键路径操作,可以使用异步子线程机制来完成。Redis 在运行时会创建三个子线程,主线程会通过一个任务队列和三个子线程进行交互。原创 2022-09-17 19:46:11 · 502 阅读 · 1 评论 -
Day741.Redis消息队列 -Redis 核心技术与实战
消息保序、重复消息处理和消息可靠性保证,这三大需求可以进一步转换为对消息队列的三大要求:消息数据有序存取,消息数据具有全局唯一编号,以及消息数据在消费完成后被删除。一张表格,汇总了用 List 和 Streams 实现消息队列的特点和区别。当然,在实践的过程中,也可以根据新的积累,进一步补充和完善这张表。其实,关于 Redis 是否适合做消息队列,业界一直是有争论的。原创 2022-09-17 00:58:22 · 520 阅读 · 2 评论 -
Day740.如何保存时间序列数据 -Redis 核心技术与实战
点查询,根据一个时间戳,查询相应时间的数据;范围查询,查询起始和截止时间戳范围内的数据;聚合计算,针对起始和截止时间戳范围内的所有数据进行计算,例如求最大 / 最小值,求均值等。关于快速写入的要求,Redis 的高性能写特性足以应对了;而针对多样化的查询需求,Redis 提供了两种方案。第一种方案是,组合使用 Redis 内置的 Hash 和 Sorted Set 类型,把数据同时保存在 Hash 集合和 Sorted Set 集合中。原创 2022-09-15 22:47:47 · 494 阅读 · 0 评论 -
Day739.GEO经纬度数据结构&自定义数据结构 -Redis 核心技术与实战
为了实现自定义数据类型,首先,需要了解 Redis 的基本对象结构,因为 Redis 键值对中的每一个值都是用 RedisObject 保存的。之前说过,RedisObject 包括元数据和指针。其中,元数据的一个功能就是用来区分不同的数据类型,指针用来指向具体的数据类型的值。所以,要想开发新数据类型,就先来了解下 RedisObject 的元数据和指针。其中,NewTypeNode 结构就是我们自定义的新类型的底层结构。一个是 Long 类型的 value 值,用来保存实际数据;原创 2022-09-14 21:45:34 · 819 阅读 · 0 评论 -
Day738.亿个keys数据统计方案 -Redis 核心技术与实战
结合统计新增用户数和留存用户数、最新评论列表、用户签到数以及网页独立访客量这 4 种典型场景,学习了集合类型的 4 种统计模式,分别是聚合统计、排序统计、二值状态统计和基数统计。Set、Sorted Set、Hash、List、Bitmap、HyperLogLog 的支持情况和优缺点汇总在了下面的表格里。可以看到,Set 和 Sorted Set 都支持多种聚合统计,不过,对于差集计算来说,只有 Set 支持。Bitmap 也能做多个 Bitmap 间的聚合计算,包括与、或和异或操作。原创 2022-09-13 21:51:02 · 326 阅读 · 0 评论 -
Day737.String数据结构内存空间消耗问题 -Redis 核心技术与实战
打破了对 String 的认知误区,以前,认为 String 是“万金油”,什么场合都适用,但是,在保存的键值对本身占用的内存空间不大时(例如这节课里提到的的图片 ID 和图片存储对象 ID),String 类型的元数据开销就占据主导了,这里面包括了 RedisObject 结构、SDS 结构、dictEntry 结构的内存开销。针对这种情况,可以使用压缩列表保存数据。原创 2022-09-12 20:24:57 · 370 阅读 · 0 评论