【Redis】背景知识 + 环境搭建

article/2025/8/26 19:59:10

背景知识 + 环境搭建

  • 一. Redis 特性
  • 二. Redis 应用场景
  • 三. 环境搭建
  • 四. Redis 客户端介绍
  • 五. Redis 总结

Redis 是一个在内存中存储数据的中间件,用于作为数据库,用于作为数据缓存,用于作为消息队列,在分布式系统中能够大展拳脚。

一. Redis 特性

  • 在内存中存储数据:
    • MySQL 主要通过 “表” 的方式来存储组织数据的,称为 “关系型数据库”。
    • Redis 主要通过 “键值对” 的方式来存储组织数据的,key 都是 strings,value 可以是 strings、hashes、lists、sets 等,称为 “非关系型数据库”。
  • 可编程的:
    • 针对 Redis 的操作,可以直接通过简单的交互命令进行操作,也可以通过一些脚本 (Lua) 的方式,批量执行一些操作。
  • 扩展能力:
    • 可以在 Redis 原有的功能基础之上再进行扩展,Redis 提供了一组 API (本质上就是动态链接库),通过 C/C++、Rust 语言编写 Redis 扩展。
    • 自己去扩展 Redis 的功能,比如:Redis 自身已经提供了很多的数据结构和命令,通过扩展让 Redis 支持更多的数据结构已经支持更多的命令。
  • 持久化:
    • Redis 是把数据存储在内存上的,但是内存的数据是 “易失” 的,进程退出/系统重启,数据就丢失了。
    • Redis 会把数据存储在硬盘上,内存为主,硬盘为辅,硬盘相当于对内存的数据备份了一下,如果 Redis 重启了,就会在重启的时候加载硬盘中的备份数据,使 Redis 的内存恢复到重启前的状态。
  • 集群:
    • Redis 作为分布式系统中的中间件,能够支持集群的很关键的,水平扩展,类似于 “分库分表”。
    • Redis 能存储的数据是有限的 (内存空间有限),引入多个主机,部署多个 Redis 节点,每个 Redis 存储数据的一部分。
  • 高可用:
    • Redis 自身也是支持 “主从” 结构的,从节点相当于主节点的备份,主节点如果挂了,从节点就开始发挥作用。
  • 速度快:
    • Redis 存储的数据在内存中,就比访问硬盘的数据库要快很多。
    • Redis 核心功能都是比较简单的逻辑,核心功能都是比较简单的操作内存中的数据结构。
    • Redis 从网络角度上,使用的是 IO 多路复用的方式 (epoll),使用一个线程管理很多个 socket
    • Redis 使用的是单线程模型 (虽然更高版本的 Redis 引入了多线程),这样的单线程,减少了不必要的线程之间的竞争开销。多线程提高效率的前提是,CPU 密集型任务,使用多个线程可以充分的利用 CPU 多核资源,但是 Redis 的核心任务,主要就是操作内存的数据结构,不会吃很多的 CPU 资源。
    • Redis 使用的是 C 语言开发的,相较于其他语言效率要快。

二. Redis 应用场景

  • 数据库:
    • 大多数情况下,考虑到数据存储,优先考虑的是 “大”,但是仍然有一些场景,考虑的是 “快”。
    • 搜索引擎:广告搜索 (商业搜索),对于性能的要求是非常高的,搜索系统中没有使用 MySQL 这样的数据库。而是把所有需要检索的数据都存储在内存中,使用的就是类似于 Redis 这样的内存数据库来完成的,在某些场景下,需要对 Redis 进行优化,所以需要研发类似于 Redis 这样的内存数据库。
    • 当然使用这样的数据库,存储大量的数据,需要不少的硬件资源,一般都是一些大厂。
    • Redis 存储的是全量数据,这里的数据是不能够随便丢失的。
  • 缓存:
    • 使用 MySQL 存储数据量大,但是慢,遵循 “二八原则”,把热点数据存储在 Redis 中。
    • Redis 存储的是部分热点数据,全量数据都是以 MySQL 为主的,哪怕 Redis 的数据没了,还可以从 MySQL 中加载回来。
    • 相较于数据库,更多的情况还是用 Redis 来作为缓存。
  • 消息队列:
    • 此处的消息队列,不是 Linux 进程间通信的那个消息队列,而是一个消息队列服务器,基于这个可以实现网络版本的 “生产者消费者模型”。
    • 对于分布式系统来说,服务器和服务器之间,有时候页需要使用要 “生产者消费者模型”,优势:解耦合、削峰填谷。
    • 业界中也存在很多知名的消息队列,例如:RabbitMQ、Kafka、RocketMQ 等等,Redis 也是提供了消息队列的功能,如果当前场景中,对于消息队列的功能依赖不是很多,并且又不想引入额外的依赖,Redis 就可以作为一个选择。

