Redis_概述_特性_IO模型

news2024/10/6 18:35:29

本章要点

  • 掌握NoSql数据库的概念和与sql数据库的区别
  • 初步了解Redis内存数据库
  • 了解Redis内存数据库的优点及其原因
  • 掌握Redis的多线程IO模型
  • 学习Redis的安装和配置

Redis简介

Redis 全称 Remote Dictionary Server 远程字典服务! 使用C语言编写,支持网络,可基于内存也可以持久化的日志型,NoSQL开源内存数据库,其提供多种语言的API Redis是一个key-value存储系统,支持存储的val类型很多,String,List,Set,Zset(sorted set--有序集合) 和Hash

NoSQL

NoSQL (not noly sql) 泛指非关系型数据库.产生主要为了解决大规模数据集合多重数据种类带来的挑战,特别是大数据应用难题

种类

我们根据存储的方式有不同的NoSQL数据库种类

  • 键值存储数据库

就像map一样key-value对 代表 Redis

  • 列存储数据库

我们知道关系型数据库是典型的行存储数据库,因为行存储数据库在物理层面上占用的是连续存储空间,不适合海量数据存储,而列存储方式可以实现分布式存储,适合海量存储 代表 Hbase

  • 文档型数据库

就是NoSQL和关系型数据库的结合!最像关系型数据库的NoSQL.代表MongoDB

  • 图形(Graph)数据库

用于存放节点关系的数据库.列如描述不同人间的关系.典型代表 Neo4J

Redis用途

Redis是内存数据库,相比于磁盘存储就是一个快字,所以一般用于做数据缓存!即我们客户端从数据库DBMS查询的数据首先写入到Redis中,然后当下次再有客户端需要访问该条数据,我们只需要直接读取Redis即可!,不仅减少了RT一次http的往返时间,还减少了DBMS的压力!

缓存数据划分: 我们根据Redis缓存于DBMS中数据的同步性划分为2类

  • 实时同步缓存

就是一些实时性数据当DBMS更新后,Redis缓存中的相关数据会立即清楚,当下次请求来临先到DBMS中获取,然后再写入到Redis中

  • 阶段性同步缓存

当DBMS持久层数据更新后,Redis缓存中存放的相关数据并不会立即清除, 允许一段时间Redis缓存中的数据和DBMS中的数据不完全一致!这个时间段就是缓存数据的过期时间!

Redis特性

能够做缓存的技术中间件这么多,我们为何要选择Redis Redis的过人之处在哪呢?

  • 性能极高

Redis的性能是极高,Redis的读操作速度可达到 11w 次/s,写的速度可达到 8w次/s 原因:1.Redis的所有操作都是在内存中进行的 2.Redis用C语言开发 3.Redis源码非常精细

  • 简单稳点

Redis源码很少,早期自由2w行左右,从3.0加入集群功能后代码变成5w行只有.可维护性也高

  • 持久化

虽然Redis是内存数据库,但是也支持持久化操作. 有2种方式 RDB和AOF

  • 高可用集群

Redis提供了高可用的主从集群,可以保证系统的安全性

  • 丰富的数据类型

支持存储的value类型很多.包括 String,List,Set,Zset(sorted set) 和Hash 还有BitMap,HyperLogLog,Geospatial类型 BitMap:一般用于大数据的二值性统计 HyperLogLog:用于数据量庞大的日志做去重操作 Geospatial:地理空间,主要提供地理位置的相关计算

  • 强大的功能

Redis提供了数据过期功能,发布/订阅功能,简单事务功能,还支持Lua脚本扩展功能.

  • 客户端语言广泛

Redis提供了简单的TCP通信协议,编程语言可以方便的接入Redis.

  • 支持ACL权限控制

之前的权限控制十分笨拙,从Redis6开始引入了ACL模块,可以给不同的用户指定不同的权限 ALC: Access Control List 访问控制列表,是一种细粒度的权限控制策略,可以针对任意用户和组进行权限控制, UGO是一种粗粒度的权限控制操作策略

  • 支持多线程IO模型: Redis之前版本采用的是单线程模型,从6.0开始支持多线程模型

Redis的IO模型

Redis客户端提交的请求,然后由Redis处理请求所采用的处理架构,称为Redis的IO模型,不同版本的IO模型不同

单线程模型

对于Redis3.0及之前版本,Redis的IO模型就是纯粹的单线程模型,所有客户端的请求由一个线程处理!

