
Redis
c-rain
你唯一所知,就是你一无所知
展开
-
PHP常驻内存下phpredis扩展的一个BUG
前言本文主要是一次线上异常排查内容。排查2020 03-24 23:14分tw挂掉后,英语偶线现取不到数据问题:2020 03-24 23:14 tw挂了一台,30秒没连接上redis;有一定机率从redis拿不到数据偶发;没有错误,拿不到数据;怀疑对象etcd配置问题; - 确认过相关配置(排除)twemproxy可能变更节点;-查看过对应日志(排除)经过排查twemp...原创 2020-03-26 14:23:10 · 1180 阅读 · 0 评论 -
【协议分析】rpcx网络协议分析之kcp数据传输
前言:KCP是一个可靠的协议,它的延迟率比起tcp低很多。在游戏和视频推流领域广泛使用。在TCP是为流量设计的(每秒内可以传输多少KB的数据),讲究的是充分利用带宽。而 KCP是为流速设计的(单个数据包从一端发送到一端需要多少时间),以10%-20%带宽浪费的代价换取了比 TCP快30%-40%的传输速度。文章中内容解析了整个kcp的传输数据数据包组成。系统: mac OS 1...原创 2020-03-24 20:52:43 · 2817 阅读 · 0 评论 -
【Codis源码】codis-proxy处理流程下(三)
前言:接着上一章讲,上一章讲了loopReader。这一块会延续上一章节继续往下讲。golang版本: go1.13.5 darwin/amd64codis版本:codis 3.2调试工具:dlvcodis源码:https://github.com/CodisLabs/codis/(一)proxy处理流程上一章中讲proxy流程时只讲了session连接部分,这一章把完整的流程串...原创 2020-03-14 22:31:27 · 677 阅读 · 0 评论 -
【Codis源码】codis-proxy处理流程上(二)
前言:客户端连接的 Redis 代理服务, 实现了 Redis 协议。代理部分极为关键,它负责转发请求,以及汇总数据结果。codis-proxy的处理流程比较长,本章节会先叙述一部分,比如说loopReader。剩下的下一个章节继续叙述。golang版本: go1.13.5 darwin/amd64codis版本:codis 3.2参考资料:RESP协议:https://redis....原创 2020-03-11 23:42:22 · 778 阅读 · 0 评论 -
【Codis源码】初识codis与Codis-FE源码(一)
前言:codis 是一个分布式的redis解决方案,对于上层业务来说,连接到Codis Proxy和连接原生的Redis Server没有显著区别。上层可以像使用单机的redis一样使用。Codis 底层会处理请求的转发, 不停机的数据迁移等工作, 所有后边的一切事情, 对于前面的客户端来说是透明的, 可以简单的认为后边连接的是一个内存无限大的 Redis 服务。codis是有golang +...原创 2020-03-09 23:22:34 · 828 阅读 · 0 评论 -
【Redis源码】bloomfilter布隆过滤器(十五)
前言:布隆过滤器有很多使用场景比如说反垃圾邮件,从数十亿的垃圾邮件列表中判断某邮件是否为垃圾。或者说解决缓存击穿问题。或者在一些去重场景中都可以使用到,例如推送新闻不重复。布隆过滤器是redis的一个插件功能,redis4.0之后提供了插件功能才正式登场。redis版本:redis4.0.0bloomfilter版本: v1.1.1参考资料:redis modulesAPI:http...原创 2020-03-09 14:21:00 · 950 阅读 · 1 评论 -
【Redis源码】集群之分布式cluster原理(十四)
前言:接着上一章开始讲,上一章我们讲到如果配置一个cluster,以及cluster的基础命令。以及初始化一个cluster的流程。本章继续讲一些cluster原理。版本:redis4.0.0(一)消息结构1.1 数据包类型以下是数据包的类型:#define CLUSTERMSG_TYPE_PING 0 /* Ping包类型 */#define CLUSTERMS...原创 2020-03-09 01:33:27 · 523 阅读 · 0 评论 -
【Redis源码】集群之分布式cluster建立集群关系(十三)
前言:redis在redis3.0版本之后推出redis cluster模式集群,redis cluster是官方提供的分布式解决方案。当一个redis节点挂了可以快速切到另一个节点中。当遇到单机内存、并发瓶颈时可以考虑使用redis cluster。集群的内容会比较长,这一章会分为两篇作为描述:《集群之分布式cluster建立集群关系》与《集群之分布式cluster原理》redis版本:...原创 2020-03-04 01:11:04 · 1643 阅读 · 0 评论 -
【Redis源码】集群之哨兵sentinel故障转移 (十二)
前言:各位看官大家好,这个主题内容比较长然后接着上一章就拆成了两个部分。那么我们接着上一章内容开始说。上一章中我们说到哨兵定时器sentinelTimer它们作用。sentinelTimer方法中执行哨兵模式中的任务。包括执行定期操作比如PING、分析主服务和从服务的INFO命令、故障转移等等。那么这一章我们就先从sentinelTimer开始说起。(一) 基本结构1.1 sentinelT...原创 2020-02-28 03:31:15 · 971 阅读 · 0 评论 -
【Redis源码】集群之哨兵sentinel初识(十一)
前言:说到哨兵之前,可以思考一个问题。为什么有哨兵机制?这一点其实可以从主从复制的优缺点作为考虑。主从复制其实有一个致命的弱点就是它是非高可用的,比如说当主节点出现故障时,那么此时我的写入就会出现问题,切换需要重新配,就无法做到高可用。此时其实就可以用到哨兵进制,哨兵自动发现故障,并通过选举算法重新选举新主完成转移和通知实现高可用。参考资料:https://redis.io/topic...原创 2020-02-27 02:50:29 · 464 阅读 · 0 评论 -
【Redis源码】集群之主从复制replication(十)
前言:说到主从大家应该都不陌生,也应该都清楚主从解决服务的哪些问题。单台服务器的支撑能力是有限的,为了提高我们的QPS或者说数据的容灾。主从服务则起到了相应的作用。不过主从复制也会有一些缺点,比如说“高可用问题”,“单服务器资源有限问题”。针对高可用问题我们后续解析redis集群的哨兵,针对单服务器问题,我们会解析redis Cluster分布式应用。redis版本: 4.0.0...原创 2020-02-23 21:12:43 · 575 阅读 · 0 评论 -
【Redis源码】ziplist压缩表(八)
前言:压缩表是一个连续内存空间的线性结构,元素之间紧挨着存储,没有任何空隙。redis为了节省空间,当使用zset和hash容器对象时再元素个数较少时采取了压缩表(ziplist)进行存储。redis版本:4.0.01.压缩表结构介绍压缩表构成如下:zlbytes :压缩表字节长度,类型uint32_t占用4个字节,需要存储此值才能调整整个...原创 2020-02-12 01:50:57 · 398 阅读 · 0 评论 -
【Redis源码】位图SETBIT、BITCOUNT(九)
前言:位图并不是一个特殊的数据结构,位图其实就是一个字符串,位图这种结构占用空间特别小。如果是数亿以上的用户如果存储活跃,如果是用key/value去存储每个节点都需要数G去存储,存储是很大问题。如果换做位图去存储则可以大大节约空间,不过适应于用户ID连续性的。除此之外也可以用作比如说点赞的存储。redis版本:4.0.0(一)命令解析 命令原形 ...原创 2020-02-14 00:34:13 · 813 阅读 · 0 评论 -
【Redis源码】字符串详解(七)
前言:学过C的人应该都知道C的字符串是以字节数组存在,然后以\0结尾。计算字符串的长度使用strlen函数,这个标准库函数的复杂程度是O(n)。它需要对字节数组进行扫描遍历计算长度。作为redis单线程的应用是这种形式是比较消耗性能的。Redis实现了字节的字符串叫sds(Simple Dynamic String),它是一个带着长度的信息的结构体,属于柔性字符串。版本:redis...原创 2020-02-08 14:44:32 · 466 阅读 · 2 评论 -
【Redis源码】发布与订阅(六)
redis版本:4.0.0(一)发布与订阅功能介绍:官方文档: https://redis.io/topics/pubsubRedis是一个快速稳定的发布/订阅消息传递系统。发布与订阅命令: 命令 备注 命令原形 PSUBSCRIBE 订阅一个或多个给定匹配模式的频道 ...原创 2020-02-06 00:03:40 · 433 阅读 · 0 评论 -
【Redis源码】详细的RDB和AOF持久化过程(五)
(一)分析RDB和AOF的优劣势:优劣势官方介绍:https://redis.io/topics/persistence持久化详细介绍:http://oldblog.antirez.com/post/redis-persistence-demystified.html1.RDB:RDB的优点:1)RDB是redis数据非常紧凑的单文件时间点表示。RDB文件非常适合备份...原创 2020-01-16 14:53:38 · 637 阅读 · 0 评论 -
【Redis源码】轻松看懂rdb文件(四)
前言:该篇内容为我对redis的学习记录,欢迎指正批评。redis版本:4.0.0、一.数据存储格式:二.查看rdb文件查看文件16进制编码#od -A x -t x1c -v dump.rdbRDB文件格式如下:0000000 52 45 44 49 53 30 30 30 38 fa 09 72...原创 2020-01-15 02:11:31 · 1200 阅读 · 1 评论 -
【Redis源码】dict字典学习(三)
前言:该篇内容为我对redis的学习记录,欢迎指正批评。redis版本:4.0.0一.redis 数据库流程结构二.结构解析typedef struct client { uint64_t id; /* 客户端唯一增量ID. */ int fd; /* 客户端socket fd. */ redi...原创 2020-01-14 15:50:39 · 344 阅读 · 0 评论 -
【Redis源码】Redis命令INCR、DECR、INCRBY、DECRBY学习(二)
前言:该篇内容为我对redis的学习记录,欢迎指正批评。文中只是放了部分调试内容,完整的可以根据流程图跟踪。redis版本:4.0.0调试工具:lldb一.redis incr命令调用流程DECR和INCR和类似只是一个是增加一个是减少。其余两个命令也大同小异;二.源码分析4个命令相应源码,t_string.c中:void incrCommand(...原创 2020-01-14 15:44:01 · 1384 阅读 · 0 评论 -
【Redis源码】Redis命令set学习(一)
前言:该篇内容为我对redis的学习记录,欢迎指正批评。文中只是放了部分调试内容,完整的可以根据流程图跟踪。redis版本:4.0.0调试工具:lldb一.redis set命令调用流程二.源码分析(1)源码解析服务端对命令的解析是绑定在server.c中的redisCommandTable全局参数中,redisCommandTable为一个结构体...原创 2020-01-12 10:25:40 · 734 阅读 · 0 评论