Redis - 为什么我要来安利你学习 Redis ?

news/2025/3/20 17:27:49/

目录

前言

一、Redis 的特性(优点)

1. Redis 是在内存中存储数据的

2.可编程性

3.可扩展性

4.持久化

5.支持集群

6.高可用

二、Redis 为什么快?

三、 Redis 使用场景

优势场景

1.将 Redis 当作数据库

2.作为缓存和存储 session 信息

3. 消息队列

劣势场景 

四、Redis不能做的事情?


前言


主要是,她是真的快啊!!!

Redis 是一个使用内存存储数据的中间件,一般作为 内存数据库、缓存、消息队列,接下来就具体带你了解一下她的特性以及使用场景,是真的香~

一、Redis 的特性(优点)


1. Redis 是在内存中存储数据的

 在内存中存储数据相比于在硬盘中存储数据最大的优点就是 “快” !

并且我们知道, MySQL 主要是通过 “表” 的方式来存储组织数据的 “关系型数据库”,而 Redis 主要是通过 “键值对” 的方式来存储组织数据的 “非关系型数据库”  ,Redis 这样处理数据带来的好处就是底层数据操作简单,访问和存储的速度快!

Redis 存储的 key 都是 string 类型,value 则可以是上图中描述的数据结构~

2.可编程性

如何理解可编程性呢?针对 Redis 的操作可以直接通过见到那的交互命令进行操作,也可以通过一些脚本的方式(比如说 lua "读作:撸啊" 这个编程语言来实现),批量执行一些操作(可以带有一些逻辑)。

3.可扩展性

可扩展性也就是说可以在 Redis 原有的功能基础上通过 C、C++、Rust 这些语言编写 Redis 扩展(本质上就是动态链接库,也就是 windows 上的 .dll ,可以让 .exe 去调用里面很多的代码,Linux 上的动态库是 .so 虽然和 .dll 格式不同,但本质是一样的),比如 Redis 自身已经提供了很多数据结构和命令,通过扩展让 Redis 支持更多的数据结构和更多的命令~

4.持久化

如果单纯的再内存中存储数据是很容易丢失的(进程退出/系统重启),因此 Redis 可以把数据存储字硬盘上(内存为主、硬盘为辅),硬盘相当于是对数据备份了一下,如果 Redis 重启了,就会再重启时加载硬盘中备份的数据,加载到内存中,使数据恢复如初~

5.支持集群

Redis 作为一个分布式系统中间件,能够支持集群式很关键的, 上图中提到的 Horizontal 就是它具有水平扩展能力,类似于 “分库分表”。

具体的,一个 Redis 能存储的数据是有限的(内存空间有限)引入多个主机,部署多个 Redis 结点,每个 Redis 存储数据的一部分。

6.高可用

Redis 是支持 “主从” 结构的,从节点相当于对主节点的备份,这样即使哪一个 Redis 主结点挂了也不至于整体瘫痪,可以将从节点提升为主节点,因而更快的修复~

二、Redis 为什么快?


  1. Redis 数据在内存中,就比访问硬盘的数据库要快很多.
  2. Redis 核心功能都是一些比较简单的逻辑,都是简单的操作内存中的数据结构.
  3. Redis 从网路角度上,使用了 IO 多路复用的方式(epoll),也就是使用一个线程管理多个 socket.
  4. Redis 使用的是单线程模型(更高的版本使用的多线程),这样的单线程模型,减少了不必要的线程之间竞争的开销(线程并不是越多越好,多线程提高效率的前提是,CPU 密集型任务,使用多个线程可以充分利用 CPU 多核资源,当你的 CPU 吃满了,再多的线程来了不但浪费,而且还会提高加锁竞争的概率,大大降低效率)。
  5. 网上还有一种说法是 Redis 是使用 C 语言开发,所以快。这点我个人不是很认可,因为 MySQL 也是同样也是 C 语言开发的,凭什么 Redis 就更快呢?

三、 Redis 使用场景


优势场景

1.将 Redis 当作数据库

虽然大多数情况下数据的存储有限考虑到是 “大”,但是仍然有些场景考虑的是 “快”,“快”的这些场景就需要使用 redis 作为数据库来进行存储了~

2.作为缓存和存储 session 信息

作为缓存,使用 “二八原则”,也就是说,使用 MySQL 用来存储全量数据,把热点数据提取出来存储在 redis 上,这样不仅充分利用了两者的优点,还使得 redis 一旦宕机数据丢失,还可以从 mysql 这边再加载回来.

作为 session 信息存储的仓库,是因为我们之前 session 信息是存储在应用服务器上的,而对于有多个应用服务器的分布式系统来说就存在一个问题,当用户再次发起登录请求时,负载均衡该去哪个应用服务器上寻找 session 信息?如下图:

