redis原理

本文涉及的产品
云原生内存数据库 Tair,内存型 2GB
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Redis 版,经济版 1GB 1个月
简介: redis原理

我们在项目中,会经常遇到redis,它是非关系型数据库。是一个基于key-value的存储系统,在部 分场合可以对关系数据库起到很好的补充作用。

1、 redis的特性

1.1、速度快

Redis所有数据是存放在内存中的;
Redis使用单线程架构,避免了多线程可能产生的竞争开销;

1.2、基于K_V的数据结构

提供list、set、zset、hash等数据结构的存储

1.3、功能相对丰富

Redis对外提供了键过期的功能,可以用来实现缓存;
提供了发布订阅功能,可以用来实现简单的消息系统,解耦业务代码;
支持Lua脚本;
提供了简单的事务功能(不能rollback);
提供了Pipeline功能,客户端能够将一批命令一次性传输到Server端,减少了网络开销;

1.4、简单稳定

Redis源码共六万行,但是不代表它不稳定

1.5、客户端语言多

Redis提供了简单的TCP通信协议,这样使得很多编程语言可以很方便的接入Redis

1.6、持久化

Redis提供两种持久化方案AOF和RDB

1.7、主从复制

1.8、高可用和分布式

Redis从2.8版本正式提供了高可用实现哨兵模式,可以保证Redis节点的故障发现和故障自动转移,
Redis从3.0版本后开始支持集群模式;

2、redis原理

Redis底层核心原理基于事件的处理流程,具体分析如下。

redis的核心是事件循环(event loop),redis的整个程序都是围绕事件循环进行的;
事件循环eventloop同时监控多个事件,这里的事件本质上是Redis对于连接套接字的抽象。当套接字变为可读或者可写状态时,就会触发该事件,把就绪的事件放在一个待处理事件的队列中,以有序、同步的方式发送给事件处理器进行处理。这个过程在Redis中被称为Fire。Redis的事件循环会保存两个表:events和fired列表,前者表示正在监听的事件,后者表示就绪事件,可以被进一步执行。在具体实现时,Redis采用I/O多路复用的方式,封装了操作系统底层select/epoll等函数,实现对多个套接字(socket)的监听,这些套接字就是对应多个不同客户端的连接。最后由对应的处理器将处理的结果返回客户端。

事件循环主要就是一个while循环,不断去轮询是否有就绪的事件需要处理。可读事件注册到事件循环中,实现了Redis对外提供服务地址的连接服务。事件处理器用于读写操作。Redis整个事件循环的逻辑
过程都没有涉及具体的命令操作,只需要定义事件的类型和处理器即可。

//@1加载配置
struct redisServer server
initServerConfig();
loadServerConfig();
 //配置参数初始化
initServer(){
 //@2创建事件循环
 Server.e=aeCreateEventLoop();
 //@3 循环事件注册一个可读事件,用于处理响应客户端请求
 aeCreateFileEvent(server.e,AE_READABLE,acceptTcpHandle)
}
//@4 执行事件循环,等待连接和命令请求
aeMain(server.e);
void aeMain(aeEventLoop*eventLoop){
 while(!eventLoop->stop){
 aeProcessEvents(eventLoop,AE_ALL_EVENTS);
 }
}
typedef struct aeEventLoop{
 //注册事件,被eventLoop监听
 aeFileEvent events[AE_SETSIZE];
 //读写操作需要执行的事件(就绪)
 aeFiredEvent fired[AE_SETSIZE];
}
相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
1月前
|
缓存 NoSQL Apache
【Redis】布隆过滤器原理与应用
【Redis】布隆过滤器原理与应用
33 1
|
1月前
|
存储 缓存 Java
【Spring原理高级进阶】有Redis为啥不用?深入剖析 Spring Cache:缓存的工作原理、缓存注解的使用方法与最佳实践
【Spring原理高级进阶】有Redis为啥不用?深入剖析 Spring Cache:缓存的工作原理、缓存注解的使用方法与最佳实践
|
2天前
|
存储 缓存 NoSQL
Redis为什么速度快:数据结构、存储及IO网络原理总结
Redis为什么速度快:数据结构、存储及IO网络原理总结
|
26天前
|
NoSQL Redis 数据库
【Redis从入门到入土】布隆过滤器简介、特点和原理
【6月更文挑战第1天】布隆过滤器是一种节省内存的不确定数据结构,用于判断元素是否可能在一个集合中。它由位数组和多个哈希函数组成,能快速插入和查询,但存在误判风险:可能存在假阳性(判断存在但实际不存在),但绝无假阴性(判断不存在则确实不存在)。适用于大规模数据的去重问题,如电话号码判断、安全网站链接检查、黑名单和白名单校验。其工作原理是通过多个哈希函数将元素映射到位数组中,添加时设置相应位置为1,查询时所有位置都为1则可能存在,有0则肯定不存在。由于哈希冲突,可能导致误判,且一旦添加元素无法删除,以避免影响其他元素。
29 4
|
1月前
|
存储 缓存 NoSQL
由菜鸟到大神,谈谈redis的概念、实战、原理、高级使用方法
【5月更文挑战第18天】Redis是一个开源的内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。它支持多种类型的数据结构,如字符串、哈希、列表、集合、有序集合等。
33 10
|
21天前
|
消息中间件 NoSQL Linux
详解Redis的主从同步原理
只不过在主节点中叫做master_repl_offset; 从节点也有一个偏移量叫做slave_repl_offset,用来记录从节点已经从主节点的repl_backlog_buffer中同步到的最新写指令的位置;
173 0
|
1月前
|
监控 NoSQL 算法
深入剖析Redis哨兵模式的原理和应用
Redis的哨兵模式是实现高可用性和自动故障转移的机制,当主服务器故障时,哨兵能自动检测并进行故障转移,确保服务连续和稳定性。哨兵模式通过监控主从服务器状态、自动故障转移、防止数据不一致,提高容错能力和负载均衡,降低运维成本,实现高可用性。哨兵通过检测主观下线和客观下线状态,以及选举Leader Sentinel来协调故障转移。Raft算法在其中用于领导者选举和状态一致性。哨兵模式通过综合考虑多种因素选举新主服务器并执行故障转移,保障集群稳定运行。
246 0
深入剖析Redis哨兵模式的原理和应用
|
1月前
|
缓存 NoSQL 算法
【redis】布隆过滤器(Bloom Filter)原理解析与应用
【redis】布隆过滤器(Bloom Filter)原理解析与应用
40 1
|
1月前
|
运维 监控 NoSQL
|
1月前
|
负载均衡 NoSQL 关系型数据库
深入浅出Redis(六):Redis的主从架构与主从复制原理
深入浅出Redis(六):Redis的主从架构与主从复制原理