【redis】redis的特性和主要应用场景

文章目录

  • redis 的特性
    • 在内存中存储数据
    • 可编程的
    • 扩展能力
    • 持久化
    • 集群
    • 高可用
  • redis 的应用场景
    • 实时数据存储
    • 缓存
    • 消息队列

redis 的特性

redis 的一些特性(优点)成就了它

在内存中存储数据

  • In-memory data structures

MySQL 主要是通过“表”的方式来存储组织数据的“关系型数据
Redis 主要是通过“键值对”的方式来存储数据的“非关系型数据库

  • key 都是 String
  • value 则可以是这些数据结构(stringhasheslistssetssorted setsstreams,and more)

可编程的

  • Programmability
    针对 Redis 的操作,可以直接通过简单的交互式命令进行操作,也可以通过一些脚本的方式,批量执行一些操作(可以带有一些逻辑)
  • 主要是使用 Lua 语言

扩展能力

  • Extensibility
    可以在 Redis 原有的功能基础上,再进行扩展。Redis 提供了一组 API,可以通过 CC++Rust 这几个语言编写 Redis 扩展(本质上就是第一个动态链接库)
  • Windows 上的 .dll(动态链接库),里面包含很多的函数和代码,去给 exe 调用
  • LInux 上的动态库是 .so,虽然和 dll 格式不同,但本质是一样的

这个特性可以让我们自己去扩展 Redis 的功能。比如,Redis 自身已经提供了很多的数据结构和命名,通过扩展,让 Redis 支持更多的数据结构以及支持更多的命令

持久化

  • Persistence
    Redis 是把数据存储在内存上的,为了能更快速地访问。但内存上的数据是“易失的“(当进程退出/系统重启,数据就会丢失)

Redis 会把数据存储在硬盘上,内存为主,硬盘为辅(硬盘相当于对内存的数据备份了一下)。如果 Redis 重启了,就会在重启的时候加载硬盘中的备份数据,使 Redis 的内存回复到启动前的状态

集群

  • Clustering
    Redis 作为一个分布式系统的中间件,能够支持集群是很关键的

一个 Redis 能存储的数据是有限的(内存空间有限)。如果要存储更多的数据,就可以引入多个主机,部署多个 Redis 节点,每个 Redis 存储数据的一部分

高可用

  • High availability

核心就是“冗余/备份
Redis 自身也使支持“主从”结构,从节点就相当于主节点的备份,当主节点挂了,从节点就能顶上去,代替主节点。这样就能保证系统可用性是很高的。当主节点挂了用户也感知不到,因为在这挂的一瞬间,从节点就顶上去了

