超详细Redis入门教程——Redis概述

news2025/1/20 5:50:04

前言

在这里插入图片描述

本文小新为大家带来 超详细Redis入门教程——Redis概述 相关知识,具体内容包括Redis简介Redis的用途Redis的特性Redis的IO模型(包括:单线程模型混合线程模型多线程模型优缺点总结)等进行详尽介绍~

不积跬步,无以至千里;不积小流,无以成江海。每天进步一点点,在成为强者的路上,小新与大家共同成长!

📌博主主页:小新要变强 的主页
👉Java全栈学习路线可参考:【Java全栈学习路线】最全的Java学习路线及知识清单,Java自学方向指引,内含最全Java全栈学习技术清单~
👉算法刷题路线可参考:算法刷题路线总结与相关资料分享,内含最详尽的算法刷题路线指南及相关资料分享~
👉Java微服务开源项目可参考:企业级Java微服务开源项目(开源框架,用于学习、毕设、公司项目、私活等,减少开发工作,让您只关注业务!)


目录

超详细Redis入门教程——Redis概述

  • 前言
  • 目录
  • 一、Redis简介
    • 1️⃣Redis简介
    • 2️⃣NoSQL简介
  • 二、Redis的用途
  • 三、Redis的特性
  • 四、Redis的IO模型
    • 1️⃣单线程模型
    • 2️⃣混合线程模型
    • 3️⃣多线程模型
    • 4️⃣优缺点总结
  • 后记

在这里插入图片描述

一、Redis简介

1️⃣Redis简介

在这里插入图片描述

Redis,Remote Dictionary Server,远程字典服务,由意大利人 Salvatore Sanfilippo(又名 Antirez)开发,是一个使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、NoSQL 开源内存数据库,其提供多种语言的 API。从 2010 年 3 月 15 日起,Redis 的开发工作由 VMware 主持。从2013 年 5 月开始,Redis 的开发由 Pivotal 赞助。

Redis 之所以称之为字典服务,是因为 Redis 是一个 key-value 存储系统。支持存储的 value类型很多,包括 String(字符串)、List(链表)、Set(集合)、Zset(sorted set --有序集合)和 Hash(哈希类型)等。

Redis 的国际知名用户有,Twitter、GitHub、Facebook 等,国内知名用户有,阿里巴巴、腾讯、百度、搜狐、优酷、美团、小米等。熟练使用和运维 Redis 已经成为开发运维人员的一个必备技能。

2️⃣NoSQL简介

NoSQL(“non-relational”, “Not Only SQL”),泛指非关系型的数据库。随着互联网 web2.0网站的兴起,传统的关系数据库在处理 web2.0 网站,特别是超大规模和高并发的 SNS 类型的 web2.0 纯动态网站已经显得力不从心,出现了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL 数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,特别是大数据应用难题。

🍀(1) 键值存储数据库

就像 Map 一样的 key-value 对。典型代表就是 Redis。

🍀(2)列存储数据库

关系型数据库是典型的行存储数据库。其存在的问题是,按行存储的数据在物理层面占用的是连续存储空间,不适合海量数据存储。而按列存储则可实现分布式存储,适合海量存储。典型代表是 HBase。

🍀(3) 文档型数据库

其是 NoSQL 与关系型数据的结合,最像关系型数据库的 NoSQL。典型代表是 MongoDB。

🍀(4) 图形(Graph)数据库

用于存放一个节点关系的数据库,例如描述不同人间的关系。典型代表是 Neo4J。

二、Redis的用途

Redis 在生产中使用最多的场景就是做数据缓存。即客户端从 DBMS 中查询出的数据首先写入到 Redis 中,后续无论哪个客户端再需要访问该数据,直接读取 Redis 中的即可,不仅减小了 RT,而且降低了 DBMS 的压力。

在这里插入图片描述

根据 Redis 缓存的数据与 DBMS 中数据的同步性划分,缓存一般可划分为两类:实时同步缓存,与阶段性同步缓存。

实时同步缓存是指,DBMS 中数据更新后,Redis 缓存中的存放的相关数据会被立即清除,以促使再有对该数据的访问请求到来时,必须先从 DBMS 中查询获取到最新数据,然后再写入到 Redis。

阶段性同步缓存是指,Redis 缓存中的数据允许在一段时间内与 DBMS 中的数据不完全一致。而这个时间段就是这个缓存数据的过期时间。