缓存中还存在 session 存储:cookie 实现用户身份的保存,在浏览器中存储了一个用户的身份标识 sessionId,需要存储在应用服务器的 session 配合,服务器这里真正存储了用户数据。

在这里插入图片描述

  • 如果如上图,会话存储在不同的应用服务器中的话,如果一个用户登入时,会话存储在应用服务器1中,那么第二次登入时,会话就可能存储在应用服务器2中,此时需要重新登入,这样用户的体验就不太好。
  • 解决方案:
    • 想办法让负载均衡器,把同一个用户的请求始终打到同一台机器上 (不能用轮询了,而是通过 userId 之类的方式来分配机器,求余数)
    • 把会话数据单独拎出来,放到独立的机器上 (Redis),应用服务器重启后,会话不会丢失,如下图所示:

在这里插入图片描述

Redis 不能做的事情:无法存储大规模的数据。

三. 环境搭建

我们安装 Redis 5.0 版本,原因是 5.0 已经支持了大部分的功能特性,而且相比较于 7.0 版本,更容易进行安装使用。开始学习的时候,现在本机上安装,后面学到 Redis 集群相关的功能的时候,再使用 Docker 安装。

  1. 使用 su 命令切换到 root 用户。
  2. 使用 apt search redis 命令来搜索 Redis 相关的软件包。
  3. 使用 apt install redis 命令来安装 Redis 相关的软件包。
  4. 使用 netstat -nlpt | grep redis 查看 Redis 服务器。

在这里插入图片描述

  1. 需要手动修改配置文件,修改 ip,绑定 127.0.0.1 的 ip 意味着只能由当前主机上的 Redis 客户端访问 Redis 服务器,跨主机就无法访问,6379 是 Redis 服务器绑定的端口号。

在这里插入图片描述

在这里插入图片描述

  1. 使用 service redis-server restart 命令来重启 Redis 服务器。
  2. 使用 service redis-server status 命令来查看 Redis 服务器运行状态。

在这里插入图片描述

  1. 使用 redis-cli 命令来用 Redis 自带的客户端来连接 Redis 服务器在,之后使用 ping 命令来查看是否连接成功。

在这里插入图片描述

  1. 使用 quit / Ctrl + d 退出 Redis 客户端。

配置文件:很多软件都是有配置文件的,一个很大的软件,里面包含很多的功能,有很多可以定制化的操作,就可以通过配置文件选择开启或关闭设定某些功能。

四. Redis 客户端介绍

Redis 与 MySQL 一样,也是一个 客户端-服务器 结构的程序,Redis 客户端与服务端的交互过程如下:

在这里插入图片描述

Redis 客户端和服务器可以在同一台主机上,也可以在不同的主机上,Redis 客户端否则发送请求给 Redis 服务器,Redis 服务器负责存储和管理数据,同时执行 Redis 客户端发来的命令,并返回结果给 Redis 客户端。

Redis 客户端也有很多种形态:

  • Redis 自带的命令行客户端。
    • redis-cli 登入 Redis 客户端。
    • redis-cli -h 127.0.0.1 -p 6379 登入 Redis 客户端。
  • 图形化界面的客户端 (桌面程序,Web 程序)
    • 这样的图形化程序,依赖 Windows 系统,而未来在实际工作中,用来办公的 Windows 系统,连接到服务器肯呢个会有诸多限制,你的 Windows 上的图形化界面客户端能不能连接上服务器的 Redis,是个未知数,和 MySQL 同理,中间可能会经历很多的跳板机、堡垒机、权限校验。
  • 基于 Redis 的 API 自行开发 Redis 客户端 (工作中最主要的形态)
    • 非常类似于 MySQL 的 C 语言 API 开发的 MySQL 客户端。