解决办法有以下两种:

1.想办法让负载均衡器把同一个用户的请求始终打到同一个机器上(通过 userid 的方式来分配),但存在一个问题就是应用程序一旦重启,会话就会丢失.

2.把会话单独拎出来,放在一独立的机器 Redis 上来存储,即使应用程序重启了,会话也不丢失,如下图

3. 消息队列

基于这个就可以实现一个网络版的 生产者 消费者 模型~

对于分布式系统来说,服务器和服务器之间,有时也需要使用生产者和消费者模型,因为他是针对香,有以下两个优势:

  • 1.解耦合
  • 2.削峰填谷

但是业界也有很多知名中间件,提供了更强劲的消息队列: RabbitMQ、Kafka...... 那为什么还要使用 Redis 的消息队列呢?

如果当前场景中,对于消息队列的功能依赖不是很多,但又不想引入额外的依赖了, redis 可以作为一个选择~

劣势场景 

咱么说 redis 快,是相对于 mysql 这种关系型数据库的,但是相比较于在直接在内存中操作变量(例如创建一个变量并赋值)相比就要慢很多了,因为 redis 是先通过网络,再操作内存.

例如场景:存储用户访问量,点赞数量,那么是使用 redis 来存,还是直接在内存中创建一个 hashmap 来存呢?

对于上述场景,是否需要使用 redis 是要根据实际的需求来确定的:

  • 劣势:引入 redis 的缺点就是会更慢 .
  • 优势:1.有了 redis 之后,就可以把数据单独存储,后续应用服务器重启也不会影响到数据内容。2.未来要扩展成分布式系统,使用 redis 自然是更好的~

四、Redis不能做的事情?


存储大规模的数据~

实际的开发中,我们还是主要以 MySQL 为主(存储全量数据), Redis 为辅的(存储热点数据,例如 session 信息)~

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

相关文章

并发编程初解

1.概述 java是最先支持多线程开发的语言之一,多线程技术使得程序的响应更快,可以再进行其他工作的同时一直处于活动状态。 性能提升的本质就是榨取硬件的剩余价值即就是提高硬件的利用率。 并发编程所带来的问题: 安全性问题(访问…

原生JS实现腾讯视频轮播图

给大家分享一个用原生JS实现的腾讯视频轮播图特效,实现效果如下: 以下是代码实现,欢迎大家复制粘贴。 <!DOCTYPE html> <html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>原生…

Elasticsearch使用就是如此的简单

前言 项目地址&#xff1a;https://gitee.com/charlinchenlin/wysmall Elasticsearch 是一个分布式、高扩展、高实时的搜索与数据分析引擎。它能很方便的使大量数据具有搜索、分析和探索的能力。充分利用Elasticsearch的水平伸缩性&#xff0c;能使数据在生产环境变得更有价值…

Day05—JDBC操作事务与数据库连接池

一&#xff1a;JDBC操作事务 1.1&#xff1a;事务异常回滚 事务控制 连接.setAutoCommit(false); 开启事务 连接.rollback(); 连接.commit(); connection.setAutoCommit(false); connection.setAutoCommit(true); Testpublic void test01() throws SQLException, IOException,…

Spark Core

Spark Core 1.1 第一天介绍发展、特性。 1.2 安装了standalone模式&#xff1a;伪分布式 1.3 部署模式——local、standalone、yarn模式。 mesos、云… 1.4 编码&#xff1a;java、lambda、scala 1.5 底层执行流程 Scala 2.1 集合 Array &#xff1a; 长度可变。长度不可变 Se…

day20(php和mysql)

typora-copy-images-to: img typora-root-url: img 服务器[了解] 前言&#xff1a;通俗的讲&#xff0c;能够提供某种服务的机器&#xff08;计算机&#xff09;称为服务器 服务器软件 使计算机具备提供某种服务能力的应用软件&#xff0c;称为服务器软件&#xff0c; 通过安装…

HTML5期末大作业【红色的电影售票平台网站】web前端 html+css+javascript网页设计实例 企业网站制作

HTML实例网页代码, 本实例适合于初学HTML的同学。该实例里面有设置了css的样式设置&#xff0c;有div的样式格局&#xff0c;这个实例比较全面&#xff0c;有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代码的过程来实践设计。 文章目录 一、网页介绍一…

利用存放在数组里的对象来渲染生成表格

完整效果 首先渲染把头部和尾部渲染到页面中 渲染头部document.write(<table> <caption>学生详细信息</caption><tr><th>序号</th><th>姓名</th><th>年龄</th><th>性别</th><th>地址</th>…