浅谈Redis线程模型

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。

1.Redis简介

1.1简介

REmote DIctionary Server(Redis) 是一个由 Salvatore Sanfilippo 写的 key-valu存储系统,是跨平台的非关系型数据库。Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库,并提供多种语言的 API。Redis 通常被称为数据结构服务器,因为值(value)可以是字符串(String)、哈希(Hash)、列表(list)、集合(sets)和有序集合(sorted sets)等类型。

2.特征

1.NoSQL

2.分布式缓存中间件

3.key-value

4.提供海量的数据存储访问

5.所有数据放在内存中,访问数据非常快

6.非关系型,分布式,支持水平扩展,开源



2.Redis线程模型

image.jpeg

redis线程模型采用的是单线程模型,因为它是基于一个文件事件处理模型,而且该文件处理模型是单线程所以redis也是单线程的。那么这个文件事件处理器概含那些部分呢,它又是如何工作的呢。

文件事件处理模型如上图主要包含以下几部分:

1.Socket,一个redis服务器可以被多个redis客户端连接,这里的socket就代表着我们每一个连接着redis服务器的客户端,负责监听所以客户端的请求。

2.I/O多路复用器,服务器既然能被多个客户端连接,那么难免会出现请求并发的情况,I/O多路复用器负责监听各个socket,每当监听到socket的时候会将该socket放入一个队列,进而就将多客户端并发的这种请求转变成了队列这种串形方式

3.文件事件分配器,负责将I/O队列里的事件读取处理,然后分派给各个处理器进行处理。

4.事件处理器,负责处理对应的事件;事件处理器又包含3部分:连接应答处理器,命令请求处理器,命令回复处理器。

5.AE_Readable事件,当客户端连接到服务器,被socket监听到就会产生一个对应        AE_Readable事件。

6.AE_Writeable事件,当文件事件分配器分配事件到具体事件处理器事就会产生对        对应的AE_Writeable事件。


3.基于Redis线程模型的宏观工作流程

1.当redis客户端向服务器端发起一个写操作请求,Server Socket监听到请求后会产        生一个AE_Readable事件。

2.I/O多路复用器监听的socket后,将其放入队列中。

3.文件事件分配器从队列读取到事件后,将该事件分配给连接应答处理器,这时候会产生一个与客户端映射的socket,并将该socket与命令请求处理器绑定,这时候如果客户端请求某些操作时,例如本次请求写操作,这时候命令请求处理器就会执行对应的命令。

4.命令请求处理器处理完命令后,会将该socket与命令回复处理器绑定,并且会将请求结果返回给客户端。









相关实践学习
基于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
相关文章
|
28天前
|
存储 缓存 NoSQL
Redis单线程已经很快了6.0引入多线程
Redis单线程已经很快了6.0引入多线程
31 3
|
2月前
|
Java
网络 I/O:单 Selector 多线程(单线程模型)
网络 I/O:单 Selector 多线程(单线程模型)
|
3月前
|
NoSQL Linux Redis
Redis原理之网络模型笔记
Redis采用单线程模型,这意味着一个Redis服务器在任何时刻都只会处理一个请求。Redis的网络模型涉及到阻塞I/O(Blocking I/O)、非阻塞I/O(Non-blocking I/O)、I/O多路复用(I/O Multiplexing)、信号驱动I/O(Signal-driven I/O)以及异步I/O(Asynchronous I/O)。
|
1月前
|
人工智能 JSON 前端开发
【Spring boot实战】Springboot+对话ai模型整体框架+高并发线程机制处理优化+提示词工程效果展示(按照框架自己修改可对接市面上百分之99的模型)
【Spring boot实战】Springboot+对话ai模型整体框架+高并发线程机制处理优化+提示词工程效果展示(按照框架自己修改可对接市面上百分之99的模型)
|
27天前
|
存储 NoSQL 算法
【Redis技术进阶之路】「底层源码解析」揭秘高效存储模型与数据结构底层实现(字典)(二)
【Redis技术进阶之路】「底层源码解析」揭秘高效存储模型与数据结构底层实现(字典)
43 0
|
27天前
|
NoSQL 数据处理 调度
【Redis深度专题】「踩坑技术提升」探索Redis 6.0为何必须启用多线程以提升性能与效率
【Redis深度专题】「踩坑技术提升」探索Redis 6.0为何必须启用多线程以提升性能与效率
187 0
|
2天前
|
存储 缓存 NoSQL
为什么Redis使用单线程 性能会优于多线程?
在计算机领域,性能一直都是一个关键的话题。无论是应用开发还是系统优化,我们都需要关注如何在有限的资源下,实现最大程度的性能提升。Redis,作为一款高性能的开源内存数据库,因其出色的单线程性能而备受瞩目。那么,为什么Redis使用单线程性能会优于多线程呢?
15 1
|
27天前
|
存储 NoSQL Redis
作者推荐 |【Redis技术进阶之路】「原理系列开篇」揭秘高效存储模型与数据结构底层实现(SDS)(三)
作者推荐 |【Redis技术进阶之路】「原理系列开篇」揭秘高效存储模型与数据结构底层实现(SDS)
28 0
|
2月前
|
存储 消息中间件 缓存
Redis是否为单线程?
【2月更文挑战第6天】
40 1
Redis是否为单线程?
|
2月前
|
存储 NoSQL Redis
Redis淘汰策略、持久化、主从同步与对象模型
Redis淘汰策略、持久化、主从同步与对象模型
90 0

热门文章

最新文章