三、Redis的特性

能够做缓存的技术、中间件很多,例如,MyBatis 自带的二级缓存、Memched 等。只所以在生产中做缓存的产品几乎无一例外的会选择Redis,是因为它有很多其它产品所不具备的特性。

  • 性能极高: Redis 读的速度可以达到 11w 次/s,写的速度可以达到8w次/s。只所以具有这么高的性能,因为以下几点原因:(1)Redis 的所有操作都是在内存中发生的。(2)Redis 是用 C语言开发的。(3)Redis 源码非常精细(集性能与优雅于一身)。
  • 简单稳定: Redis 源码很少。早期版本只有 2w 行左右。从 3.0 版本开始,增加了集群功能,代码变为了 5w 行左右。
  • 持久化: Redis 内存中的数据可以进行持久化,其有两种方式:RDB 与 AOF。
  • 高可用集群: Redis 提供了高可用的主从集群功能,可以确保系统的安全性。
  • 丰富的数据类型: Redis 是一个 key-value 存储系统。支持存储的 value 类型很多,包括String(字符串)、List(链表)、Set(集合)、Zset(sorted set --有序集合)和 Hash(哈希类型)等,还有BitMap、HyperLogLog、Geospatial 类型。
    • BitMap:一般用于大数据量的二值性统计。
    • HyperLogLog:其是 Hyperlog Log,用于对数据量超级庞大的日志做去重统计。
    • Geospatial:地理空间,其主要用于地理位置相关的计算。
  • 强大的功能: Redis 提供了数据过期功能、发布/订阅功能、简单事务功能,还支持 Lua 脚本扩展功能。
  • 客户端语言广泛: Redis 提供了简单的 TCP 通信协议,编程语言可以方便地的接入Redis。所以,有很多的开源社区、大公司等开发出了很多语言的 Redis 客户端。
  • 支持 ACL 权限控制: 之前的权限控制非常笨拙。从 Redis6 开始引入了 ACL 模块,可以为不同用户定制不同的用户权限。(ACL,Access Control List,访问控制列表,是一种细粒度的权限管理策略,可以针对任意
    用户与组进行权限控制。目前大多数 Unix 系统与 Linux 2.6 版本已经支持 ACL 了。Zookeeper 早已支持 ACL 了。 Unix 与 Linux 系统默认使用是 UGO(User、Group、Other)权限控制策略,其是一种粗粒度的权限管理策略。 )
  • 支持多线程 IO 模型: Redis 之前版本采用的是单线程模型,从 6.0 版本开始支持了多线程模型。

四、Redis的IO模型

Redis 客户端提交的各种请求是如何最终被 Redis 处理的?Redis 处理客户端请求所采用的处理架构,称为 Redis 的 IO 模型。不同版本的 Redis 采用的 IO 模型是不同的。

1️⃣单线程模型

对于 Redis 3.0 及其以前版本,Redis 的 IO 模型采用的是纯粹的单线程模型。即所有客户端的请求全部由一个线程处理。

在这里插入图片描述

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

对于多路复用器的多路选择算法常见的有三种:select 模型、poll 模型、epoll 模型。

  • poll 模型的选择算法:采用的是轮询算法。该模型对客户端的就绪处理是有延迟的。
  • epoll 模型的选择算法:采用的是回调方式。根据就绪事件发生后的处理方式的不同,又可分为 LT 模型与 ET 模型。

每个客户端若要向 Redis 提交请求,都需要与 Redis 建立一个 socket 连接,并向事件分发器注册一个事件。一旦该事件发生就表明该连接已经就绪。而一旦连接就绪,事件分发器就会感知到,然后获取客户端通过该连接发送的请求,并将由该事件分发器所绑定的这个唯一的线程来处理。如果该线程还在处理多个任务,则将该任务写入到任务队列等待线程处理。 只所以称为事件分发器,是因为它会根据不同的就绪事件,将任务交由不同的事件处理器去处理。

2️⃣混合线程模型

从 Redis 4.0 版本开始,Redis 中就开始加入了多线程元素。处理客户端请求的仍是单线程模型,但对于一些比较耗时但又不影响对客户端的响应的操作,就由后台其它线程来处理。

例如,持久化、对 AOF 的 rewrite、对失效连接的清理等。

