谈谈什么是 Redis


🔥博客主页:fly in the sky - CSDN博客
🚀欢迎各位:点赞👍+收藏⭐️+留言✍️🚀

🎆慢品人间烟火色,闲观万事岁月长🎆

📖希望我写的博客对你有所帮助,如有不足,请指正📖✍️

文章目录

  • Redis 官网页面
  • Redis 的简介
  • 分布式系统
    • 分布式的架构演进
    • 常见概念
  • Redis 的特性
    • 1. In-memory data structures
    • 2. Programmability
    • 3. Extensibility
    • 4. Persistence
    • 5. Clustering
    • 6. High availability
    • Redis 最大的特性:快
  • Redis 的应用
    • 把 redis 当做了数据库
    • 缓存和会话存储
    • 消息队列
  • Redis 客户端
    • 客户端-服务器结构
    • Redis 客户端的多种形态


Redis 官网页面

Redis官网链接

在这里插入图片描述



Redis 的简介

Redis 是一个在内存中存储数据的中间件
一方面用于作为数据库,另一方面用于作为数据缓存,适用于分布式系统中
Redis 基于网络,进行进程间通信,把自己内存中的变量给别的进程,甚至别的主机的进程进行使用

在这里插入图片描述

Redis 的初心: 是用来作为一个 “消息中间件” (消息队列)的,用于分布式系统下的生产者消费者模型,不过当前很少会直接使用 Redis 作为消息中间件了

Redis 通常和 MySQL 结合起来使用

MySQL 最大的问题在于,访问速度比较慢,很多互联网产品中,对于性能要求是很高;
Redis 可以作为数据库使用,最大的特点就是访问速度快!但是和 MySQL 相比,最大的劣势,就是存储空间有限;
通常情况下,最优的选择就是Redis 和 MySQL 的结合使用,当然还是要看使用场景的。

具体的使用原则采用“二八原则”:20%的热点数据,满足80%的访问需求



分布式系统

引入多个主机/服务器,协同配合完成一系列的工作
如 Web 服务器与数据库分别⼯作在不同的服务器上,或者多台 Web 服务器被分别部署在不同服务器上。
注:这里多个主机指的是物理上的多个主机

分布式的架构演进

请各位亲们,移步到博主的另一篇博客: docker 的八大技术架构(图解)

在这里插入图片描述

常见概念

应⽤(Application)/ 系统(System)
一个应用,就是一 个/组 服务器程序

模块(Module)/ 组件(Component)
—个应目里面有很多个功能,每个独立的功能,就可以称为是一个模块/组件

集群(Cluster)
引入多个主机/服务器,协同配合完成一系列的工作
注:这里的多个主机指的是逻辑上的多个主机

分布式 和 集群的区别:
分布式强调的是物理形态,即⼯作在不同服务器上并且通过⽹络通信配合完成任务;
⽽集群更在意逻辑形态,即是否为了完成特定服务⽬标。

主(Master)/ 从(Slave)
分布式系统中一种比较典型的结构:多个服务器节点,其中一个是主,另外的都是从。
从节点的数据要从主节点这里同步过来

中间件(Middleware)
提供和业务无关的服务的软件,比如:数据库;缓存;消息队列

评价指标(Metric)

  • 可用性(Availability): 系统整体可用的时间 / 总的时间
  • 响应时长(Response Time RT): 衡量服务器的性能,和具体服务器要做的业务密切相关的,数值越小越好
  • 吞吐(Throughput)vs 并发(Concurrent): 衡量系统的处理请求的能力,也是属于衡量性能的一种方式



Redis 的特性

官网核心特性的介绍页面
在这里插入图片描述

1. In-memory data structures

在内存中存储数据
在这里插入图片描述

MySQL 主要是通过“表"的方式来存储组织数据的,属于"关系型数据库";
Redis 主要是通过“键值对"(key 都是 string, value 则是上述的strings, hashes, lists, sets, sorted sets, streams)
的方式来存储组织数据的,属于"非关系型数据库"

2. Programmability