天下武功,唯快不破!但为什么 Redis 快?

  1. Redis 数据在内存中,就比访问硬盘的数据库速度要快很多

  2. Redis 核心功能都是比较简单的逻辑,功能都是比较简单的操作内存的数据结构

  3. 从网络角度上,Redis 使用了 IO多路复用 的方式(epoll
    IO多路复用 就是使用一个线程,管理多个 Socket。这样就可以在系统资源开销比较小的情况下,可以比较高效的处理比较高的并发量

  4. Redis 使用的是单线程模型(虽然更高版本的 Redis 引入了多线程)
    这样的单线程模型,减少了不必要的线程之间的竞争开销
    多线程提高效率的前提是:这是一个 CPU 密集型的任务,使用多个线程可以充分的利用多核资源。但是对于 Redis 来说,它的主要核心任务主要就是操作内存的数据结构,不会吃很多 CPU

redis 的应用场景

实时数据存储

  • Real-time data store
    Redis 当做了数据库,按照键值对存储数据。(低延迟、高吞吐情况)存的是全量数据,这里的数据不能随便丢
    大多数情况下,考虑到数据存储,优先考虑的是“”,但是仍然有一些场景,考虑的是“

缓存

  • Caching
    使用 MySQL 来存储数据,大、慢。使用二八原则,把热点数据拎出来,存储在 redis 中,把其他数据还是放在 MySQL
    redis 里面存的是部分数据,全量数据都是以 MySQL 为主的,哪怕 redis 里面的数据没有了,还可以从 MySQL 中再加载回来

  • session storage
    cookie 实现用户身份信息的保存,需要 session 配合
  • session 在服务器这里真正的存储了用户数据
  • cookie 只是在浏览器里存储了一个用户的身份标识(sessionId
    之前 session 是存储在应用服务器上的,但现在变成了分布式系统,引入了负载均衡

image.png|405
第一次客户端发出请求,负载均衡器将请求传到应用服务器 A,进行登录操作。登录成功之后,应用服务器就会生成当前用户的会话
但下次这个用户再次访问的时候,负载均衡器就可能将请求传到应用服务器 B,而这个应用服务器又没有这个用户上次进行访问产生的相关会话,难倒要再登录一次吗?
如何解决上述问题?

  1. 想办法让负载均衡器,把同一个用户的请求始终打到同一个机器上(不能轮询了,要通过 userId 之类的方式来分配机器)

  2. 把会话数据单独拎出来,放到一组独立的机器上存储image.png|447

  • 可以让应用服务器存到 redis 中,之后每一个应用服务器在读取会话或者写入会话的时候,都去访问这个 redis
  • 之后不管用户的请求打到那个应用服务器上,始终我们都是从 redis 中拿到会话,这样就能保证无论访问到哪台应用服务器上,会话数据都能被完整的拿到。
  • 万一应用程序重启了,会话也不会丢失

消息队列

  • Streaming & messaging
    此处说到的消息队列,是一个消息队列服务器。它是一个单独的服务器,起到消息队列的功能。基于这个服务器,我们就能实现一个网络版本的“生产者-消费者模型
    对分布式系统来说,服务器和服务器之间,有时候也需要使用到生产者消费者模型,因为有优势:
  1. 解耦合
  2. 削峰填谷
    业界也有很多知名的消息队列,RabbitMQ、Kafka、RocketMQ… redis 也是提供了消息队列的功能的,但一般不怎么使用。如果当前场景中,对于消息队列的功能依赖的不是很多,并且又不想引入额外的依赖,redis 可以作为一个选择

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

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

相关文章

JavaEE-HTTPHTTPS

目录 HTTP协议 一、概念 二、http协议格式 http请求报文 http响应报文 URL格式 三、认识方法 四、认识报头 HTTP响应中的信息 HTTPS协议 对称加密 非对称加密 中间人攻击 解决中间人攻击 HTTP协议 一、概念 HTTP (全称为 "超⽂本传输协议") 是⼀种应⽤…

WEB项目解决CORS 跨域问题

为了安全,web默认是不允许跨域访问的。不过实际项目中,会遇到不同模块之间来回跳转的情况。所以,项目内部一般会修改配置或者代码来解决CORS跨域问题。 我的后端使用的是 Jetty 服务器,所以下面就拿jetty来举例。Jetty 提供了一个…

14.2 k8s中我们都需要监控哪些组件

本节重点介绍 : k8s中关注四大块指标总结 容器基础资源指标k8s资源指标k8s服务组件指标部署在pod中业务埋点指标 k8s关注指标分析 k8s中组件复杂,我们主要专注的无外乎四大块指标: 容器基础资源指标 为何关注这些指标 我们的应用从独享一台机器上…

springboot组件使用-mybatis组件使用

文章目录 springboot使用mybatis组件1. 添加依赖2. 配置数据源3. 创建实体类4. 创建Mapper接口5. 创建Mapper XML文件6. 使用Mapper7. 启动类配置 mybtis 动态SQL1. Mapper 注解2. Select 注解3. Insert 注解4. Update 注解5. Delete 注解6. Results 注解7. Param 注解8. Cache…

Mysql中的锁机制详解

一、概述 锁是计算机协调多个进程或线程并发访问某一资源的机制。 在数据库中,除了传统的计算资源(如CPU、RAM、I/O等)的争用以外,数据也是一种供需要用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决…

一文讲懂Spring Event事件通知机制

目录 一 什么是spring event 二 怎么实现spring event 一 什么是spring event 我不会按照官方的解释来说什么是spring event,我只是按照自己的理解来解释,可能原理上会和官方有偏差,但是它的作用和功能就是这个,我更加偏向于从他…

Rust:Restful API 服务程序开发详述

0. 关于异步程序设计 0.1 对异步机制的理解 运行效率对于后端程序来讲很重要。我曾经以为,多线程机制是后端设计的终极方法,后来才发现,异步机制才是榨干 CPU 运行效率资源的关键所在。 我最初对于异步程序设计有误解,以为多线…

详解React setState调用原理和批量更新的过程

1. React setState 调用的原理 setState目录 1. React setState 调用的原理2. React setState 调用之后发生了什么?是同步还是异步?3. React中的setState批量更新的过程是什么? 具体的执行过程如下(源码级解析)&#x…

安卓13带有系统签名的应用不能正常使用webview 调用webview失败 系统应用app apk

总纲 android13 rom 开发总纲说明 文章目录 1.前言2.问题分析3.代码分析4.代码修改5.彩蛋1.前言 android版本高一些的平台,经常会遇到一些权限安全问题,像客户的应用如果带有系统签名,会导致不能正常使用webview问题。 2.问题分析 我们log信息,可以发现下面的提示: Fo…

网络层ip协议

一.概念 ip协议主要是为了在复杂的网络环境中确定一个合适的路径来传输主机间的数据。简单来说就是用来确定主机的位置。 ip协议中的一些设备如下: 主机: 配有 IP 地址, 但是不进行路由控制的设备;路由器: 即配有 IP 地址, 又能进行路由控制;节点: 主机和路由器的统…

分库分表:应对大数据量挑战的数据库扩展策略

随着互联网技术的发展,数据量的爆炸性增长给数据库系统带来了前所未有的挑战。为了有效管理大规模数据并保持高性能,分库分表成为了一种常见的数据库扩展策略。本文将探讨分库分表的概念、动机、实施策略以及潜在的挑战和解决方案。 什么是分库分表&…

传统CV算法——边缘算子与图像金字塔算法介绍

边缘算子 图像梯度算子 - Sobel Sobel算子是一种用于边缘检测的图像梯度算子,它通过计算图像亮度的空间梯度来突出显示图像中的边缘。Sobel算子主要识别图像中亮度变化快的区域,这些区域通常对应于边缘。它是通过对图像进行水平和垂直方向的差分运算来…

5.2.数据结构-c/c++二叉树详解(下篇)(算法面试题)

本章所有代码请见:5.3.数据结构-c/c二叉树代码-CSDN博客 上篇:5.数据结构-c/c二叉树详解(上篇)(遍历方法,完全二叉树)-CSDN博客 目录 1 求二叉树 第k层的节点 2 查找一个节点是否在二叉树中 3 求二叉树节点的个数 4 求二叉树…

Linux 删除 当前下的 mysql-8.0.31 空文件夹

在Linux中,如果你想要删除当前目录下的名为mysql-8.0.31的空文件夹(即该文件夹内没有任何文件或子文件夹),你可以使用rmdir命令。但是,如果mysql-8.0.31文件夹并非完全为空(即它包含文件或子文件夹&#xf…

在js中观察者模式讲解

在JavaScript中,观察者模式(Observer Pattern)是一种设计模式,允许一个对象(被观察者,Subject)维护一个依赖它的对象列表(观察者,Observer),并在它自身状态发生变化时自动通知这些观察者。观察者模式的典型使用场景包括事件系统、数据绑定和实时更新等情况。 一 、…

.Net Core 笔试1

1、用两个线程一个输出字母一个输出数字,交替输出Chat数组 char[] aI "1234567".ToCharArray();char[] aC "ABCDEFG".ToCharArray();Task task1 null;Task task2 null;task1 Task.Run(() >{foreach (var item in aI){Console.WriteLine…

数据结构(邓俊辉)学习笔记】排序 1——快速排序:算法A

文章目录 1. 分而治之2. 轴点3. 构造轴点4. 单调性 不变性5. 实例 1. 分而治之 主题就是排序。实际上我们对于排序问题并不陌生。你应该记得在最开始的几章,我们就分别介绍过起泡排序、插入排序、选择排序以及归并排序,而在介绍散列技术时,我…

自定义TextView实现结尾加载动画

最近做项目,仿豆包和机器人对话的时候,机器人返回数据是流式返回的,需要在文本结尾添加加载动画,于是自己实现了自定义TextView控件。 源码如下: import android.content.Context import android.graphics.Canvas imp…

Html、Css3动画效果

文章目录 第九章 动画9.1 transform动画9.2 transition过渡动画9.3 定义动画 第九章 动画 9.1 transform动画 transform 2D变形 translate():平移函数,基于X、Y坐标重新定位元素的位置 scale():缩放函数,可以使任意元素对象尺…

【系统架构设计师-2010年】综合知识-答案及详解

更多内容请见: 备考系统架构设计师-核心总结索引 文章目录 【第1题】【第2题】【第3题】【第4~5题】【第6题】【第7~8题】【第9题】【第10题】【第11题】【第12题】【第13题】【第14题】【第15题】【第16题】【第17题】【第18题】【第19题】【第20题】【第21题】【第22题】【第…