Redis的单线程采用了多路复用技术!

对于多路选择算法参见的有3种:select模型,poll模型,epoll模型

  • poll模型:采用轮询方式,该模型对客户端的就绪处理是有延迟的
  • epoll模型: 采用的是回调的方式

每个客户端如果要向Redis提交请求,需要先建立一个socket连接,并向事件分发器注册一个事件.一旦该事件发生说明该链接已经就绪.然后事件分发器就可以感知到.然后获取到客户端发送的请求,然后放入任务队列,等待处理线处理! 事件分发器会根据不同的事件将任务交给不同的时间处理器处理

混合线程模型

Redis4.0开始就加入了多线程元素,虽然处理客户端请求仍是单线程模型.但是对于一些比较耗时并且不影响客户端响应的操作交给后台其他线程处理 例如持久化操作,对AOF的rewrite,对失效链接的处理等

多线程模型

Redis6.0版本开始,才是真正意义的多线程模型.因为客户端请求的处理采用的是多线程模型

多线程IO模型中的多线程仅仅是用来解析客户端请求,然后解析出请求放入到任务队列.对于具体任务的处理还是右主线程处理!这样用户就无需考虑线程安全问题.无需考虑事务控制.以及像LPUSH/LPOP执行顺序问题.

优缺点总结

  • 单线程模型
  • 优点:可维护性高,性能高.不存在并发读写情况.所以不存在执行顺序的不确定性,不存在切换线程的开销,不存在死锁问题,不存在为了数据安全而进行的加锁/解锁开销
  • 缺点:性能受到影响,由于单线程自会用到一个处理器,所以会有处理器的浪费
  • 多线程模型
  • 优点:其结合了单线程和多线程的优点,并且避开了他们的不足 缺点:该模型没有显示不足.如果非要说缺点的话,他并非是真正意义上的多线程模型,因为真正处理任务的线程仍然是单线程.所以性能有些许影响!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/412945.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Scrapy爬虫框架(概念)