可编程性
在这里插入图片描述
针对Redis的操作,可以直接通过简单的交互式命令进行操作,也可以通过一些脚本的方式,批量执行一些操作(可以带有一些逻辑),在 Redis 主要支持 Lua(“橹啊”)这个编程语言

3. Extensibility

扩展
在这里插入图片描述
可以在 Redis 原有的功能基础上再进行扩展,Redis 提供了一组API,可以使用 C,C++,Rust 这几个语言编写 Redis 扩展(本质上是一个动态链接库)
自己去扩展 Redis 的功能,在 Redis 自身已经提供了很多的数据结构和命令下,可以通过扩展,让 Redis支持更多的数据结构以及支持更多的命令

4. Persistence

持久化

在这里插入图片描述
Redis 把数据存储在内存上的,由于内存的数据是“易失"的,进程退出/系统重启都会导致内存中的数据消失
解决:Redis 会把数据存储在硬盘上,以内存为主,硬盘为辅(硬盘相当于对内存的数据备份了一下);
如果 Redis 重启了,就会在重启时加载硬盘中的备份数据使 Redis 的内存恢复到重启前的状态

5. Clustering

在这里插入图片描述
Horizontal scalability:水平扩展,这个水平扩展,类似于"分库分表";
Redis 作为一个分布式系统中的中间件,能够支持集群是很关键的;
一个 Redis 能存储的数据是有限的(内存空间有限),引入多个主机,部署多个 Redis 节点,每个 Redis 节点存储数据的一部分

6. High availability

高可用 => 冗余/备份
Redis 自身也是支持"主从”结构的,从节点就相当于主节点的备份
在这里插入图片描述

Redis 最大的特性:快

快的原因:
1.Redis 数据是在内存中,比访问硬盘的数据库,要快很多
2.Redis 核心功能都是比较简单的逻辑 => 核心功能都是比较简单的操作内存中的数据结构
3.从网络角度上,Redis 使用了 IO 多路复用(epoll)的方式:使用一个线程来管理很多个socket
4.Redis 使用的是单线程模型(虽然更高版本的Redis引入了多线程),这样的单线程模型,减少了不必要的线程之间的竞争开销



Redis 的应用

在这里插入图片描述

把 redis 当做了数据库

Real-time data store
Redis’ versatile in-memory data structures enable building data infrastructure for real-time applications that require low latency and high-throughput

大多数情况下,考虑到数据存储,优先考虑的是"大",但是仍然有一些场景,考虑的是"快",比如用于广告搜索/商业搜索的搜索引擎,对性能要求是非常高的,把所有需要检索的数据都存储在内存中,就是使用 Reids 及其类似的这样的内存数据库完成的


缓存和会话存储

Caching & session storage
Redis’ speed makes it ideal for caching database queries, complex computations, API calls, and session state.

Caching
背景:使用 MySQL 数据库存数据,大,慢
解决方法:使用二八原则,把热点数据分出来,存储在 redis 中的
Redis 存部分数据,全量数据的存储以 mysql 为主的,哪怕 Redis 的数据没了,还可以从 mysql 这边再加载回来

session storage
http 协议的 cookie :实现用户身份信息的保存,只是在浏览器这边存储了一个用户的身份标识 sessionld
session: 在服务器中真正的存储的用户数据

在这里插入图片描述


消息队列

Streaming & messaging
The stream data type enables high-rate data ingestion, messaging, event sourcing, and notifications.

基于消息队列可以实现一个网络版本的生产者消费者模型
分布式系统来说,服务器和服务器之间,有时候也需要使用到生产者消费者模型的
优势:1.解耦合 2.削峰填谷
如果当前场景中,对于消息队列的功能依赖的不是很多,并且又不想引入额外的依赖了,Redis 可以作为一个选择

Redis 的缺点:不能存储大规模的数据



Redis 客户端

客户端-服务器结构

Redis 同 Mysql 一样,也是一个客户端-服务器结构的程序,结构如下图:
在这里插入图片描述
注:Redis 客户端和服务器可以在同一个主机上,也可以在不同主机上



