IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> redis原理 -> 正文阅读

[大数据]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];
}
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-05-03 09:25:32  更:2022-05-03 09:25:34 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 0:52:18-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码