【重难点】【Redis 01】为什么使用 Redis、Redis 的线程模型、Redis 的数据类型及其底层数据结构

文章目录

  • 【重难点】【Redis 01】为什么使用 Redis、Redis 的线程模型、Redis 的数据类型及其底层数据结构
  • 一、为什么使用 Redis
  • 二、Redis 的线程模型
  • 三、Redis 的数据类型及其底层数据结构
    • 1.数据类型及其应用场景
    • 2.底层数据结构

一、为什么使用 Redis

Redis 是一个非常高效的非关系型数据库

随着互联网的发展,传统的关系型数据库已经不能满足所有的业务场景了,比如电商秒杀活动时候数据库需要瞬间处理大量的请求,非常容易造成数据库崩溃,所以需要引入缓存中间件。开源市场上主流的缓存中间件就是 Redis 和 Memcached,相较之下 Redis 的数据结构更加丰富,扩展性更强,并且原生支持集群模式

Redis 为什么高效

  1. 完全基于内存操作,无需进行磁盘 I/O
  2. 以单线程的方式处理请求,避免了不必要的线程上下文切换和锁竞争
  3. 使用 I/O 多路复用程序分派 Socket
  4. 底层数据结构进行过专门的设计

二、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

  1. 用作缓存,可以加快系统读写速度,还可以降低数据库压力
  2. 用作计数器,可以快速实现计数并提供实时查询,最终还可以根据需求落库
  3. 用作分布式会话存储,解决了分布式会话不统一的问题

Hash

应用场景比较少,需要根据实际业务细节来使用

List

  1. 用作消息队列,生产者通过 Lpush 从头部插入数据,消费者通过 BRpop 从尾部竞争
  2. 用作分页数据缓存,Redis 的 List 是有序的,并且支持范围查询

Set

  1. 用于分布式去重,如果数据分布在两台 JVM 上,就可以用 Redis 来去重

Sorted Set

  1. 用于实现排行榜
  2. 用于实现优先级队列

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 的数据类型及其底层数据结构相关推荐

  1. Redis -- 01 【简介,特点,搭建,shell,数据类型】

    1.Redis的简介 Redis中文官网链接: 1.1.NoSql NoSql 是Not-Only Sql的简写,泛指非关系型数据库 关系型数据库不太适合存储非结构化的大数据(现在的非结构化的数据占比 ...

  2. redis:01入门指南以及在springboot中使用redis

    https://redis.io/download step1:参考官网的安装很简单 wget http://download.redis.io/releases/redis-5.0.6.tar.gz ...

  3. Redis入门总结(一):redis配置文件,五种数据结构,线程模型和持久化方式

    (尊重劳动成果,转载请注明出处:https://yangwenqiang.blog.csdn.net/article/details/90321396冷血之心的博客) 关注微信公众号(文强的技术小屋) ...

  4. 一文带你深入理解Redis中的底层数据结构,再也不怕不懂数据类型的底层了

    数据结构前言 都说Redis快,因为什么呢?只是因为它是内存数据库,所有操作都是基于内存进行的吗?其实不然,这与它的数据结构也是密不可分的.下面我们就来了解一下Redis的数据结构. Redis 数据 ...

  5. java基础巩固-宇宙第一AiYWM:为了维持生计,Redis基础Part6(Redis的应用场景、Redis是单线程的速度还快、Redis线程模型:Reactor模式、事件、发布订阅、管道)~整起

    PART1-1:为什么Redis是单线程的 Redis单线程是指: Redis的网络IO和键值对读写是由一个线程来完成的.这也是 Redis 对外提供键值存储服务的主要流程.Redis的其他功能,比如 ...

  6. 四、redis的底层数据结构

    1.演示数据类型的实现 上篇博客我们在介绍 key 相关命令的时候,介绍了如下命令: OBJECT ENCODING key 该命令是用来显示那五大数据类型的底层数据结构. 比如对于 string 数 ...

  7. redis 和 memcached 有什么区别?redis 的线程模型是什么?为什么 redis 单线程却能支撑高并发?...

    这个是问 redis 的时候,最基本的问题吧,redis 最基本的一个内部原理和特点,就是 redis 实际上是个单线程工作模型, 你要是这个都不知道,那后面玩儿 redis 的时候,出了问题岂不是什 ...

  8. 简谈Redis的线程模型

    Redis线程模型 Redis真的是单线程的吗 ? 为什么说Redis单线程速度这么快? IO多路复用 Redis真的是单线程的吗 ? Redis的单线程主要是指处理网络IO请求和键值对的读写是单线程 ...

  9. Redis专题-底层数据结构与使用场景

    Redis介绍 Redis是一种基于键值对的NoSQL数据库,是一个基于内存中的数据结构存储系统,可以用作数据库.缓存和消息中间件.它支持以string(字符串),hash(哈希),list(列表), ...

最新文章

  1. React 组件生命周期
  2. 岛国科普第2弹-再造人类生命的神奇细胞Human.Life.Our.Amazing.Cell
  3. WIN7自定义管理员账户无法创建或使用设备
  4. 标准输入输出(C++)
  5. egg 编码规范_Egg 框架简述 (仅学习)
  6. DuangDuangDuang!码云项目的 Readme.md 特殊技能
  7. php ado 建立注册,如何注册ADO与DAO [Access软件网]
  8. JavaScript-面向对象(构造函数,实例成员,静态成员)
  9. 【做题】TCSRM592 Div1 500 LittleElephantAndPermutationDiv1——计数dp
  10. 直插式电阻电容封装与尺寸图解
  11. 计算机无法安装蓝牙驱动,windows10系统安装蓝牙驱动图文教程|windows10系统如何安装蓝牙驱动...
  12. DBN深度置信网络的实现
  13. 分析对象竞是我自己?我在 9 月上班划水 1510 分钟!
  14. 数据单向安全传输方案
  15. 【Unity3D】【UI】Cannot restructure Prefab instance.
  16. vscode文件图标消失
  17. 一度智信|拼多多客服售后须知
  18. IOS学习路线(2014-05-08)
  19. Openwrt MT7628/MT7620/MT7621——GPIO及LED/KEY的功能实现
  20. 记录一次渗透测试算命网站

热门文章

  1. 127.0.0.1 zxt.php,恭喜您!序列号购买成功!
  2. python填充_python 实现矩阵填充0的例子
  3. java 虚拟机类型的卸载_《深入理解Java虚拟机》:类加载和初始化(二)
  4. 为什么word下面有红线_这4个Word细节不做好,老板看了都想骂人!赶紧记下来
  5. AIX7.1环境打补丁缺少bash OPATCHAUTO-72049
  6. Codeforces 528A Glass Carving STL模拟
  7. 算法系列之选择排序算法
  8. POJ 2590 Steps (ZOJ 1871)
  9. 云计算之路-阿里云上:4000IOPS的RDS+16核CPU的负载均衡
  10. android.mk简单介绍