Redis 客户端的多种形态

  1. 自带的命令行客户端,通过 redis-cli 命令使用(学习中使用)

    redis-cli -h 127.0.0.1 -p 6379
    
  2. 图形化界面的客户端,有的是桌面程序,或者是web程序(不推荐使用)

  3. 基于 Redis 的 API 自行开发客户端(工作中最常用)

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

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

相关文章

Linux(05) Debian 系统修改主机名

查看主机名 方法1:hostname hostname 方法2:cat etc/hostname cat /etc/hostname 如果在创建Linux系统的时候忘记修改主机名,可以采用以下的方式来修改主机名称。 修改主机名 注意,在linux中下划线“_”可能是无效的字符&…

软件测试学习之MySQL学习笔记(完结)

目录 1. 数据库**** 1.1. 概念**** 1.2. 分类**** 1.2.1. 关系型数据库**** 1.2.1.1. SQL**** 1.2.2. 安装**** 1.2.2.1. Navicat**** 2. SQL语句**** 2.1. 常用数据类型**** 2.2. 数据库**** 2.3. 表**** 2.3.1. 字段约束**** 2.4. 数据**** 2.4.1. 增 insert**…

JavaSE:图书管理系统

目录 一、前言 二、内容需求 三、类的设计 (一)图书类 1.Book 类 2.BookList 类 (二)操作类 1.添加图书AddOperation类 2.借阅图书BorrowOperation类 3.删除图书DelOperation类 4.显示图书ShowOperation类 5.退出系统Ex…

ChromeOS 中自启动 Fcitx5 和托盘 stalonetray

ChromeOS 更新的飞快,旧文章的方法也老是不好用,找遍了也没找到很好的可以开机自启动 Linux VM 和输入法、托盘的方法。 研究了一下(不,是很久),终于找到个丑陋的实现。 方法基于 ChromeOS 123.0.6312.94…

linux 开机自启动

方式1—依赖桌面启动,一般适用与UI相关程序 1、创建运行脚本,以管理员放方式运行,加入密码 vim runapp.sh #!/bin/bash cd /home/nvidia/test echo ‘passcode’ | sudo -S ./testapp 2、终端输入 gnome-session-properties 3、在com…

os.listdir()bug总结

今天测试出一个神奇的bug,算是教训吧,找了两天不知道问题在哪,最后才发现问题出现在这 原始文件夹显示 os.listdir()结果乱序 import os base_path "./file/"files os.listdir(base_path)print(files)问题原因 解决办法(排序) …

即插即用篇 | YOLOv8引入Haar小波下采样 | 一种简单而有效的语义分割下采样模块

本改进已集成到 YOLOv8-Magic 框架。 下采样操作如最大池化或步幅卷积在卷积神经网络(CNNs)中被广泛应用,用于聚合局部特征、扩大感受野并减少计算负担。然而,对于语义分割任务,对局部邻域的特征进行池化可能导致重要的空间信息丢失,这有助于逐像素预测。为了解决这个问题…

【进阶六】Python实现SDVRPTW常见求解算法——遗传算法(GA)

基于python语言,采用经典蚁群算法(ACO)对 带硬时间窗的需求拆分车辆路径规划问题(SDVRPTW) 进行求解。 目录 往期优质资源1. 适用场景2. 代码调整2.1 需求拆分2.2 需求拆分后的服务时长取值问题 3. 求解结果4. 代码片段…

智慧水库解决方案(打造水库智慧监测体系)

​作为一名水利自动化系统集成商,最近我司接手了一个智慧水库建设项目。这个项目位于一座山区的大型水库,目的是对其进行现代化、智能化改造,提升供水、防洪等管理水平。(key-iot.com.cn) 在方案设计之初,我们组织了现场勘测,全面了解水库的实际情况。这…

创建型模式--2.简单工厂模式【人造恶魔果实工厂1】

1. 工厂模式的特点 在海贼王中,作为原王下七武海之一的多弗朗明哥,可以说是新世界最大的流氓头子,拥有无上的权利和无尽的财富。他既是德雷斯罗萨国王又是地下世界的中介,控制着世界各地的诸多产业,人造恶魔果实工厂就…