Scrapy 入门教程 | 菜鸟教程 (runoob.com) Scrapy是一个快速功能强大的网络爬虫框架 Scrapy的安装 通过 pip 安装 Scrapy 框架: pip install Scrapy 安装后小测: 执行 scrapy ‐h Scrapy不是一个函数功能库,而是一个爬虫框架。 Scrapy架构图(绿线是…

【ROS2指南-4】理解ROS2话题

目标:使用 rqt_graph 和命令行工具来反思 ROS 2 主题。 教程级别:初学者 时间: 20分钟 内容 背景 先决条件 任务 1 设置 2 rqt_graph 3 ros2主题列表 4 ros2主题回显 5 ros2 主题信息 6 ros2界面展示 7 ros2主题发布 8 ros2 主题赫…

光纤能取代网线吗?

光纤与铜缆之间的较量已持续了十多年。现如今随着云计算、5G 等新型业务的不断涌现,数据中心规模不断的扩大,其架构与布线也越来越复杂,而光纤的轻量化及逐渐降低的成本,使得主干网设备对光纤的需求也越来越旺盛,在大型…

pikachu靶场-xss

XSS漏洞攻击原理跨站脚本攻击是指恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。一般XSS可以分为如下几种常见类型:1.反射性XSS;2.存储型XSS;3.…

成为钢铁侠!只需一块RTX3090,微软开源贾维斯(J.A.R.V.I.S.)人工智能AI助理系统

梦想照进现实,微软果然不愧是微软,开源了贾维斯(J.A.R.V.I.S.)人工智能助理系统,贾维斯(jarvis)全称为Just A Rather Very Intelligent System(只是一个相当聪明的人工智能系统),它可以帮助钢铁侠托尼斯塔克…

何为智能驾驶的「摩尔定律」?这家芯片方案商给出自己的答案

“我觉得(高速NOA)价格下降的速度可能会是非常快的,”4月6日,地平线技术开放日上,地平线副总裁、软件平台产品线总裁余轶南在与高工智能汽车沟通中称,“到2024年底,约100TOPS的高速NOA&#xff…

Lottie加载的一些坑

Lottie是一个非常强大的动画库,可以渲染一些非常绚丽的动画。然而在使用的过程中,会遇到一些诡异的问题。通常,这不是使用方式上有什么问题,大都是UE产出的lottie本身存在问题。本来之前的UE小哥还不错的,跳槽后来了个…

【详解 进程通信】之 System V 共享内存

简介大致操作步骤介绍结果展示key值的获取创建 | 获取共享内存使用共享内存段解除共享内存段销毁共享内存段(重点)命令行方式销毁共享内存段系统调用销毁共享内存使用共享内存进行进程间通信简介 共享内存可以让多个进程共享同一块内存,也就…

如何实现Chatgpt写文章(附chatgpt3.5免费接口)

申明:本次只是说一下实现思路,官方的接口以及如何实现方式,本文没有提及,这次只是一个思路,若想代替人工完成质量还差的很远,请审核大大放行 今天再次优化了代码,修复了一些bug,考虑…

单片机程序是如何运行起来

多年前在学习计算机原理的时候曾经问过老师一个问题,就是我们编写的程序是怎么在计算机中运行起来的,希望有个完整的思路,现在通过网络收集和整理了这个问题,相当于对这个问题又做了一个认识,有了新的体会。以stm32单片…

Go 语言切片是如何扩容的?

原文链接: Go 语言切片是如何扩容的? 在 Go 语言中,有一个很常用的数据结构,那就是切片(Slice)。 切片是一个拥有相同类型元素的可变长度的序列,它是基于数组类型做的一层封装。它非常灵活&am…

VCS4 debug with DVE

1、重点讲解: 在verilog源代码中嵌入VCD 系统函数,重点如testbench文件中。VCD文件是VCS产生的仿真波形文件,未经压缩,占用空间较大。VCD是压缩后的波形文件。 编译、仿真以生成VCD文件。 在后处理模式中使用激活DVElog对产生的…

【Javaee】SpringMVC_day01

文章目录1,SpringMVC简介1.1 SpringMVC概述2,SpringMVC入门案例2.1 需求分析2.2 案例制作步骤1:创建Maven项目,并导入对应的jar包步骤2:创建控制器类步骤3:创建配置类步骤4:创建Tomcat的Servlet容器配置类步骤5:配置Tomcat环境步骤6:启动运行…

JS字符串对象

、 JS字符串对象 1.1 内置对象简介 在 JavaScript 中,对象是非常重要的知识点。对象可以分为两种:一种是“自定义对象”外一种是“内置对象”。自定义对象,指的是需要我们自己定义的对象,和“自定义函数”是一些道理;内置对象,…

力扣刷题笔记26——最小的k个数/快速排序学习/快排与冒泡的时间复杂度

最小的k个数/快速排序学习/快排与冒泡的时间复杂度问题我的代码示例代码快速排序代码问题 来自力扣: 输入整数数组 arr ,找出其中最小的 k 个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。示例 …

1672_MIT 6.828 xv6中如何通过构建环境让系统中增加一个可执行调用文件

全部学习汇总: GreyZhang/g_unix: some basic learning about unix operating system. (github.com) 前面已经分析了如何实现一个系统调用,这个过程的梳理也已经整理成了一份学习笔记。这一次看一下,如何让OS的系统中增加这样的一个可执行的文…

10.网络爬虫—MongoDB详讲与实战

网络爬虫—MongoDB详讲与实战MongoDBMongoDB安装创建数据目录1.数据库操作2.集合操作3.文档操作4.索引操作5.聚合操作6.备份与恢复MongoDB增删改查mongodb集合的增删改查数据插入到表数据的查看删除数据更新数据PyMongo连接数据库第二步 选择需要使用的数据库和集合PyMongo增删…

公司分布式锁加锁错误原因

目录一、问题二、问题复现三、为什么产生这个错误四、解决方案一、问题 第一次设置锁成功, 但是返回false, 后续在循环获取的时候, 因为已经设置成功, 调用setIfAbsent不会返回true, 导致等锁3s失败 private boolean lockWait(String key, long wait, long expire) { long tot…

【CV】Latent diffusion model 扩散模型体验

note 文章目录note一、diffusion模型1.1 Stable Diffusion简介1.2 和GAN对比的优势二、Latent diffusion model原理2.1 潜在空间(Lantent Space)2.2 自动编码器和U-Net2.3 文本编码器三、代码实践3.1 模型权重checkpoints3.2 Stable Diffusion v1模型推理3.3 安装Stable Diffus…

再见了,我的C!

本人的第一篇博客发布于1月份,现在已经4月份了,历时3个月,,已经将C语言涵盖的大多数C语言知识点系统性的整理了出来,在这个期间自己收获了很多,这是C语言的最后一篇文章,接下来我们来回顾一下我…