五. Redis 总结

  • 我们谈到的 Redis 的速度快,是相对于 MySQL 这样的关系型数据库,但是如果是直接和内存中操作的变量相比,就没有优势了,甚至更慢了!
  • 比如,应用程序中药存储一些数据,用户点赞量,视频 id,点赞个数,通过 “键值对” 的方式存储,用 Redis 存储是先通过网络,再操作内存,而直接在内存中使用 unordered_map 是直接操作内存。
  • 是否要使用 Redis,需要结合业务需求来确定,引入 Redis 的缺点会更慢,但是有了 Redis 之后,就可以把数据单独存储,后续应用服务器重启,不会影响到数据内容,未来要扩展成分布式系统,使用 Redis 是更佳的。
  • 是否引入一个技术,一定要想清楚来龙去脉,想清楚能够解决啥问题,引入了啥问题,千万不能无脑使用。

http://www.hkcw.cn/article/uEubUbpxVi.shtml

相关文章

ubuntu 22.04 编译安装nignx 报错 openssl 问题

前言 Ubuntu 20.04 中安装 Nginx (通过传包编译的方式)、开启关闭防火墙、开放端口号 在ubuntu 22.04.3 服务器上照着上面的文章 通过传包编译的方式安装nginx-1.18.0 的时候报错,报错内容如下: src/event/ngx_event_openssl.c: In function ‘ngx_ssl…

【第4章 图像与视频】4.1 图像的绘制

文章目录 前言在 Canvas 之中绘制图像drawImage() 方法的用法 前言 drawImage() 方法可以将一幅图像的整体或某个部分绘制到 canvas 内的任何位置上,并且允许开发者在绘制过程中对图像进行缩放。也可以将图像绘制在离屏 canvas 中,这样的话就可以对图像…

【第4章 图像与视频】4.2 图像的缩放

文章目录 前言示例-图像的缩放在 Canvas 边界之外绘制图像 前言 在上节中读者已经学会了如何使用 drawImage() 方法将一幅未经缩放的图像绘制到 canvas 之中。现在我们就来看看如何用该方法在绘制图像的时候进行缩放 示例-图像的缩放 未缩放的图像,显示图形原有大…

kali系统的安装及配置

