【Redis5源码学习】浅析redis命令之restore篇

2019-10-08
阅读 4 分钟
4.4k
Grape 命令语法 命令含义:反序列化给定的序列化值,并将它和给定的 key 关联。 命令格式: {代码...} 命令实战 {代码...} 返回值 如果反序列化成功那么返回 OK ,否则返回一个错误。 源码分析 源码分析部分我们分为几个部分来讲解。 参数处理 {代码...} 在上边我们提到了restore命令格式,我们可以看到,在第四个参数开...

【Redis5源码学习】浅析redis命令之rename篇

2019-10-04
阅读 3 分钟
2.9k
baiyan 命令语法 命令含义:将 key改名为newkey命令格式: {代码...} 命令实战: {代码...} 返回值: 改名成功时提示 OK ,失败时候返回一个错误 源码分析 主要流程 rename命令的处理函数是renameCommand(): {代码...} renameCommand()函数调用了底层通用重命名函数: {代码...} 我们首先整理一下这个命令的思路,如果让...

【Redis5源码学习】浅析redis命令之persist篇

2019-10-03
阅读 4 分钟
2.3k
命令含义:移除给定key的生存时间,将这个 key 从『易失的』(带生存时间 key )转换成『持久的』(一个不带生存时间、永不过期的 key )。命令格式:

【Redis5源码学习】浅析redis命令之randomkey篇

2019-10-01
阅读 4 分钟
3.8k
baiyan 命令语法 命令含义:从当前选定数据库随机返回一个key命令格式: {代码...} 命令实战: {代码...} 返回值: 随机的键;如果数据库为空则返回nil 源码分析 主体流程 keys命令对应的处理函数是randomKeyCommand(): {代码...} 随机键生成以及过期判断 randomKeyCommand()调用了dbRandomKey()函数来真正生成一个随机...

【Redis5源码学习】浅析redis命令之object篇

2019-09-27
阅读 5 分钟
2.1k
baiyan 命令使用 命令含义:查看指定key的一些信息,一般用于调试或查看内部编码使用命令格式: {代码...} OBJECT有4个可选的子命令subcommand: OBJECT REFCOUNT:查看当前键的引用计数 OBJECT ENCODING:查看当前键的编码 OBJECT IDLETIME:查看当前键的空转时间 OBJECT FREQ:查看当前键最近访问频率的对数 OBJECT HE...

【Redis5源码学习】浅析redis命令之migrate篇

2019-09-27
阅读 10 分钟
2.5k
命令含义:将 key 原子性地从当前实例传送到目标实例的指定数据库上,一旦传送成功, key 保证会出现在目标实例上,而当前实例上的 key 会被删除命令格式:

【Redis5源码学习】浅析redis命令之move篇

2019-09-26
阅读 8 分钟
2.4k
命令含义:将当前数据库的 key 移动到给定的数据库 db 当中。命令注释:如果当前数据库(源数据库)和给定数据库(目标数据库)有相同名字的给定 key ,或者 key 不存在于当前数据库,那么 MOVE 没有任何效果。因此,也可以利用这一特性,将 MOVE 当作锁(locking)原语(primitive)。命令格式:

【Redis5源码学习】浅析redis命令之expire篇

2019-09-22
阅读 5 分钟
3.1k
Grape 命令语法 命令含义:为给定 key 设置生存时间,当 key 过期时(生存时间为 0 ),它会被自动删除。命令格式: {代码...} 命令实战: {代码...} 返回值: 设置成功返回 1 。当 key 不存在或者不能为 key 设置生存时间时(比如在低于 2.1.3 版本的 Redis 中你尝试更新 key 的生存时间),返回 0 。 源码分析: expire对应...

【Redis5源码学习】浅析redis命令之keys篇

2019-09-22
阅读 7 分钟
3.4k
baiyan 命令语法 命令含义:查找并返回所有符合给定模式 pattern 的 key 命令格式: {代码...} 命令实战: {代码...} 返回值: 根据pattern匹配后的所有键的集合 源码分析 keys命令对应的处理函数是keysCommand(): {代码...} 由于我们使用了keys *命令,需要返回所有键的集合。我们首先观察这段代码,它会使用一个安全...

【Redis5源码学习】浅析redis命令之exists篇

