【重难点】【Redis 01】为什么使用 Redis、Redis 的线程模型、Redis 的数据类型及其底层数据结构
【重难点】【Redis 01】为什么使用 Redis、Redis 的线程模型、Redis 的数据类型及其底层数据结构
文章目录
- 【重难点】【Redis 01】为什么使用 Redis、Redis 的线程模型、Redis 的数据类型及其底层数据结构
- 一、为什么使用 Redis
- 二、Redis 的线程模型
- 三、Redis 的数据类型及其底层数据结构
- 1.数据类型及其应用场景
- 2.底层数据结构
一、为什么使用 Redis
Redis 是一个非常高效的非关系型数据库
随着互联网的发展,传统的关系型数据库已经不能满足所有的业务场景了,比如电商秒杀活动时候数据库需要瞬间处理大量的请求,非常容易造成数据库崩溃,所以需要引入缓存中间件。开源市场上主流的缓存中间件就是 Redis 和 Memcached,相较之下 Redis 的数据结构更加丰富,扩展性更强,并且原生支持集群模式
Redis 为什么高效
- 完全基于内存操作,无需进行磁盘 I/O
- 以单线程的方式处理请求,避免了不必要的线程上下文切换和锁竞争
- 使用 I/O 多路复用程序分派 Socket
- 底层数据结构进行过专门的设计
二、Redis 的线程模型
Redis 是一个由事件驱动的程序,因此 Redis 最重要的线程是它的文件事件处理器,这个文件事件处理器是以单线程的方式运行的,但可以通过 I/O 多路复用程序来监听多个 Socket,多路复用程序再将 Socket 交给文件事件分派器,分派器来选择对应的事件处理器(连接应答处理器、命令请求处理器、命令回复处理器)对 Socket 上的事件进行处理
I/O 多路复用程序工作原理
一个 Redis 服务器通常会连接多个 Socket 的,所以会有多个事件并发出现的情况。I/O 多路复用程序会将所有产生事件的 Socket 放在一个队列里面,然后通过这个队列,以有序、同步、每次一个 Socket 的方式向文件事件分派器传送套接字,当上一个 Socket 产生的事件背处理完毕之后,I/O 多路复用程序才会继续传送下一个 Socket
不同的操作系统有不同的多路复用函数,比如 Linux 的 select、poll、epoll。Redis 底层会判断当前操作系统的型号,并且调用性能最好的多路复用函数
三、Redis 的数据类型及其底层数据结构
1.数据类型及其应用场景
String
- 用作缓存,可以加快系统读写速度,还可以降低数据库压力
- 用作计数器,可以快速实现计数并提供实时查询,最终还可以根据需求落库
- 用作分布式会话存储,解决了分布式会话不统一的问题
Hash
应用场景比较少,需要根据实际业务细节来使用
List
- 用作消息队列,生产者通过 Lpush 从头部插入数据,消费者通过 BRpop 从尾部竞争
- 用作分页数据缓存,Redis 的 List 是有序的,并且支持范围查询
Set
- 用于分布式去重,如果数据分布在两台 JVM 上,就可以用 Redis 来去重
Sorted Set
- 用于实现排行榜
- 用于实现优先级队列
2.底层数据结构
简单动态字符串
对 C 语言的字符串进行了封装,增加了 len 字段,在安全性、效率和功能性上优于 C 语言的字符串
双端链表
是 List 键的底层实现
字典
是 Hash 键和数据库的底层实现
跳跃表
跳跃表的节点包含四个属性:level、backward、score 和 obj
是有序集合键的底层实现之一,还在集群节点中用作内部数据结构,此外,跳跃表在 Redis 里面没有其他用途
平均查询时间复杂度为 O(logn)、最差为 O(n)
整数集合
是 Set 键的底层实现之一
压缩列表
压缩列表是为了节约内存开发的,是一块连续的内存,类似于数组
是 Lish 键和 Hash 键的底层实现之一,当元素较少时就会使用压缩列表
对象
Redis 并不是直接使用上述数据结构实现键值对数据库的,而是基于这些数据结构创建了一个对象系统,这个系统包含字符串键、哈希键、列表键、集合键和有序集合键盘。并且 Redis 的对象带有访问时间记录信息,可以用于计算该对象的空转时长
【重难点】【Redis 01】为什么使用 Redis、Redis 的线程模型、Redis 的数据类型及其底层数据结构相关推荐
- Redis -- 01 【简介,特点,搭建,shell,数据类型】
1.Redis的简介 Redis中文官网链接: 1.1.NoSql NoSql 是Not-Only Sql的简写,泛指非关系型数据库 关系型数据库不太适合存储非结构化的大数据(现在的非结构化的数据占比 ...
- redis:01入门指南以及在springboot中使用redis
https://redis.io/download step1:参考官网的安装很简单 wget http://download.redis.io/releases/redis-5.0.6.tar.gz ...
- Redis入门总结(一):redis配置文件,五种数据结构,线程模型和持久化方式
(尊重劳动成果,转载请注明出处:https://yangwenqiang.blog.csdn.net/article/details/90321396冷血之心的博客) 关注微信公众号(文强的技术小屋) ...
- 一文带你深入理解Redis中的底层数据结构,再也不怕不懂数据类型的底层了
数据结构前言 都说Redis快,因为什么呢?只是因为它是内存数据库,所有操作都是基于内存进行的吗?其实不然,这与它的数据结构也是密不可分的.下面我们就来了解一下Redis的数据结构. Redis 数据 ...
- java基础巩固-宇宙第一AiYWM:为了维持生计,Redis基础Part6(Redis的应用场景、Redis是单线程的速度还快、Redis线程模型:Reactor模式、事件、发布订阅、管道)~整起
PART1-1:为什么Redis是单线程的 Redis单线程是指: Redis的网络IO和键值对读写是由一个线程来完成的.这也是 Redis 对外提供键值存储服务的主要流程.Redis的其他功能,比如 ...
- 四、redis的底层数据结构
1.演示数据类型的实现 上篇博客我们在介绍 key 相关命令的时候,介绍了如下命令: OBJECT ENCODING key 该命令是用来显示那五大数据类型的底层数据结构. 比如对于 string 数 ...
- redis 和 memcached 有什么区别?redis 的线程模型是什么?为什么 redis 单线程却能支撑高并发?...
这个是问 redis 的时候,最基本的问题吧,redis 最基本的一个内部原理和特点,就是 redis 实际上是个单线程工作模型, 你要是这个都不知道,那后面玩儿 redis 的时候,出了问题岂不是什 ...
- 简谈Redis的线程模型
Redis线程模型 Redis真的是单线程的吗 ? 为什么说Redis单线程速度这么快? IO多路复用 Redis真的是单线程的吗 ? Redis的单线程主要是指处理网络IO请求和键值对的读写是单线程 ...
- Redis专题-底层数据结构与使用场景
Redis介绍 Redis是一种基于键值对的NoSQL数据库,是一个基于内存中的数据结构存储系统,可以用作数据库.缓存和消息中间件.它支持以string(字符串),hash(哈希),list(列表), ...
最新文章
- React 组件生命周期
- 岛国科普第2弹-再造人类生命的神奇细胞Human.Life.Our.Amazing.Cell
- WIN7自定义管理员账户无法创建或使用设备
- 标准输入输出(C++)
- egg 编码规范_Egg 框架简述 (仅学习)
- DuangDuangDuang!码云项目的 Readme.md 特殊技能
- php ado 建立注册,如何注册ADO与DAO [Access软件网]
- JavaScript-面向对象(构造函数,实例成员,静态成员)
- 【做题】TCSRM592 Div1 500 LittleElephantAndPermutationDiv1——计数dp
- 直插式电阻电容封装与尺寸图解
- 计算机无法安装蓝牙驱动,windows10系统安装蓝牙驱动图文教程|windows10系统如何安装蓝牙驱动...
- DBN深度置信网络的实现
- 分析对象竞是我自己?我在 9 月上班划水 1510 分钟!
- 数据单向安全传输方案
- 【Unity3D】【UI】Cannot restructure Prefab instance.
- vscode文件图标消失
- 一度智信|拼多多客服售后须知
- IOS学习路线(2014-05-08)
- Openwrt MT7628/MT7620/MT7621——GPIO及LED/KEY的功能实现
- 记录一次渗透测试算命网站
热门文章
- 127.0.0.1 zxt.php,恭喜您!序列号购买成功!
- python填充_python 实现矩阵填充0的例子
- java 虚拟机类型的卸载_《深入理解Java虚拟机》:类加载和初始化(二)
- 为什么word下面有红线_这4个Word细节不做好,老板看了都想骂人!赶紧记下来
- AIX7.1环境打补丁缺少bash OPATCHAUTO-72049
- Codeforces 528A Glass Carving STL模拟
- 算法系列之选择排序算法
- POJ 2590 Steps (ZOJ 1871)
- 云计算之路-阿里云上:4000IOPS的RDS+16核CPU的负载均衡
- android.mk简单介绍