1 kali下载 Kali 下载地址:Get Kali | Kali Linux (https://www.kali.org/get-kali) 下载 kali-linux-2024.4-installer-amd64.iso (http://cdimage.kali.org/kali-2024.4/) 2. 具体安装步骤: 2.1 进入官方地址,点击…

Python训练营打卡 Day39

图像数据与显存 知识点回顾 图像数据的格式:灰度和彩色数据模型的定义显存占用的4种地方 模型参数梯度参数优化器参数数据批量所占显存神经元输出中间状态 batchisize和训练的关系 图像数据与显存 1. 图像数据的格式 灰度图像:就像餐厅只提供黑白两色的…

46. Permutations和47. Permutations II

目录 46. Permutations 方法一、使用used数组回溯 方法二、不使用used数组回溯 47. Permutations II 回溯法 46. Permutations 方法一、使用used数组回溯 class Solution {vector<vector<int>> res;vector<int> apermutation; public:vector<vector…

微服务测试困境?Parasoft SOAtest的自动化、虚拟化与智能分析来袭!

微服务架构凭借其敏捷性和可扩展性&#xff0c;已成为企业技术升级的核心选择&#xff0c;但同时也引入了测试复杂性&#xff0c;比如多协议支持、环境依赖、频繁变更等。Parasoft SOAtest正是为企业所需的一站式覆盖、环境隔离能力以及智能维护而生&#xff0c;它通过自动化测…

霹雳吧啦Wz_深度学习-图像分类篇章_1.1 卷积神经网络基础_笔记

深度学习-图像分类篇章 参考笔记 卷积神经网络 英文&#xff1a;Convolutional Neural Network&#xff0c;CNN雏形&#xff1a;1998年LeCun的LeNet5&#xff0c;第一个卷积神经网络包含&#xff1a; 卷积层&#xff1a;Convolutions下采样层&#xff1a;Subsampling全连阶层…

系统安装出现的问题 老毛桃

有的电脑这样&#xff0c;不一定能进入u盘启动&#xff0c;需要再 save Exid栏目里&#xff0c;点击那个use disk2.0

RFID手持终端设备多功能融合技术实现智能管理

RFID&#xff08;无线射频识别&#xff09;手持终端设备作为连接物理世界与数字世界的桥梁&#xff0c;正通过多功能融合技术实现从单一功能工具向智能化综合管理终端的跨越。上海岳冉多功能融合RFID手持终端&#xff0c;通过集成RFID识别、条码扫描、环境感知、视觉辅助等模块…

【AI论文】ScienceBoard:评估现实科学工作流程中的多模态自主代理

摘要&#xff1a;大型语言模型&#xff08;LLMs&#xff09;的影响已经超出了自然语言处理&#xff0c;极大地促进了跨学科研究的发展。 最近&#xff0c;各种基于LLM的代理已经被开发出来&#xff0c;以协助科学发现跨越多个方面和领域的进步。 其中&#xff0c;能够像人类一样…

2025年公共管理与信息技术国际会议:智能治理与数据驱动的创新之路

会议简介 第二届公共管理与信息技术国际会议即将盛大启幕。作为全球公共管理领域内的一次重要学术盛会&#xff0c;本届会议将聚集世界各地的政府官员、专家学者、行业精英以及技术开发者&#xff0c;共同探讨信息技术如何赋能公共管理&#xff0c;推动社会治理现代化。 本次会…

动态规划法在解决实际问题中的应用

实际上&#xff0c;我们可以从根结点出发&#xff0c;深度优先搜索这棵二叉树。对于每棵子树&#xff0c;其子树元素和等于子树根结点的元素值&#xff0c;加上左子树的元素和&#xff0c;以及右子树的元素和。 每个房子可以被粉刷成三种颜色中的一种&#xff0c;需要计算在满…

尝鲜纯血鸿蒙,华为国际版本暂时不支持升级。如mateX6 国际版?为什么不支持?什么时候支持?

一&#xff1a;mateX6 国际版支持鸿蒙吗&#xff1f; 不支持 二&#xff1a;华为国际版支持鸿蒙吗&#xff1f; 不支持 三&#xff1a;华为国际版什么时候支持&#xff1f; 2025年预期可以支持。请耐心等待。 三&#xff1a;国际版为什么不支持&#xff1f; EMUI 采用AO…

足迹地图:记录旅程,点亮世界

旅行&#xff0c;是探索世界的脚步&#xff0c;也是心灵的归宿。每一次的出发与归来&#xff0c;都承载着无数的回忆与故事。而足迹地图这款旅行记录软件&#xff0c;就像一位忠实的旅伴&#xff0c;陪伴着你记录下每一段旅程&#xff0c;将你的足迹点亮在世界的地图上&#xf…

Qt 读取和写入 INI 格式的配置文件

Qt 读取和写入 INI 格式的配置文件 前言&#xff1a;INI 配置文件在 Qt 开发中的重要性基础夯实&#xff1a;INI 文件结构与 QSettings 核心概念1. INI 文件的基本结构2. QSettings 类概述3. 初始化 QSettings 对象4. 基本读写操作5. 高级操作技巧5.1 处理数组和列表5.2 检查键…

计算机网络之差错控制中的 CRC(循环冗余校验码)

文章目录 1 概述1.1 简介1.2 特点1.3 基本原则 2 实现步骤3 例题 1 概述 修改中&#xff0c;请稍等。。。 1.1 简介 CRC&#xff1a;Cyclic Redundancy Check&#xff08;循环冗余校验&#xff09;是计算机网络中常用的一种差错控制编码方法&#xff0c;用于检测数据传输或存…

VLC-QT 网页播放RTSP

先看效果图,代码在文章末尾,包含源码,vlc-qt完整的库 环境说明:VS 2017 QTQt5.13.0 MSVC2017 32位 将vlc_install 目录下的bin,include,lib里所有的东西分别放在qt目录下 bin -> C:\Qt\Qt5.13.0\5.13.0\msvc2017\bin include->C:\Qt\Qt5.13.0\5.13.0\msvc201…

塔能科技:为多行业工厂量身定制精准节能方案

在当今追求可持续发展的时代&#xff0c;工厂能耗精准节能成为众多企业关注的焦点。塔能科技凭借先进的技术和丰富的经验&#xff0c;服务于广泛的行业客户&#xff0c;其中55.5%来自世界500强和上市公司。针对不同行业工厂的特点和需求&#xff0c;塔能提供了一系列行之有效的…

Qt font + ToolTip + focusPolicy + styleSheet属性(5)

文章目录 font属性API接口直接在Qt Designer编辑图形化界面通过纯代码的方式修改文字属性 ToolTip属性API接口代码演示 focusPolicy属性概念理解API接口通过编辑图形化界面演示 styleSheet属性概念理解通过编辑图形化界面展示代码 图形化界面的方式展示&#xff08;夜间/日间模…