【业务学习】简述ID生成器

2021-09-05
阅读 2 分钟
3.9k
大家好,好久不见,时隔一年终于又拾起了写博客这件事。在我们日常工作中,我们常需要用全局唯一ID作为数据库主键,或者用于生成订单id,用于生成商品ID等等。本篇主要介绍我们常见的ID生成器的方式:利用数据库生成和雪花算法。

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

2019-10-09
阅读 9 分钟
4.2k
对于增量式迭代命令不保证每次迭代所返回的元素数量,我们可以使用COUNT选项, 对命令的行为进行一定程度上的调整。COUNT 选项的作用就是让用户告知迭代命令, 在每次迭代中应该从数据集里返回多少元素。使用COUNT 选项对于对增量式迭代命令相当于一种提示, 大多数情况下这种提示都比较有效的控制了返回值的数量。

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

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

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

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

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

【业务学习】初识Kafka

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

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

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

【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型数据库,解决了磁盘存取速度慢的问题,大幅提升了数据访问速度,所以它常常被用作缓存。

【Index】技术干货索引

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