3️⃣多线程模型

Redis 6.0 版本,才是真正意义上的多线程模型。因为其对于客户端请求的处理采用的是多线程模型。

在这里插入图片描述

多线程 IO 模型中的“多线程”仅用于接受、解析客户端的请求,然后将解析出的请求写入到任务队列。而对具体任务(命令)的处理,仍是由主线程处理。这样做使得用户无需考虑线程安全问题,无需考虑事务控制,无需考虑像 LPUSH/LPOP 等命令的执行顺序问题。

4️⃣优缺点总结

🍀(1) 单线程模型

  • 优点: 可维护性高,性能高。不存在并发读写情况,所以也就不存在执行顺序的不确定性,不存在线程切换开销,不存在死锁问题,不存在为了数据安全而进行的加锁/解锁开销。
  • 缺点: 性能会受到影响,且由于单线程只能使用一个处理器,所以会形成处理器浪费。

🍀(2) 多线程模型

  • 优点: 其结合了多线程与单线程的优点,避开了它们的所有不足 。
  • 缺点: 该模型没有显示不足。如果非要找其不足的话就是,其并非是一个真正意义上的“多线程”,因为真正处理“任务”的线程仍是单线程。所以,其对性能也是有些影响的。

后记

在这里插入图片描述

👉Java全栈学习路线可参考:【Java全栈学习路线】最全的Java学习路线及知识清单,Java自学方向指引,内含最全Java全栈学习技术清单~
👉算法刷题路线可参考:算法刷题路线总结与相关资料分享,内含最详尽的算法刷题路线指南及相关资料分享~

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

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

相关文章

FPGA基于SFP光口实现1G千兆网UDP通信 1G/2.5G Ethernet PCS/PMA or SGMII替代网络PHY芯片 提供工程源码和技术支持

目录1、前言2、我这里已有的UDP方案3、详细设计方案4、vivado工程详解5、上板调试验证并演示6、福利:工程代码的获取1、前言 目前网上的fpga实现udp基本生态如下: 1:verilog编写的udp收发器,但不带ping功能,这样的代码…

【部署】openvino2023环境配置

1. 下载 官网下载,我的选项如下: 2.配置 2.1. 在visual studio的配置 下载vs2017或者是vs2022 新建一个c项目。选择控制台应用视图–》解决方案资源管理器 在源文件下创建main.cpp文件视图–》其他窗口–》属性管理器 右键Release 添加新项目属性表…

RocketMQ单机环境搭建测试

1.资源下载 官网:下载 | RocketMQ 这里选择使用编译后可以直接用的 下载后解压:略 2.更改配置 主要是更改 conf/broker.conf 的配置,记得添加上下面这几行,否则消息发送失败 autoCreateTopicEnabletrue # 支持自动创建topic…

GitHub重量上线,开源分布式架构原理设计笔记分享

在分布式系统中,一次业务处理可能需要多个应用来实现,比如用户发送一次下单请求,就涉及到订单系统创建订单,库存系统减库存,而对于一次下单,订单创建与减库存应该是要同时成功或者同时失效,但在…

大气颗粒物PMF源解析

详情点击链接:大气颗粒物PMF源解析 一,PMF源解析技术及其输入文件准备 1、大气污染源解析方法有哪些? 2、这些方法各自应用的条件以及它们的优缺点? 3、大气颗粒物的基础知识及各组分的主要来源 大气颗粒物的来源&#xff1a…

逆序对问题的两种求解思路(归并排序和树状数组)

前言:我们在求解逆序对问题时题目往往会给我们加大数据量,防止我们以暴力的方式通过该题,所以在遇到有关求解逆序对问题的时候,我们有必要知道一些具体的优化方法,对于逆序对我们,我们一般的会有两种标准求…

Python实现GWO智能灰狼优化算法优化XGBoost分类模型(XGBClassifier算法)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 灰狼优化算法(GWO),由澳大利亚格里菲斯大学学者 Mirjalili 等人于2014年提出来的一种群智能…

天猫数据分析软件(天猫销售数据如何查询)

俗话说得好:“知己知彼,百战不殆”。当前,在天猫店铺运营中,大家也非常注重数据分析,由此能够了解到竞争对手及整个行业的销售数据及销售趋势。 一、具体来讲,做好天猫数据分析有哪些益处呢? 1、…

