avatar
文章
135
标签
135
分类
17
首页
归档
标签
分类
友链
咕咕
搜索
首页
归档
标签
分类
友链

咕咕

Redis扩缩容演进史与奇思妙想
发表于2022-12-13|Redis演进史|Redis
Redis 的扩缩容方案在 RedisCluster 中发生了很多的改造与优化,其中主要包括对于 Slot 和 Keys 映射关系的优化,从最初的跳表,到基数树,再到最新的柔性数组的相关优化。同时 Redis 的非社区Cluster 模式下的扩缩容在业界在诞生了很多有意思的设计思路,比如 Codis 提供的同步/异步迁移方案,选择性复制以及旁路扩缩容的迁移方案等。这篇文章将简略的描述一下当前业界实现的 Redis 的扩缩容方案。 一、简介这里主要描述的是 Redis 的横向扩缩容。 二、Redis 扩缩容演进史2.1、映射关系存储结构演进由于我们需要能够高效的依据 Slot 来找到对应的 Keys 信息,从而实现数据的迁移,因此我们需要记录 Slot 和 Keys 的映射关系,Redis 也在不断的优化这种存储结构,从而在实现高效遍历的时候又能够节省存储所带来的内存开销。 2.1.1、SkipList 存储结构 版本范围:3.0.0 ~ 3.2.13(以下分析基于 3.2.13 版本) 设计特点: 使用一个全局结构体变量( server.cluster->sl...
Redis持久化演进史与奇思妙想
发表于2022-12-04|Redis演进史|Redis
目前 Redis 主要支持两种持久化的方式:RDB 和 AOF 。这两者在 Redis 的演进过程中也发生了很多有意思的变化。RDB 的数据格式也已经进行了十次版本迭代,AOF 从最初的 Rewrite 到 Redis 7.0.0 的 Multi-Part-AOF 也发生了很多的变化,这里将对每个版本进行详细的剖析,学习 Redis 的持久化演进历史。这篇文章主要借鉴于 Redis 持久化机制演进与百度智能云的实践 ,同时按照自己的理解绘制了一些示意图。 一、简介Redis 支持两种持久化的方式:RDB 和 AOF 。 二、Redis RDB 持久化演进史2.1、持久化的数据版本演进2.1.1、版本一 版本范围:2.0.0 ~ 2.2.15 (以下分析基于 2.2.15 版本) RDB版本号:0001 版本特点: 首次支持对五种数据类型数据的持久化; 持久化数据内容: 标记头尾信息; 多 DB 信息( REDIS_SELECTDB ); 过期时间属性(单位秒, REDIS_EXPIRETIME ); 不同的数据类型及编码: 数据类型 内存中编码类型 RDB...
译 - Bitcoin: A Peer-to-Peer Electronic Cash System
发表于2022-11-16|论文区块链比特币|比特币•区块链•论文
《Bitcoin: A Peer-to-Peer Electronic Cash System》 翻译过来是《 比特币:一种点对点的电子现金系统》 ,这篇文章是比特币的发明人中本聪于 2008 年发表的比特币白皮书。这篇文章介绍了比特币的设计背景,讲述了比特币的工作原理,是加密货币,区块链领域必读的一篇文章,其中讲述了很多巧妙的构思。作者翻译水平有限,翻译的语句可能会有一些出入,建议有能力的读者还是去阅读一下原文。 0、摘要A purely peer-to-peer version of electronic cash would allow online payments to be sent directly from one party to another without going through a financial institution. Digital signatures provide part of the solution, but the main benefits are lost if a trusted third party is s...
Redis相关库学习 - LibMR
发表于2022-10-22|Redis相关库|Redis•RedisLibrary•LibMR
LibMR 是一款适用于 Redis 集群的 Map Reduce (分发Redis命令并获取结果)的依赖库。它基于 libevent 的事件机制,通过使用多个线程池来分发异步任务,目前已经被 RedisTimeSeries 等模块使用。 一、简介 GitHub 地址:https://github.com/RedisGears/LibMR 二、架构设计2.1、相关命令由于该依赖库在编译时可以设置自定义的 modulename ,因此可以避免在不同模块中使用的冲突。 modulename.INNERCOMMUNICATION : 从其他分片中获取消息; modulename.HELLO : 获取当前实例的集群id,仅集群模式下才可以调用; modulename.REFRESHCLUSTER : 更新当前集群的拓扑信息 modulename.CLUSTERSET : 强制设置集群的拓扑信息,该信息只会更改该依赖库中记录的拓扑信息,并不会影响实际的 Redis 集群; modulename.CLUSTERSETFROMSHARD : 与 *.CLUSTERSET 命令类似,该命令为...
RedisModule剖析 - RedisProtobuf
发表于2022-10-07|RedisRedisModule|Redis•RedisModule•RedisProtobuf
RedisProtobuf 是一款支持 Protobuf (目前仅支持Version 3) 的 Redis 模块,从而支持了较高级的嵌套数据结构,其设计灵感来自于 RedisJSON。 一、简介 GitHub 地址:https://github.com/sewenew/redis-protobuf 二、架构设计2.1、依赖库 Protobuf : 仅支持 version 3 ; 2.2、相关命令 pb.type : 获取指定 key 的消息类型; pb.set : 设置指定 key 的消息类型的内容信息,支持新增与变更; pb.get : 获取指定 key 的消息内容,支持 binary 和 json 的返回格式; pb.clear : 清除指定 key 的消息内容,支持指定路径; pb.len : 获取指定 key 的消息长度,支持指定路径; pb.append : 给指定 key 的特定路径中追加数据,目标路径的类型可以为 string/array ; pb.del : 删除指定 key ,或者删除指定 key 中 array/map 中的 value...
RedisModule剖析 - RedisRope
发表于2022-10-04|RedisRedisModule|Redis•RedisModule•RedisRope
RedisRope 是一款可用于操作大型字符串数据(插入/拼接等变动)的 Redis 模块。它通过将一个独立的字符串拆分成多个Chunk中进行存储,从而实现了针对于大型字符串的多样写操作(插入/拼接等)的高效率,并通过引入 伸展树(Splay Tree) 的数据结构来保证数据读取的高效性。 一、简介 GitHub 地址:https://github.com/ekzhang/redis-rope 二、架构设计2.1、相关命令 rope.len : 获取特定 key 的长度; rope.get : 获取特定 key 指定索引处的字符; rope.getrange : 获取特定 key 指定范围内的字符串; rope.append : 给特定 key 追加字符串; rope.insert : 在特定 key 的指定索引处插入字符串; rope.delrange : 删除特定 key 指定范围内的字符串; rope.splice : 从源字符串中选出部分字符串并将其拼接到目标字符串中(高级操作); 2.2、数据结构// 自定义的 Module 数据类型pub va...
RedisModule剖析 - RedisIntervalSet
发表于2022-10-02|RedisRedisModule|Redis•RedisModule•RedisIntervalSet
RedisIntervalSet 是一款用于记录不同间隔集合(IntervalSet)的 Redis 模块,按照官方文档给出的示例,我们可以记录从学前班、中学到大学的不同阶段的信息,每个阶段都有一个最小和最大值的分数(这里含义为年龄),最后可以通过查询不同的分数(年龄)来查询对应的学习阶段,通过这种方式能够快速的得到对应数据值所在的区间信息,这种设计思路有些类似于 ZSet。 一、简介 GitHub 地址:https://github.com/danitseitlin/redis-interval-sets 二、架构设计 该模块使用 Rust 进行编写,依赖于 redismodule-rs 版本 0.26.0; 2.1、相关命令 iset.add : 在特定的 key 中增加一个间隔集合(IntervalSet),必须带有最小及最大分数,可同时指定多个; iset.del : 删除特定 key 或者删除其中的特定的间隔集合; iset.get : 获取特定 key 中的所有间隔集合或者指定的间隔集合; iset.score : 获取指定 key 中包含特定分数的集合列表; i...
Redis主从复制演进史与奇思妙想
发表于2022-10-01|Redis演进史|Redis
Redis 的主从复制模型从 Redis2.8 版本到 Redis7.0 经历了很多大的优化与改造,从最初版本的全量数据同步,到后续的 PSYNC 的增量数据同步,无盘数据传输方案,PSYNC2 的同源数据同步方案,无盘数据加载方案到当前的最新版本中的共享复制缓冲区的方案。同时社区中也诞生了一些奇妙的解决方案,例如基于AOF文件的增量同步等。这篇文章主要借鉴于 Redis 主从复制演进历程与百度实践 ,同时按照自己的理解绘制了一些示意图。 一、简介目前 Redis 支持两种主从数据同步方式:全量同步和增量同步。 二、Redis主从复制演进史2.1、SYNC方案 版本范围:1.3.6 ~ 2.6.17 (以下分析基于 2.6.17 版本) 方案特点: 支持全量数据同步; 持久化及传输流程: 调用 fork 生成子进程,并在子进程中将内存中的数据持久化到 rdb 文件中; 获取所有状态为 WAIT_BGSAVE_END 的从库,为其注册发送 rdb 数据的事件; 发送 rdb 数据完成后,将发送堆积的增量数据给从库; 交互流程: 主库: 接收从库的建连请求; 处理从库...
RedisModule剖析 - RedisTimer
发表于2022-09-29|RedisRedisModule|Redis•RedisModule•RedisTimer
RedisTimer 是一款基于 Redis 的时间事件来实现的计时器的模块,通过时间事件机制来实现延迟/循环执行对应的脚本(函数),由于该模块执行脚本(函数)的命令为 FCALL,因此要求Redis版本最低为7.0.0,该模块也支持数据的持久化,用于保证计时器的信息不丢失。 一、简介 GitHub 地址:https://github.com/tzongw/redis-timer 二、架构设计2.1、相关命令 timer.new : 创建一个新的计时器,会在指定的时间之后执行对应的脚本(函数),会直接覆盖同名的已经存在的计时器; timer.kill : 删除之前创建的计时器,并且删除对应的计时器key; timer.info : 查看特定的计时器的信息; 2.2、数据结构// 计时器的数据结构typedef struct TimerData { RedisModuleString *key; // 对应计时器key对象 RedisModuleString *function; // 需要执行的脚本 mstime_t i...
译 - Gorilla: A Fast, Scalable, In-Memory Time Series Database
发表于2022-09-24|论文数据库时序数据库|论文•Gorilla•时序数据库
《Gorilla: A Fast, Scalable, In-Memory Time Series Database》 这篇论文讲述了 Facebook 在存储时序数据模型时的一些实践,重点讲述了他们内部的一款内存型的时序数据库 Gorilla。论文中通过使用 Delta-Of-Delta 和 XOR 方式分别对时序数据的时间戳以及浮点数据进行压缩编码,极大的节省了时序数据的存储开销,这也成为了业界时序数据库主流的数据编码压缩方式。这篇论文是时序数据库领域必读的一篇文章。 摘要Large-scale internet services aim to remain highly available and responsive in the presence of unexpected failures. Providing this service often requires monitoring and analyzing tens of millions of measurements per second across a large number of...
1234…14
avatar
bugwz
持续学习,持续进步
文章
135
标签
135
分类
17
最新文章
Ceph 和 LinuxKernel 版本时间对照表
Ceph 和 LinuxKernel 版本时间对照表2025-11-08
CephFS Inode 编号的申请与释放
CephFS Inode 编号的申请与释放2025-08-09
Ceph Crimson 设计实现深入解析
Ceph Crimson 设计实现深入解析2025-06-01
3FS 集群部署笔记
3FS 集群部署笔记2025-05-23
Ceph Crimson 集群部署教程
Ceph Crimson 集群部署教程2025-01-12
分类
  • Redis17
    • RedisCluster1
    • RedisModule10
    • 异地多活1
    • 演进史3
    • 特性1
    • 相关库1
  • 论文10
标签
Docker TCL VPN FTP 收藏 NoSQL T-Digest 信号量 常用命令 比特币 rsync Ubuntu Google S2 Nginx Redhat RedisTimer hashlimit lsof LVS 内存分配器 JSP 布隆过滤器 Latex 分布式 Hook Windows Interrupt 负载均衡 Shadowsocks Redis 锁 Git RedisIMS 编程语言 GPFS Gorilla 进程 Hexo RedisProtobuf C#
归档
  • 十一月 2025 1
  • 八月 2025 1
  • 六月 2025 1
  • 五月 2025 1
  • 一月 2025 1
  • 十二月 2024 1
  • 十月 2024 1
  • 九月 2024 1
网站信息
文章数目 :
135
本站总字数 :
522k
© 2019 - 2025 By bugwz框架 Hexo 8.1.1|主题 Butterfly 5.5.3