Redis
文章平均质量分 92
熟悉整个redis源码
蓬莱道人
半路出家的研究僧
展开
-
Redis(二十二):Redis迁移工具
1. Redis-shake2. Redis-migrate-tool3. Redis-full-check1. Redis-shake1.1 简介 redis-shake是阿里云Redis&MongoDB团队开源的用于redis数据同步的工具。redis-shake是我们基于redis-port基础上进行改进的一款产品。它支持解析、恢复、备份、同步四个功能。恢复restore:将RDB文件恢复到目的redis数据库。 备份dump:将源red...原创 2021-11-24 20:02:40 · 2669 阅读 · 0 评论 -
Redis(二十一):Redis性能测试
1. redis-benchmark的使用2. python脚本对redis进行测试 通常我们开发完一个系统之后,如何验证这个系统的好坏呢,这就需要做性能测试,Redis也不例外。幸运的是,Redis源码中已经提供了测试工具redis-benchmark,当我们从源码中编译完成Redis之后,就可以使用redis-benchmark对Redis进行性能测试。1. redis-benchmark的使用 redis-benchmard的使用语法如下:redis-benchmar...原创 2021-11-24 19:18:21 · 2216 阅读 · 0 评论 -
Redis常用命令
1、安装Redissudo apt-get install redis-server redis-server //启动redis 查看是否启动成功:redis-cli //查看redis是否启动 以上命令将打开以下终端:redis 127.0.0.1:6379&...原创 2019-03-10 11:45:03 · 575 阅读 · 0 评论 -
Redis(二十):Redis中执行Lua脚本
1. Lua脚本 1.1 简介 1.2 使用lua脚本好处2. Redis客户端中Lua脚本的使用3. Redis服务器中lua环境 3.1 创建并修改lua环境 3.2 lua伪客户端 3.3 lua_scripts字典 在redis分布式锁的那篇博客中我们介绍到,为了避免在分布式环境中释放别人的锁,释放锁时需要使用 GET + DEL 两条命令,而为了让着两条命令作为一个原子操作执行,我们可以使用Lua脚本来保证,接下来我们介绍Lua脚本1. Lua脚...原创 2021-08-08 16:49:34 · 9628 阅读 · 0 评论 -
Redis(十九):Redis分布式锁
1. 分布式锁简介 1.1 线程锁、进程锁和分布式锁 1.2 分布式锁实现方式2. Redis分布式锁 2.1SETNX命令 2.2如何避免死锁 2.3 如何处理锁过期 2.4 如何避免释放别人的锁1. 分布式锁简介1.1 线程锁、进程锁和分布式锁 在介绍分布式锁时,我们有必要介绍线程锁、进程锁和分布式锁三者的区别:(1)线程锁 主要用来给方法、代码块加锁。当某个方法或者代码块使用锁时,那么在...原创 2021-08-01 16:13:52 · 403 阅读 · 2 评论 -
Redis(十八):Redis协议
1. Redis协议介绍2. 请求和响应 2.1 请求响应模式 2.2 请求格式 2.3 响应格式3. 协议分类1. Redis协议介绍 Redis 支持 8 种核心数据结构,每种数据结构都有一系列的操作指令,除此之外,Redis 还有事务、集群、发布订阅、脚本等一系列相关的指令。为了方便以一种统一的风格和原则来设计和使用这些指令,Redis 设计了 RESP,即 Redis Serialization Protocol,中文意思是 Redis 序列化协议...原创 2021-07-18 16:01:54 · 2848 阅读 · 0 评论 -
Redis(十七):Redis模块
1. redis模块简介2. 添加自定义模块3. redis中安装布隆过滤器1. redis模块简介 Redis Modules System是4.0出现一大改动点,使得可以通过外部模块对Redis进行功能性扩展。2. 添加自定义模块 Redis的模块采用的是动态链接库的方式,可以启动的时候加载,也可以在运行时加载(MODULE LOAD),在Linux系统里面,可以通过dlopen,dlsym等实现动态加载库,在业务系统里面,经常用于将业务代码和框架代码进行分离,以实现...原创 2021-06-30 23:54:12 · 1227 阅读 · 0 评论 -
Redis(十六):Redis事务
1. 事务的实现2. 带WATCH的事务3. 事务的ACID特性1. 事务的实现 Redis通过MULTI、EXEC、WATCH等命令来实现事务功能,事务提供了一种将多个命令请求打包,然后一次性、按顺序地执行多个命令的机制,并且在事务执行期间,服务器不会中断事务而去执行其它客户端的命令请求。事务的执行分为事务开始、命令入队和事务执行三个阶段。1.1 事务开始 MULTI命令的执行标志着事务的开始:redis> MULTI1.2 命令入队 每个re...原创 2021-06-27 17:35:30 · 251 阅读 · 0 评论 -
Redis(十五):Redis和Memcached比较
Memcached 是一个高性能的分布式内存对象缓存系统,由LiveJournal的Brad Fitzpatrick开发,用于动态Web应用以减轻数据库负载。它可以应对任意多个连接,使用非阻塞的网络IO。由于它的工作机制是在内存中开辟一块空间,然后建立一个HashTable,Memcached自管理这些HashTable。 Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-...原创 2021-06-27 16:13:36 · 260 阅读 · 0 评论 -
Redis(十四):Redis集群方案
Redis集群是Redis 3.0版本中新加入的分布式数据库方案,集群通过分片来进行数据共享,并提供复制和故障转移功能。1. 集群节点2. 槽指派3. 集群中执行命令4. 重新分片5. ASK错误6. 复制和故障转移7. 集群消息8. 槽数量163841. 集群节点1.1 启动节点 一个节点就是一个运行在集群下的Redis服务器,Redis服务器在启动时会根据cluster-enabled配置选项是否为yes来决定是否开启服务器的集群模式。运行在集群...原创 2021-06-27 14:35:06 · 982 阅读 · 2 评论 -
Redis(十三):Redis多线程
1. Redis 3.0前多线程2. Redis 4.0多线程3. Redis 6.0多线程 3.1 线程池初始化 3.2 读取请求 3.3 写回响应 3.4 I/O线程主逻辑 3.5 性能提升 如果从Redis的核心网络模型来看,从 Redis 的 v1.0 到 v6.0 版本之前,Redis 的核心网络模型一直是一个典型的单 Reactor 模型:利用 epoll/select/kqueue 等多路复用技术,在单线程的事件循环中不断去处...原创 2021-06-24 00:07:11 · 6455 阅读 · 2 评论 -
Redis(十二):Redis的消息队列Stream
8. 消息队列(stream)8.1 Stream简介 Stream是redis最复杂的一个数据结构, 也是redis 5.0的一个重要更新。Redis Stream 主要用于消息队列(MQ,Message Queue),这样的数据结构其实很常见, 比如腾讯云的CMQ、RabbitMQ、kafka等。 Redis 本身是有一个 Redis 发布订阅 (pub/sub) 来实现消息队列的功能,但它有个缺点就是消息无法持久化,如果出现网络断开、Redis 宕机等,消息就会被丢弃。简单来...原创 2021-06-19 00:01:52 · 2482 阅读 · 0 评论 -
Redis(十一):Redis各版本特性
redis系列博客基本都是基于redis 3.0来写的,Redis3.0在2015年4月1日正式发布,相比于Redis2.8主要特性如下:Redis最大的改动就是添加Redis的分布式实现Redis Cluster。原创 2021-06-18 21:58:04 · 7608 阅读 · 0 评论 -
Redis(十):引入缓存后带来的问题
1. 引入缓存后给业务带来的问题 1.1 缓存读取 1.2 缓存更新 1.3 缓存淘汰2. 缓存的三座大山 2.1 一致性 2.2缓存击穿 2.3缓存雪崩1. 引入缓存后给业务带来的问题 业务系统引入缓存之后,架构由原来的两层架构变成了三层架构: 由此,带来了三个问题需要解决,分别是缓存读取、缓存更新和缓存淘汰。1.1 缓存读取 缓存读...原创 2021-05-05 18:18:28 · 603 阅读 · 2 评论 -
Redis(九):Redis的主从同步
1、全同步2、命令传播2.1 旧版复制功能的缺陷2.2 新版复制功能的实现 redis的复制功能分为同步和命令传播两个操作,同步操作用于将从服务器的数据库状态更新至主服务器所处的数据库状态。命令传播操作则用于主服务器的数据库状态被修改时,导致主从服务器的数据库状态出现不一致时,让主从服务器的数据库重新回到一致状态。redis的复制功能主要通过执行SLAVEEOF命令来实现。1、全同步 从服务器对主服务器的同步操作需要通过向主服务器发送SYNC命令来完成,以下是SY...原创 2021-05-04 20:27:38 · 994 阅读 · 0 评论 -
Redis(八):Redis的两种持久化方式
1、RDB持久化 1.1 RDB手动执行 1.2 RDB定期执行2、AOF持久化 2.1 AOF持久化的实现 2.2 AOF数据的载入 2.3 AOF重写 redis有两种持久化方式,分别是RDB持久化和AOF持久化,RDB持久化通过保存数据库中的键值对来保存数据库的状态,而AOF持久化是通过保存服务器执行的写命令来保存数据库的状态。1、RDB持久化 RDB持久化既可以手动执行,也可以根据服务器的配置选项定期执行,该功能...原创 2021-05-04 17:19:52 · 402 阅读 · 0 评论 -
Redis(七):Redis内存淘汰
1. 主动淘汰 1.1 键的生存周期 1.2 过期键删除策略2. 被动淘汰 2.1 被动淘汰策略 2.2 被动淘汰策略的实现 由于redis是一个内存数据库,所有数组都保存在内存中,而内存的数量毕竟不是无限的,因此当redis中保存的键值对超过一定数量时,就需要淘汰掉一些键值对,减少redis所占的内存空间。redis有两种内存淘汰策略,一种称为主动淘汰,一种称为被动淘汰。主动淘汰即为redis的键值对设置过期时间,当时间到期之后,对应的键值对就会从内存...原创 2021-05-04 12:34:02 · 386 阅读 · 0 评论 -
Redis(六):Redis客户端初始化
1. 客户端状态:struct redisClient 1.1 标志flags 1.2 输入缓冲区querybuf 1.3 命令argv和命令参数个数argc 1.4 命令实现函数cmd 1.5输出缓冲区buf和reply 1.6身份验证authenticated2. 客户端的创建 2.1 相关数据结构 2.2 主函数 2.3 连接服务器的函数 Redis是一个典型的一对多的服务程序,一个服务器可以和多个客户端建立网...原创 2021-04-04 20:55:14 · 950 阅读 · 0 评论 -
Redis(五):Redis的事件循环
1. 事件循环简介2. 文件事件3. 时间事件4. 事件循环流程 4.1 获取到达事件离当前时间最接近的时间事件 4.2 计算最接近时间事件距离到达还有多少毫秒,保存在timeval中 4.3 阻塞等待文件事件产生,阻塞时间由timeval决定 4.4 处理已产生的文件事件 4.5 处理已到达的时间事件1. 事件循环简介 redis是一个事件驱动程序,服务器需要处理以下两类事件,分别是时间事件和文件事件。redis服务器在启动之后,开始...原创 2021-04-04 17:10:28 · 1287 阅读 · 0 评论 -
Redis(四):Redis服务器的初始化
1、相关数据结构1.1 服务器:struct redisServer1.2 数据库:struct redisDb 1.3 redis命令:struct redisCommand2、服务器初始化流程 2.1 初始化服务器状态结构(initServerConfig函数)2.2 载入配置选项(loadServerConfig函数) 2.3 初始化服务器数据结构(initServer函数) 2.4 还原数据库状态(loadDataFromDisk...原创 2021-04-04 16:53:12 · 2413 阅读 · 0 评论 -
Redis(三):Redis的配置文件介绍
Redis的配置文件为redis.conf,配置文件主要分为以下几个模块,分别是:1、GENERAL2、SNAPSHOTTING3、REPLICATION4、SECURITY5、LIMITS6、APPEND ONLY MODE7、LUA SCRIPTING8、REDISCLUSTER9、SLOW LOG10、ADVANCED CONFIG1、GENERAL参数名 默认值 含义 daemonize no redis是否作为守...原创 2021-04-04 15:18:54 · 396 阅读 · 0 评论 -
Redis(二):Redis的内存分配
Redis在编译时便会指定内存分配器;内存分配器可以是 libc 、jemalloc或者tcmalloc,默认是jemalloc。在Redis中内存分配主要靠zmalloc实现,在zmalloc.c文件实现,在这个文件内还存在其他相关的操作函数。void *zmalloc(size_t size); // 申请内存void *zcalloc(size_t size); // 申请内存,并初始化为0void *zrealloc(void *ptr, size_t size); // 重申...原创 2021-04-04 15:17:28 · 1266 阅读 · 1 评论 -
Redis(一):Redis的数据结构
1、Redis的对象 2、简单动态字符串SDS3、双端链表4、字典5、整数集合6、跳跃表7. 压缩列表1、Redis的对象 Redis使用对象来表示数据库中的键和值,每当我们在Redis的数据库中新创建一个键值对时,我们至少会创建两个对象,一个用作键值对的键,一个用作键值对的值。Redis总共有5种对象类型,分别是字符串对象,链表对象,哈希对象,集合对象,有序集合对象。Redis是一个键值对数据库,Redis的键总是一个字符串对象,Redis的值可以为字符串对...原创 2021-04-04 15:14:54 · 483 阅读 · 0 评论