pytorch 数据类型

文章目录一、tensor如何表示字符串数据类型类型判断Dimension 0Dimension 1Dimension 2Dimension 3Dimension 4mixed二、创建Tensorimport from numpyimport from listuninitialized 未初始化set default typerand/rand_like, randintfulllinspaceindex切片三、维度变换总结一、…

假期怕剧荒?五一假期追剧人正确打开方式

马上就是五一假期了 趁着假期必须狠狠刷剧才是我们追剧人正确的打开方式! 追剧人,追剧魂 追剧人就是快乐多! 俗话说,吃饭不能没有饭碗,那咱们追剧也不能没有好用的追剧平台啊! 之前因为要一次性追好几部…

React styled-components (一) —— 基本使用

https://github.com/styled-components/styled-components styled-components 基本使用介绍优点缺点安装引入使用基本用法样式嵌套介绍 styled-components 是一个针对 React 的 css in js 类库。 和所有同类型的类库一样,styled-components 通过 js 赋能解决了原生…

教你如何搭建物业-办公管理系统,demo可分享

1、简介 1.1、案例简介 本文将介绍,如何搭建物业-办公管理。 1.2、应用场景 该应用包含停车、收费、投诉、通知、访客等管理功能。 2、设置方法 2.1、表单搭建 1)新建表单【业主信息】,字段设置如下: 名称类型名称类型类型…

30天学会《Streamlit》(3)

30学会《Streamlit》是一项编码挑战,旨在帮助您开始构建Streamlit应用程序。特别是,您将能够: 为构建Streamlit应用程序设置编码环境 构建您的第一个Streamlit应用程序 了解用于Streamlit应用程序的所有很棒的输入/输出小部件 第3天 - st.…

京东技术专家首推:微服务架构深度解析,GitHub星标120K

前言 微服务经过了长足的发展,在每个阶段所产生的信息都很多。在信息爆炸的当今,找到一本将信息梳理得井井有条的好书,是提升学习效率的最佳途径。 本书层次分明,分为原理篇、实践篇和进阶篇,适用于广泛的人群。理论…

电子商务客户保留策略:如何让买家回头

潜在客户转换是电子商务企业主的一大胜利。然而,在您成功将潜在客户转化为客户之后,可以而且应该采取无数步骤。购买后的有效营销应该是您的首要任务。 您可能知道,获取新客户的成本高于留住现有客户的成本。因此,制定客户保留策略…

毅硕科技携手Sentieon独家赞助第21届亚太生物信息学大会(APBC 2023)

APBC介绍 亚太生物信息学大会(Asia Pacific Bioinformatics Conference, APBC)是一年一度的行业国际盛会,汇聚区域间生物信息学领域的学者、研究人员和产业领导者,共同探讨生物信息学领域的研究进展、技术发展和应用创新。自2003…

分布式计算技术(下):Impala、Apache Flink、星环Slipstream

实时计算的发展历史只有十几年,它与基于数据库的计算模型有本质区别,实时计算是固定的计算任务加上流动的数据,而数据库大多是固定的数据和流动的计算任务,因此实时计算平台对数据抽象、延时性、容错性、数据语义等的要求与数据库…

银河麒麟V10操作系统之root密码重置

一、需求说明 从kingbase工程师那拷贝了一个已经安装了kingbase数据库环境的虚拟机,只有一个kingbase普通账户,root密码位置,且该账户未加入到sudo组中,无法执行新软件等的安装和部署。为了满足需要,我们需要重置root密…

测试5年,从纯手工测试到测试开发,我是怎么拿到腾讯25koffer的?

什么都做了,和什么都没做其实是一样的,走出“瞎忙活”的安乐窝,才是避开弯路的最佳路径。希望我的经历能帮助到有需要的朋友。 在测试行业已经混了5个年头了,以前经常听到开发对我说,天天的点点点有意思没&#xff1f…

4.11---Mybatis之#{}和${}的区别(复习版本)

1、在MyBatis 的映射配置文件中,动态传递参数有两种方式: 1.#{} 占位符 2.${} 拼接符 2、#{} 和 ${} 的区别 #{} 为参数占位符 ?,即sql 预编译 ${} 为字符串替换,即 sql 拼接 #{}:动态解析 -> 预编译 -> 执行 $…