基于springboot实现校园资料分享平台系统项目【项目源码+论文说明】

基于springboot实现校园资料分享平台系统演示 摘要 随着信息互联网购物的飞速发展,国内放开了自媒体的政策,一般企业都开始开发属于自己内容分发平台的网站。本文介绍了校园资料分享平台的开发全过程。通过分析企业对于校园资料分享平台的需求&#xff…

吴恩达深度学习笔记:深层神经网络(Deep Neural Networks)4.1-4.4

目录 第一门课:神经网络和深度学习 (Neural Networks and Deep Learning)第四周:深层神经网络(Deep Neural Networks)4.1 深层神经网络(Deep L-layer neural network)4.2 前向传播和反向传播(Forward and backward pro…

“逃离”OpenAI!36人出走,已拿600亿融资

“逃离”OpenAI!36人出走,已拿600亿融资© 由 智东西 提供 智东西 作者 | 程茜 编辑 | 心缘 最近OpenAI频繁高薪挖人,把马斯克惹毛了。 马斯克在社交平台X上公开爆料:OpenAI一直在高薪挖特斯拉工程师,甚至还想…

四、书城开发-2、热门搜索/推荐页面的开发

热门搜索的开发 热门搜索页面的交互主要有4个交互点 第一个交互是点击搜索框时,热门搜索会渐影显示;第二个交互是点击返回图标时热门搜索会渐影消失;第三个交互是热门搜索滑动页面的时候搜索栏下面会出现阴影,回到顶部时阴影会消…

深入浅出 -- 系统架构之微服务标准组件及职责

我们来认识一下微服务架构在Java体系中依托哪些组件实现的。 相对于单体架构的简单粗暴,微服务的核心是将应用打散,形成多个独立提供的微服务,虽然从管理与逻辑上更符合业务需要。但微服务架构也带来了很多急需解决的核心问题: 1…

PDF锐化

PDF Shaper Ultimate(pdf转图片) 编辑->添加文件->选中一个要处理的pdf 操作->转换->PDF转为图片 ComicEnhancerPro设置(把图片锐化) PDF Shaper Ultimate(图片转pdf) 编辑-添加图片->选中所有锐化处理后的图片 转换->图片转为pdf(会把所有图…

最新AI工具系统ChatGPT网站运营源码SparkAi系统V6.0版本,GPTs应用、AI绘画、AI换脸、垫图混图、Suno-v3-AI音乐生成大模型全支持

一、前言 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统,支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美,那么如何搭建部署AI创作ChatGPT?小编这里写一个详细图文教程吧。已支持GPT…

《深入Linux内核架构》第4章 进程虚拟内存(2)

目录 4.3 内存映射原理 4.4 数据结构 4.4.1 树和链表 4.4.2 虚拟内存区域VMA的表示 4.4.3 相关数据结构 本节讲VMA结构体struct vm_area_struct和struct address_space。 4.3 内存映射原理 所有进程的虚拟空间总和比物理内存大得多,因此只有最常用的虚拟空间…

生活日常韩语成人外语培训中为什么韩国人说话喜欢用“~도록”?

많이 받는 질문 중 하나가 ‘~도록’을 자신에게 쓸 수 있는가 하는 것이다. 즉 “제가 하도록 하겠습니다” “조심하도록 하겠습니다” “말씀드리도록 하겠습니다” 등과 같은 표현이다. 我经常被问到的问题之一就是能否将“~도록”用于自己。比如“我来做吧”、“我会小心…

深度学习500问——Chapter06: 循环神经网络(RNN)(2)

文章目录 6.4 CNN和RNN的区别 6.5 RNNs与FNNs有什么区别 6.6 RNNs训练和传统ANN训练异同点 6.7 为什么RNN训练的时候Loss波动很大 6.8 标准RNN前向输出流程 6.9 BPTT算法推导 6.9 RNN中为什么会出现梯度消失 6.10 如何解决RNN中的梯度消失问题 6.4 CNN和RNN的区别 类别特点描述…