译 - Scalable Bloom Filters
《Scalable Bloom Filters》 这篇论文讲述了一种布隆过滤器的变体实现方式,通过将预设的误判率分配给多个子布隆过滤器来约束整体的一个误判率情况,并且可以通过新增子布隆过滤器来实现对存储元素数量的调节,以满足初始容量无法准确估计的情况,论文中详细介绍了在不同的误判率变化率以及布隆过滤器容量变化率的情况下,存储空间等的使用情况。目前了解到的,RedisBloom 和 TairBloom 都参考了这篇论文实现了各自的布隆过滤器。 摘要Bloom Filters provide space-efficient storage of sets at the cost of a probability of false positives on membership queries. The size of the filter must be defined a priori based on the number of elements to store and the desired false positive probability, being...
RedisModule剖析 - RedisBloom
RedisBloom 这个 Module 内集成了很多的小功能,其中主要包括:可扩展的布隆过滤器(BloomFilter),可扩展的布谷鸟过滤器(CuckooFilter),最小计数草图(Count-Min Sketch),近似百分位(T-Digest),头部K元素(TopK)等。 一、简介RedisBloom 是一款集成了众多功能的 RedisModule 模块,其主要包含了 BloomFilter (布隆过滤器) ,CuckooFilter (布谷鸟过滤器),Count-Min Sketch (最小计数草图),T-Digest (近似百分位) 以及 TopK 功能,其中很多功能都是依据 BloomFilter类 的相关功能来进行实现的,这里将会对它们的具体实现做一下深度的剖析。 官网:https://redisbloom.io/ GitHub 地址:https://github.com/RedisBloom/RedisBloom 命令文档地址:https://redis.io/docs/stack/bloom/ 支持功能: 可扩展的 BloomFilter (布隆过滤器)...
RedisModule剖析 - RedisIMS
RedisIMS 是一款支持了 If Modified Since(IMS) 模式的数据访问方案。If-Modified-Since 经常在 HTTP 访问过程被使用,通常是为了避免不断从服务器中拉取大量的重复的数据,以节省网络流量开销。将这种方式用作 Redis 中主要应该也是为了解决 大key 的问题,当前该模块仅支持 string 类型。 一、简介 GitHub 地址:https://github.com/Clement-Jean/RedisIMS 二、架构设计2.1、相关命令 redisims.get : 如果数据在指定时间之后被修改了,则返回实际存储的值,否则直接返回空; redisims.set : 更新特定 key 的 value 信息,然后更新对应的上次更新时间元信息; redisims.exists : 从元信息中查找对应的 key 是否有上次更新的时间记录; 2.2、存储模型该模块引入了一个元信息的 key 来存储操作 用户key 的上次的操作时间,特殊 key 的格式设计为: 数据名称 : MTIME ; 数据类型 : hash ; 数据成员...
RedisModule剖析 - RedLock
RedLock 是一款基于 RedisModule 实现的分布式锁模块,该模块提供了写/读锁的操作接口,相比于使用 Redis 的现有命令进行支持,这个模块的命令语义更明确,且有利于进行流量区分与筛选,在使用中能够很好的区分开其他流量与锁操作相关的流量。整体的模块实现比较简单,阅读相对比较容易。 一、简介 GitHub 地址:https://github.com/wujunwei/redlock/ 二、架构设计2.1、相关命令 slock.lock : 新增加一个写锁,可以指定该锁的过期时间; slock.unlock : 解锁之前的一个写锁,只有具有相同的客户端id的链接才可以解锁; slock.rlock : 新增加一个读锁,可以指定该锁的过期时间,多个客户端同时获取写锁时会影响该锁的读的引用计数; slock.runlock : 解锁之前的一个读锁,实际是减少对应锁的引用计数,当引用计数减少为0时,删除该key; slock.info : 获取锁的信息; 2.2、数据结构// RedLock结构体typedef struct slock { ...
译 - In Search of an Understandable Consensus Algorithm (Extended Version)
《In Search of an Understandable Consensus Algorithm (Extended Version)》 直译过来就是 《寻找可理解的共识算法(扩展版)》,这篇文章中详细介绍了 Raft 算法的设计初衷以及其主要的设计实现,这是一篇学习共识算法的必读的一片论文。 摘要Raft is a consensus algorithm for managing a replicated log. It produces a result equivalent to (multi-)Paxos, and it is as efficient as Paxos, but its structure is different from Paxos; this makes Raft more understandable than Paxos and also provides a better foundation for building practical systems. In order to enhance...
RedisModule剖析 - SmartCache
SmartCache 是一款基于 RedisModule 实现的数据缓存模块,目前仅支持与 MySQL 进行数据缓存交互。在客户端访问数据的时候,如果该数据不存在于 Redis 中,则 Redis 会向配置的 MySQL 发起数据请求,将数据缓存到本地,并设置一定的过期时间,之后将缓存的数据发送给客户端,从而实现了 Read-Through Cache 这种缓存模式。缓存的数据经过格式化处理(格式化方式比较简单,参考下文),因此客户端读取到访问数据后还需要进行额外的转换解析。 一、简介 GitHub 地址:https://github.com/fcerbell/redismodule-smartcache/ 二、架构设计2.1、相关命令 scache.create : 创建一个新的缓存信息,通过指定的 mysql 地址信息,该缓存维护一个与mysql的连接信息; scache.list : 遍历出所有创建的缓存信息(返回缓存信息标示); scache.info : 获取指定的缓存信息(缓存信息使用链表存储,数据量较多时访问可能有性能瓶颈); scache.test :...
GitHub黑话/简写大全
使用 GitHub 的过程中经常会遇到一些英文的简写,这些简写能够很好的简略高效的表达自己的想法,并且随着广泛的使用已经得到了大家的共识,这里将会介绍一些常用的英文简写。 一、黑话/简写集 PR : 全称为 Pull Request ,合并请求; CR : 全称为 Code Review ,代码审查; LGTM : 全称为 Looks Good To Me ,我觉得没有问题; WIP : 全称为 Work In Progress ,进展中; AFAIK : 全称为 As Far As I Know ,据我所知; AFAICT : 全称为 As Far As I Can Tell ,据我所知; TBH : 全称为 To Be Honest , 老实说; ACK : 全称为 acknowledgement ,接受/同意; FYI : 全称为 For Your Information ,仅供参考; PTAL : 全称为 Please Take A Look ,请看一看; SGTM : 全称为 Sounds Good To Me ,我觉得没有问题; IMO :...
iTerm2配置rz/sz上传下载文件
一、iTerm2的Triggers功能关于iTerm2的 Triggers 功能,官方的介绍是: A trigger is an action that is performed when text matching some regular expression is received in a terminal session. 即:触发器是在终端会话中收到与某个正则表达式匹配的文本时执行的动作。 二、配置rs/zs2.1、一键脚本curl -sSLf https://git.io/bugwz-sh-iterm2-rzsz | sh 该脚本作用如下: 使用指令 brew install lrzsz 安装 lrzsz 软件; 下载 iterm2-send-zmodem.sh 和 iterm2-recv-zmodem.sh 到 /usr/local/bin/ 目录; 提示在 iTerm2 中进行后续的操作步骤; 2.2、单独操作步骤 安装lrzsz: brew install...
Hamburg - 抓包/耗时分析工具
Hamburg是一款用Go实现的抓包/耗时分析的工具,项目地址为 https://github.com/bugwz/hamburg。该工具的设计思想以及实现逻辑基本参照tcpkit。 一、功能实现 抓包/拆包:使用 gopacket...
Keepalived的高可用基石 - VRRP协议
一、背景路由实现了不同子网之间的数据通信,目前比较常用的路由配置方法大概分为两种:动态路由(利用RIP、OSPF进行动态学习)和静态路由(对终端设备静态配置路由)。动态路由可以通过学习的方式获取路由表,避免了静态路由需要手动配置以及后续变更的繁琐,但同时需要额外的占用线路带宽和CPU的处理时间。VRRP技术是在静态路由上用于在目标机器不可达之后的路由能够自动变更的一种实现手段。 二、VRRP2.1、简介VRRP(Virtual Router Redundancy Protocol),即虚拟路由冗余协议,它是为了避免路由器出现单点故障的一种容错协议。VRRP协议的实现有VRRPv2和VRRPv3两个版本,VRRPv2基于IPv4,VRRPv3基于IPv6。相关RFC文件为:RFC2338 - Virtual Router Redundancy Protocol, RFC3768 - Virtual Router Redundancy Protocol (VRRP), RFC5798 - Virtual Router Redundancy Protocol (VRRP)...