2019-09-21
阅读 4 分钟
3.3k
baiyan 命令语法 命令含义:判断键是否存在。如果过期则不存在,不过期则存在命令格式: {代码...} 命令实战: {代码...} 返回值: 存在键的数量 源码分析 exists命令对应的处理函数是existsCommand(): {代码...} 同样地,我们使用gdb -p来观察exists命令的执行过程,gdb的过程这里不再赘述。我们在existsCommand处打一...

【Redis5源码学习】浅析redis命令之dump篇

2019-09-20
阅读 3 分钟
5.3k
DUMP key序列化给定 key ,并返回被序列化的值,使用 RESTORE 命令可以将这个值反序列化为 Redis 键。序列化生成的值有以下几个特点:

【Redis5源码学习】浅析redis命令之del篇

2019-09-19
阅读 5 分钟
3.9k
baiyan 命令语法 命令含义:删除一个键所对应的值命令格式: {代码...} 命令实战: {代码...} 返回值:被删除 key 的数量 源码分析 首先我们开启一个redis客户端,使用gdb -p redis-server的端口。由于del命令对应的处理函数是delCommand(),所以在delCommand处打一个断点,然后在redis客户端中执行以下几个命令: {代码...

【业务学习】关于MySQL order by limit 走错索引的探讨

2019-09-16
阅读 2 分钟
6.6k
Grape 描述 今天在跑脚本的时候发现了几条慢查询,根据之前的经验实属不应该,后来经过查找资料和分析出来结果,在这里简单记录一下。 首先,我的sql是这个样子: {代码...} 索引是下边这个样子: {代码...} 按照我之前的理解这条sql是可以走这个索引的,但是他没有,他选择了主键索引。 分析 看到这是个慢查询,我起手...

【Redis5源码学习】浅析redis命令执行的生命周期

2019-09-15
阅读 13 分钟
2.4k
首先看一张我们非常熟悉的redis命令执行图:那么思考这样一个问题,当我们连接了redis服务端之后,然后输入并执行某条redis命令:如set key1 value1。这条命令究竟是如何被发送到redis服务端的,redis服务端又是如何解析,并作出相应处理,并返回执行成功的呢?

【业务学习】2019-05-09 http1.1&2.0的基本原理

2019-09-01
阅读 4 分钟
2.7k
我们目前用到最多的是http1.x协议,header和body我们都不陌生,那么startline是什么呢?startline是我们所说的request_line或status_line,也就是GET /HTTP/1.1或者HTTP/1.1 200 OK这种字段。在叙述http的各种工作方式之前,我们先熟悉一下TCP/IP模型:

【Redis5源码学习】浅析redis中的IO多路复用与事件机制

2019-09-01
阅读 14 分钟
7.3k
读这篇文章之前请先阅读:浅析服务器并发IO性能提升之路—从网络编程基础到epoll,以更好的理解本文的内容,谢谢。我们知道,我们在使用redis的时候,通过客户端发送一个get命令,就能够得到redis服务端返回的数据。redis是基于传统的C/S架构实现的。它通过监听一个TCP端口(6379)的方式来接收来自客户端的连接,从而进...

【业务学习】浅析服务器并发IO性能提升之路 — 从网络编程基础到epoll

2019-08-26
阅读 10 分钟
3.7k
我们常常使用HTTP协议来传输各种格式的数据,其实HTTP这个应用层协议的底层,是基于传输层TCP协议来实现的。TCP协议仅仅把这些数据当做一串无意义的数据流来看待。所以,我们可以说:客户端与服务器通过在建立的连接上发送字节流来进行通信。这种C/S架构的通信机制,需要标识通信双方的网络地址和端口号信息。对于客户端...

【业务学习】初识Kafka

2019-08-15
阅读 4 分钟
1.7k
这几天简单学习了一下Kafka,看了一些书,也查了一些资料,结合这些,我简单总结了一下Kafka的一些基础知识,以此作记录~老规矩,抛出我们这篇文章的三个问题:

【PHP7源码学习】2019-04-25 PHP生命周期浅析

2019-08-10
阅读 5 分钟
2.4k
今天我们来看下PHP的生命周期,我们都知道PHP生命周期有五个步骤,那么在源码层级是怎么去实现PHP生命周期呢?首先,我们抛出本文的几个问题:

【Redis5源码学习】2019-04-19 字典dict

2019-08-04
阅读 9 分钟
2.1k
hash:数据量小的时候使用ziplist,量大时使用dict zset:数据量小的时候使用ziplist,数据量大的时候使用skiplist + dict

【PHP7源码学习】剖析PHP数组的有序性

2019-08-03
阅读 4 分钟
4.8k
在 PHP7中,我们往数组中插入元素的顺序,就决定了我们数组遍历元素的顺序。可以说,PHP7中的数组是有序的。这个有序就是指元素插入数组时的顺序,与遍历时顺序的一致性。为了直观地让大家了解到PHP7数组的有序性,请看下面一段PHP代码:

【Redis5源码学习】2019-04-18 整数集合intset

2019-08-01
阅读 7 分钟
1.7k
intset是Redis集合的底层实现之一,当添加的所有数据都是整数时,会使用intset;否则使用dict。特别的,当遇到添加数据为字符串,即不能表示为整数时,Redis 会把数据结构转换为 dict,即把 intset 中的数据全部搬迁到 dict。

【Redis5源码学习】2019-04-17 压缩列表ziplist

2019-07-29
阅读 4 分钟
4k
乍一看标题,我们可能还不知道ziplist是何许人也。但是如果我说list、hash、zset这几种数据结构,大家就很熟悉了。而ziplist就是这几种数据结构的底层实现之一:

【Redis5源码学习】2019-04-16 跳跃表skiplist

2019-07-29
阅读 4 分钟
2.4k
想象一下,给你一张草稿纸,一只笔,一个编辑器,你能立即实现一颗红黑树,或者AVL树出来吗? 很难吧,这需要时间,要考虑很多细节,要参考一堆算法与数据结构之类的树,还要参考网上的代码,相当麻烦。

【Redis5源码学习】2019-04-15 简单动态字符串SDS

2019-07-25
阅读 8 分钟
3.3k
今天我们正式进入redis5源码的学习。redis是一个由C语言编写、基于内存、单进程、可持久化的Key-Value型数据库,解决了磁盘存取速度慢的问题,大幅提升了数据访问速度,所以它常常被用作缓存。

【PHP7源码学习】2019-04-12 C语言函数调用的压栈

2019-07-19
阅读 4 分钟
1.9k
我们知道,在函数调用的过程中,需要先进行压栈,待函数运行结束后,再出栈,回到原始函数的调用位置处继续向下执行代码。那么我们举一个例子,来清晰地看一下C语言函数调用压栈的过程:

【Index】技术干货索引

2019-07-17
阅读 2 分钟
3.3k
此文用于分类汇总所有写过的文章,实时更新,欢迎收藏! 分布式系统遨游系列 【分布式系统遨游系列】分布式互斥与分布式锁 【分布式系统遨游系列】分布式经典架构 【分布式系统遨游系列】分布式事务 【分布式系统遨游系列】分布式资源调度 【分布式系统遨游系列】分布式通信 【分布式系统遨游系列】分布式计算 【分布式...

【PHP7源码学习】2019-04-10 FastCGI协议2

2019-07-17
阅读 11 分钟
2.4k
baiyan 全部视频:[链接] 引入 读这篇文章之前请先阅读【PHP源码学习】2019-04-09 FastCGI协议1 我们知道,客户端、nginx、PHP-FPM之间通信的方式如下: 那么,我们今天详细解释一下图中的FastCGI协议的部分。其实,最开始我们是使用CGI协议的,但是CGI程序的弊端十分明显,如需要新的进程进行数据处理,效率低下。FastC...

【PHP7源码学习】2019-04-09 FastCGI协议1

2019-07-15
阅读 13 分钟
2.5k
我们经常谈到,计算机网络有多种体系架构,如OSI七层模型、TCP/IP四层模型等等。那么,为什么要将计算机网络分成这么多层呢?而且,每一层都要加上其特有的头部(如TCP头部、IP头部等等)进行封装,这样设计的原因又何在?

【PHP7源码学习】2019-04-08 PHP中include的实现

2019-07-12
阅读 6 分钟
3.4k
baiyan 全部视频:[链接] 回顾while语法的实现 {代码...} 在上一篇笔记中我们知道,PHP中的while语法所对应的指令执行过程如下图所示: 那么现在回答一下上一篇文章结尾提出的问题:do-while是如何实现的呢? {代码...} 经过gdb调试,其最终的指令如下: 第一个ASSIGN对应$a = 1; 第二个ASSIGN对应$a = 0; 第三个JMPNZ对...