
Redis系列
文章平均质量分 89
大树~~
哦
展开
-
10、Redis-位图(Bitmap)与计数位图(Counting Bitmap)以及布隆过滤器
位图是一种高效的二进制数据结构,通过使用位数组来表示数据集合中的元素是否存在。计数位图是位图的一种扩展,能够记录元素的出现次数。布隆过滤器则通过多个哈希函数和位图实现高效的集合成员查询。位图、计数位图和布隆过滤器在存储和查询方面具有极高的空间效率和查询速度,适用于快速查找、去重、计数和集合操作等场景。通过本文的详细介绍和图示解释,读者可以深入理解这些数据结构和它们在 Redis 中的实际应用。希望本文能帮助读者在实际项目中更好地应用这些高效的数据结构。原创 2024-07-08 07:34:25 · 1173 阅读 · 0 评论 -
9、Redis 高级数据结构 HyperLogLog 和事务
HyperLogLog 和事务是 Redis 中两个重要的高级功能。HyperLogLog 提供了高效的基数估计算法,适用于大数据场景的去重统计。Redis 事务提供了简单的原子性操作,适用于需要保证数据一致性的场景。通过 Redis 7.0 的优化和新功能,Redis 的性能和扩展性进一步提升,适用于更多复杂的应用场景。原创 2024-07-07 17:53:17 · 1001 阅读 · 0 评论 -
8、Redis 的线程模型、I/O 模型和多线程
Redis 基于 Reactor 模式开发了网络事件处理器 - 文件事件处理器(file event handler,简称 FEH)。该处理器是单线程的,所以 Redis 设计为单线程模型。通过 I/O 多路复用同时监听多个 socket,根据 socket 当前执行的事件选择对应的事件处理器。当被监听的 socket 准备好执行 accept、read、write、close 等操作时,FEH 调用 socket 关联的事件处理器处理事件。原创 2024-07-07 17:47:43 · 1254 阅读 · 0 评论 -
7、Redis 队列与 Stream
Stream 是 Redis 5.0 引入的一种新的数据结构,类似于 Kafka 的设计。它是一个强大的支持多播的可持久化消息队列,适用于实时数据处理和消息传递。基本结构Stream 由消息链表组成,每个消息都有一个唯一的 ID 和对应的内容。消息 ID 是由时间戳和序号组成的,例如,表示在时间戳时生成的第 5 条消息。每个 Stream 在 Redis 中被存储为一个键值对,其中键是 Stream 的名称,值是消息链表。持久化。原创 2024-07-07 17:36:06 · 1112 阅读 · 1 评论 -
6、Redis系统-数据结构-07-QuickList
在 Redis 中,快速列表通过结合双向链表和压缩列表的优点,实现了高效的存储和操作,适用于需要频繁插入、删除和查找的场景。填充因子越小,每个节点包含的元素越少,插入和删除操作的性能越高,但内存利用率可能会下降。压缩深度越大,压缩列表节点之间的数据压缩程度越高,内存利用率越高,但解压缩操作的开销可能会增加;压缩深度越小,压缩列表节点之间的数据压缩程度越低,解压缩操作的开销较小,但内存利用率可能会下降。查找元素时,通过遍历快速列表节点,查找包含目标元素的压缩列表,然后在压缩列表中查找目标元素。原创 2024-07-07 15:59:01 · 970 阅读 · 0 评论 -
6、Redis系统-数据结构-06-跳表
在 Redis 中,跳表通过高效的多级链表结构,实现了有序集合的快速插入、删除和查询操作,适用于需要有序数据存储的场景。跳表通过多级链表的形式实现,每一级链表都跳过一些元素,从而在查询时能够快速跳过不必要的元素。跳表的每个节点包含一个或多个前进指针,这些前进指针指向不同级别的节点,使得跳表具有高效的查询性能。删除节点时,通过查找操作确定节点位置,然后在每一级链表中移除该节点,并调整相关节点的前进指针和跨度。插入新节点时,首先确定新节点的级别,然后在每一级链表中找到插入位置,将新节点插入到相应的位置。原创 2024-07-07 15:50:59 · 920 阅读 · 0 评论 -
6、Redis系统-数据结构-05-整数
通过上述解析,我们可以更好地理解整数集合的设计思想和实现原理,从而在实际开发中更好地利用整数集合提供的优势。在 Redis 中,整数集合通过紧凑的内存布局和动态升级机制,实现了高效的整数存储和操作。整数集合通过紧凑的内存布局和升级机制,实现了高效的整数存储和操作。如果需要升级,先进行升级操作,然后将新元素插入到正确的位置,维持数组的有序性。以下是一些使用 Redis 整数集合的示例,展示了如何利用整数集合进行数据的存储和操作。类型,并将转换后的元素放置到正确的位置上,并且需要维持底层数组的有序性不变。原创 2024-07-07 15:46:38 · 1087 阅读 · 1 评论 -
6、Redis系统-数据结构-04-Hash
table:指向哈希表节点指针数组的指针。size:哈希表的大小,即哈希表数组的长度。sizemask:哈希表大小掩码,用于计算键的索引值。used:哈希表中已使用的节点数量。rehashidx:rehash 的索引,表示当前进行到哪个位置,-1 表示没有进行 rehash。type:指向哈希表类型特定函数的指针,用于实现不同类型的哈希表。privdata:指向私有数据的指针,可以用于存储与哈希表相关的额外信息。原创 2024-07-07 15:36:02 · 3408 阅读 · 0 评论 -
6、Redis系统-数据结构-03-压缩列表
由于压缩列表需要进行空间扩展操作,这就需要重新分配内存,因此连锁更新一旦发生,会导致压缩列表占用的内存空间多次重新分配,直接影响到压缩列表的访问性能。因此,虽然压缩列表紧凑型的内存布局能节省内存开销,但是如果保存的元素数量增加,或元素变大,会导致内存重新分配,最糟糕的是会引发「连锁更新」的问题。因此,虽然压缩列表紧凑型的内存布局能节省内存开销,但是如果保存的元素数量增加,或元素变大,会导致内存重新分配,最糟糕的是会引发「连锁更新」的问题。而当新插入的元素较大时,可能会导致后续元素的。原创 2024-07-07 15:09:06 · 2513 阅读 · 0 评论 -
6、Redis系统-数据结构-02-链表
通过上述解析,我们可以更好地理解 List 的设计思想和实现原理,从而在实际开发中更好地利用 List 提供的优势。在 Redis 中,List 通过压缩列表和快速列表的结合,实现了高效的存储和操作,适用于多种场景如队列、栈和消息列表等。快速列表结合了压缩列表和双向链表的优点,是一种用于实现列表(List)类型的高效数据结构。每个快速列表节点(quicklistNode)包含一个压缩列表,实现了数据的紧凑存储和高效操作。然而,由于压缩列表的连续内存结构,在插入和删除操作时需要移动大量数据,时间复杂度较高。原创 2024-07-07 10:26:11 · 648 阅读 · 0 评论 -
6、Redis系统-数据结构-01-String
Redis 是一个高性能的内存数据库,其关键在于其数据结构的设计。Redis 数据结构是指底层实现 Redis 键值对中值的数据类型的方式。String(字符串)对象:最基本的数据类型,可以存储任意类型的数据,包括字符串、整数、浮点数等。List(列表)对象:一个链表,可以按顺序存储多个字符串,支持从两端进行操作。Hash(哈希)对象:用于存储键值对集合,类似于一个小型的键值对数据库。Set(集合)对象:一个无序集合,自动去重,支持集合操作如交集、并集等。Zset(有序集合)对象。原创 2024-07-07 10:06:36 · 1248 阅读 · 0 评论 -
5、Redis 缓存设计相关知识点
以上内容详细介绍了Redis缓存设计相关的多个知识点,包括多级缓存架构、缓存穿透、缓存击穿、缓存雪崩、热点缓存Key重建优化、缓存与数据库双写不一致以及开发规范与性能优化。通过合理设计和优化,可以有效提高系统性能,确保系统的稳定性和高可用性。这些知识点对于理解和使用Redis缓存具有重要意义,能够帮助开发者在实际项目中更好地利用Redis缓存,提高系统的响应速度和稳定性。原创 2024-07-04 09:18:05 · 1081 阅读 · 0 评论 -
4、Redis分布式锁原理解析
方法用于释放已经持有的锁,确保其他线程可以获取锁。Redisson 通过 Lua 脚本原子性地执行解锁操作,以保证解锁过程的安全性和一致性。方法在获取锁失败时不会一直阻塞,而是根据指定的等待时间和租约时间进行尝试,并返回是否成功获取锁。在等待锁释放期间,Redisson 会进入一个循环,不断尝试重新获取锁。在等待锁释放期间,Redisson 会进入一个循环,不断尝试重新获取锁。如果初次尝试获取锁失败,Redisson 会订阅锁的释放通知。如果初次尝试获取锁失败,Redisson 会订阅锁的释放通知。原创 2024-06-30 23:16:15 · 1329 阅读 · 0 评论 -
3、Redis集群原理分析
Redis Cluster 将所有数据划分为 16384 个槽位(slots),每个槽位由一个或多个节点负责管理。Redis 集群通过 CRC16 哈希算法来计算每个 key 的哈希值,并对 16384 取模以确定该 key 应该存储在哪个槽位上。具体算法为。当客户端连接到 Redis 集群时,会获取并缓存槽位的配置信息,从而能够快速地定位到存储某个 key 的目标节点。原创 2024-06-30 09:13:59 · 881 阅读 · 0 评论 -
2、Redis持久化与高可用架构
RDB 快照(Snapshot)基本概念:RDB(Redis DataBase)快照是将 Redis 内存中的数据在某个时间点保存到磁盘中的一种持久化方式,默认保存到dump.rdb文件中。通过 RDB 快照,可以在服务器故障时恢复到某个时间点的数据状态。它在满足指定条件时自动保存,也可以手动执行save或bgsave命令生成快照。自动保存:Redis 可以配置在特定条件下自动生成 RDB 快照。例如,配置,表示在 60 秒内有 1000 个键发生变化时,自动保存一次数据集。可以通过注释所有save。原创 2024-06-27 23:11:21 · 1269 阅读 · 0 评论 -
1.2-Redis系列-Reactor 线程模型详解
Reactor 模型通过事件驱动和非阻塞 I/O 机制,高效地处理大量并发连接。其高效性体现在事件驱动机制、非阻塞 I/O、线程池以及 I/O 和业务逻辑的解耦上。理解 Reactor 模型的工作原理和高效性,有助于在高性能网络编程中充分发挥其优势。原创 2024-06-25 22:33:29 · 1460 阅读 · 1 评论 -
1.1、Redis系列-Epoll 的高效工作流程
创建 epoll 实例创建一个高效的 epoll 实例,用于后续所有操作。注册文件描述符epoll_ctl将文件描述符添加到 epoll 实例中,并指定感兴趣的事件(如读、写事件),通过事件驱动模式避免无效轮询。等待事件epoll_wait高效等待事件发生,仅在有事件时返回,并且支持同时返回多个就绪事件。处理事件:批量处理就绪事件,减少系统调用次数,通过事件分发机制快速定位并处理具体事件。原创 2024-06-25 22:31:42 · 763 阅读 · 0 评论 -
1、Redis系列-Redis高性能原理详解
单线程架构:避免多线程复杂性和上下文切换开销。基于内存操作:提供了极高的读写速度。高效的I/O多路复用:使单线程也能处理大量并发请求。Reactor线程模型:通过事件驱动和非阻塞I/O提高I/O处理效率。简单高效的数据模型和命令:确保每个命令的执行效率。多种缓存淘汰策略:合理管理内存使用。优化的持久化机制:保证数据安全性且不影响性能。紧凑的数据编码:提高内存使用效率。轻量级通信协议:提升通信性能。主从复制与集群模式:实现高可用和高扩展性。原创 2024-06-25 22:29:39 · 1242 阅读 · 0 评论