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 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Redis00-2-Redis的概述以及核心特点 -> 正文阅读

[大数据]Redis00-2-Redis的概述以及核心特点

您好,我是码农飞哥,感谢您阅读本文,欢迎一键三连哦
💪🏻 1. Python基础专栏,基础知识一网打尽,9.9元买不了吃亏,买不了上当。 Python从入门到精通
?? 2. Python爬虫专栏,系统性的学习爬虫的知识点。9.9元买不了吃亏,买不了上当,持续更新中 。python爬虫入门进阶
?? 3. Ceph实战,从原理到实战应有尽有。 Ceph实战
?? 4. Java高并发编程入门,打卡学习Java高并发。 Java高并发编程入门
😁 5. 社区逛一逛,周周有福利,周周有惊喜。码农飞哥社区,飞跃计划
全网同名【码农飞哥】欢迎关注,个人VX: wei158556

Redis的介绍

Redis是用C语言开发的一个开源免费的高性能key-value数据库。
默认16个数据库,类似数组下表从0开始,初始默认使用0号库。可以通过命令select <dbid> 来切换数据库,
比如说想切换到15库,那就是SELECT 15
在这里插入图片描述
当然可以在redis.conf中指定数据库的数量。
在这里插入图片描述

  1. dbsize 命令用于查看当前数据库的key的数量
    在这里插入图片描述
  2. flushdb 命令用于清空当前库
  3. flushall 命令用于通杀全部库

Redis的特点

1. 支持非常丰富的数据结构

与MemCache等其他的key-value数据库相比,Redis支持多种数据结构,分别是string,hash,set,zset,list这几种数据类型。

2. 性能极高,时间复杂度O(1)~O(n)

Redis读写性能非常高,Redis能读的速度是110000次/s,写的速度是81000次/s 。其高效的读写性能主要得益于其纯内存操作+单线程+多路IO复用技术。后面会详细介绍。

3. 单个命令操作的原子性

Redis单个命令的操作都是原子操作,多个操作的话也支持事务,即通过MULTI和EXEC指令包起来。

4. 支持持久化,RDB/AOF

Redis 虽然是纯内存的操作,但是其也支持数据持久化,持久化的方式有两种,一种是RDB的方式,它按照一定的时间将内存的数据以快照的形式保存到硬盘中;另外一种是AOF的方式,即将Redis执行的每次写命令记录到单独的日志文件中,当重启Redis会重新从持久化的日志文件中恢复数据。

5. 客户端丰富,使用很方便

Redis支持多种客户端操作。

Redis的优势

  1. 读写效率极高,时间复杂度O(1)~O(n),QPS: 100K+,WPS: 80K+
  2. 丰富的数据类型及操作
  3. 支持命令的原子操作
  4. 支持批量操作,如PipeLine,批命令
  5. 较为丰富的特性,订阅发布/过期时间等

Redis的不足之处

  1. 查询方式单一,不支持复杂查询
  2. 内存资源有限,无法支持海量数据
  3. 内存存储数据,丢失风险较高

Redis读写性能为何如此高效

Redis的读写性能之所以如此高效,主要有如下几点原因。

  1. 完全基于内存操作,绝大部分请求是纯粹的内存操作
  2. 高效的数据结构,数据一般较小,数据操作也简单
  3. 单线程避免了上下文切换,竞争锁等开销
  4. 基于单进程的网络IO多路复用模型,非阻塞IO,提高了网络I/O并发性。

前面三点都比较好理解,第四点 基于单进程的网络IO多路复用模型,非阻塞IO是个什么鬼呢?
IO多路复用,简单的理解就是:一个服务端进程可以同时处理多个套接字描述符。

  • 多路:多个客户端连接(连接就是套接字描述符)
  • 复用:使用单进程就能实现同时处理多个客户端的连接。
    IO多路复用只需要一个进程就能够处理多个套接字,从而解决了上下文切换的问题。
    其发展可以分select->poll→epoll三个阶段来描述。
    如何理解select/poll/epoll呢?
    场景:
    班主任给全班同学布置了一批作业,有个同学完成了,有的没有完成,如果班主任要一个个检查的话,那么在没有完成的同学哪里,只能阻塞等待,等他完成之后,再去检查下一个同学的作业,这样就造成了性能问题。
    select:
    班主任找了班长(monitor),负责代自己检查每个同学的作业。班长的做法是:遍历问每个同学"完成了么?",完成的待检查无误后提交作业。
    但是班长一个人也忙不过来,它最多只能管理1024个同学,而且如果同学的作业短时间完成不了,monitor还不停的问,影响效率。

select 函数监视的文件描述符分3类,分别是writefds、readfds、和exceptfds。调用后select函数会阻塞,直到有描述符就绪(有数据可读、可写、或者有except),或者超时(timeout指定等待时间,如果立即返回设为null即可),函数返回。当select函数返回后,可以通过遍历fdset,来找到就绪的描述符。

poll:
现在换了一个能力更强的班长(Monitor Pro),可以管理更多的同学,这个Monitor Pro可以理解为poll。poll改变了文件描述符集合的描述方式,使用pollfd结构而不是select的fd_set结构,使得poll支持的文件描述符集合限制远大于select的1024。

epoll:
这个能力更强的班长改变了工作方式,它遍历一次所有的同学之后,如果有作业没完成的同学,他会告诉这个同学,完成作业之后应该执行啥错误。这样Monitor Pro只需要定期检查关键节点就好了,这就是epoll。

用一张流程图表示如下:
在这里插入图片描述
班长相当于IO多路复用的模型,班主任相当于Redis的存储服务,同学A~同学D相当于多个客户端。

总结

本文详细介绍了Redis的优缺点以及特性,重点介绍了IO多路复用模型。

参考

一文搞懂 Redis高性能之IO多路复用

粉丝专属福利

想进学习群请添加VX: wei158556

  1. 回复【python】:即可获取50G的python学习干货
  2. 回复【爬虫】:即可免费获取全面完善的爬虫资料
  3. 回复【数据分析】:即可免费获取全面完善的爬虫资料,超值
  4. 回复【java】:即可获得java全套资料以及面试题
  5. 回复【软考】:即可获得软考资料
  6. 回复【脱单】: 即可获得脱单资料
  7. 回复【冰墩墩】:即可获得冰墩墩源码
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-04-18 17:49:30  更:2022-04-18 17:53:23 
 
开发: 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 4:09:15-

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