[Redis#2] 定义 | 使用场景 | 安装教程 | 快!

目录

1. 定义

In-memory data structures 在内存中存储数据

2. 优点!快

Programmability 可编程性

Extensibility 扩展性

Persistence 持久化

Clustering 分布式集群

High availability 高可用性

⭕快速访问的实现

3. 使用场景

1.Real-time data store

2.Caching & session storage

Session Storage

如何解决上述问题?

3.Streaming & messaging

4. 安装 redis

配置Redis支持远程连接

重启Redis服务

测试连接

注意事项

5.关于

客户端

快!


1. 定义

In-memory data structures 在内存中存储数据
  • support for strings, hashes, lists, sets, sorted sets, streams, and more.
    • key 都是 string
    • value 则可以是上述的数据结构

2. 优点!

Programmability 可编程性
  • Server-side scripting with Lua and server-side stored procedures with Redis Functions.
Extensibility 扩展性
  • A module API for building custom extensions to Redis in C, C++, and Rust.
  • 通过这几个语言编写 Redis 扩展(本质上就是一个动态链接库)
    • 自己去扩展 Redis 的功能。
    • 比如:Redis 自身已经提供了很多的数据结构和命令。通过扩展,让 Redis 支持更多的数据结构以及支持更多的命令。
    • 类似于 linux 的动态库.so 实现扩展
Persistence 持久化
  • Keeps the dataset in memory for fast access but can also persist all writes to permanent storage to survive reboots and system failures.
    • 内存中的数据是“易失”的。
    • 进程退出/系统重启后,Redis 会把数据存储在硬盘上。
    • 内存为主,硬盘为辅。(硬盘相当于对内存的数据备份了一下)
Clustering 分布式集群
  • Horizontal scalability with hash-based sharding, scaling to millions of nodes with automatic re-partitioning when growing the cluster.
    • Redis 作为一个分布式系统中的中间件,能够支持集群是很关键的~~
  • 这个水平扩展,类似于 "分库表"
  • 一个 Redis 能存储的数据是有限的(内存空间有限)
  • 引入多个主机,部署多个 Redis 节点。每个 Redis 存储数据的一部分
High availability 高可用性
  • Replication with automatic failover for both standalone and clustered deployments.
  • 高可用 ==冗余 / 备份

Redis 自身也是支持 "主从" 结构的。 从节点相当于主节点的备份。

⭕快速访问的实现

  1. Redis 数据在内存中,就比访问硬盘的数据库要快很多。
  2. Redis 核心功能都是比较简单的逻辑,比较简单地操作内存的数据结构。
  3. 从网络角度上,Redis 使用了 IO 多路复用的方式 (epoll)。

使用一个线程管理很多个 socket ~

  1. Redis 使用的是单线程模型(虽然更高版本的 Redis 引入了多线程)。
    • 这样的单线程模型,减少了不必要的线程之间的竞争开销。
    • 线程提高了效率的前提是 CPU 密集型的任务。使用多线程可以充分的利用 CPU 多核资源。
  1. [个人不太认可,但是网上这么说的很多]
  • Redis 是使用 C 语言开发的,所以就快。
    • MySQL 也是 C 语言开发的。

注意:在对 redis 的优点进行理解,很多都是相较于 mysql 的


3. 使用场景

1.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.

  • 大多数情况下,考虑到数据存储,优先考虑的是“大”数据存储。
  • 但是仍然有一些场景,考虑的是“快”。

例如:

  • 搜索引擎 -> 广告搜索(商业搜索)
    对于性能要求是非常高的~
    搜索所有没有用到MySQL这样的数据库~~
  • 当然,使用这样的内存数据库,存储大量的数据,需要不少的硬件资源的~~ 充值了。
  • Redis 存的是全量数据,这里的数据是不能随便丢的~~

2.Caching & session storage

  • 缓存热点数据

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

  • 使用 MySQL 存数据,大慢。
    二八原则,把热点数据拎出来,存储在 redis 中的。
  • Redis 存的是部分数据
  • 全量数据都是以 mysql 为主的。
    哪怕 Redis 的数据没了,还可以从 mysql 这边再加载回来~~
Session Storage

Cookie

  • 实现用户身份信息的保存,浏览器这边存储了一个用户的 sessionId

需要 session 配合,才可调用到真正的用户数据

  • 之前 senssion 是存储在应用服务器上的
  • 现在可以运用 Redis存储 session 信息,实现高效调用

用户访问网页的思考:

如何解决上述问题?
  1. 让负载均衡器将同一个用户的请求始终打到同一台服务器上(不能轮询,而是通过 userId 类似的方式来分配服务器)
  2. 把会话数据单独拿出来放到一组独立的机器上存储(Redis)

3.Streaming & messaging

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

  • 消息队列(服务器),不是 Linux 进程间通信的那个消息队列(这个可以忘记了~~
  • 基于这个可以实现一个网络版本的生产者消费者模型~~
  • 业界也有很多知名的消息队列,比如 RabbitMQ、Kafka、RocketMQ……
    Redis 也提供了消息队列的功能。
  • 如果当前场景中,对于消息队列的功能依赖的不多,并且又不想引入额外的依赖,Redis 可以作为一个选择。

Redis 不能做的事情?

存储大规模数据~

💡阅读官方文档是最有效的学习方式,上文就是对官方文档的一些批注


4. 安装 redis

首先,确保你的系统是最新的。可以通过运行以下命令来更新你的软件包列表:

sudo apt update

然后,使用apt安装Redis:

sudo apt install redis-server -y

配置Redis支持远程连接

默认情况下,Redis仅监听本地回环接口(127.0.0.1),这意味着只有在同一台机器上的客户端才能连接到Redis服务器。为了允许从其他机器进行连接,你需要编辑Redis的配置文件。

  • 打开Redis配置文件:使用文本编辑器(如nano或vim)打开Redis配置文件/etc/redis/redis.conf
sudo nano /etc/redis/redis.conf
  • 修改绑定地址:找到bind指令,默认可能设置为127.0.0.1。将其更改为0.0.0.0,以便Redis监听所有网络接口。如果bind行前面有注释符号(#),请删除该符号以取消注释此行:
# bind 127.0.0.1
bind 0.0.0.0
  • 关闭保护模式:找到protected-mode指令,并将其值从yes更改为no。保护模式是一种安全特性,当Redis没有密码保护并且监听非本地网络接口时,会阻止某些命令的执行。由于我们正在开放Redis以接受远程连接,因此需要关闭保护模式:
protected-mode no

  • 保存并退出:完成编辑后,保存文件并退出编辑器。如果你使用的是nano,可以通过按Ctrl+O保存,然后按Ctrl+X退出。

重启Redis服务

为了让更改生效,你需要重启Redis服务:

sudo service redis-server restart

测试连接

此时可以通过redis-cli命令进入Redis客户端

问题

解决:

如果进入客户端后,输入ping返回一个PONG那么就算安装成功了。ctrl+d 可以退出~

注意事项

  • 开启Redis的远程访问前,请确保已经配置了合适的防火墙规则,只允许受信任的IP地址访问Redis端口。
  • 考虑设置一个密码来增强安全性。可以在/etc/redis/redis.conf中找到requirepass指令并设置一个强密码。
  • 如果你的Redis服务器暴露在互联网上,建议使用SSL/TLS加密通信,以防止数据泄露。

完成上述步骤后,Redis服务器应该已经配置好可以接受远程连接啦


5.关于

客户端

  • Redis 客户端也是一个客户端-服务器结构的程序!!
  • MySQL 也是
  • Redis 客户端和服务端可以在同一个主机上,也可以在不同主机上。(当前阶段,我们一般只有一台机器,此时客户端和服务端就是在同一个机器上)


Redis 的客户端也有多种形式:

1. 自带了命令行客户端
[ 之后的文章主要使用这个客户端]

root@bit:~# redis-cli
127.0.0.1:6379>
root@bit:~# redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379>

2. 图形化界面的客户端
(桌面程序, web 程序)

3. 基于 redis 的 api 自行开发客户端[工作中最主要的形态]

  • 非常类似于 mysql 的 C 语言 API 和 JDBC

快!

  • 我们谈到的 redis 的快,是相对于 mysql 这样的关系型数据库的。
  • 但是如果直接和内存中的操作变量相比,就没有优势了,甚至更慢了!!
  • redis 是先通过网络!!再操作内存

是否引入一个技术,一定要想清楚来龙去脉,想清楚能够解决啥问题,引入了啥问题。

千万不能 “无脑” 使用。不能有“锤子思维”

是否要使用 redis?

对症下药,具体问题具体分析,要结合实际的需求来确定!!!

例如:

引入 redis 的缺点,会更慢。

  • 但是有了 redis 之后,可以通过网络,把数据单独存储。
  • 后续应用服务器重启,不会影响到数据内容。
  • 未来要扩展成分布式系统,使用 redis 是更佳的选择。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

学习编程,学习中间件,学习源码的思路

01 看的多,内化不足 最近想复习一下编程相关的知识,在复习前我翻开了之前的一些笔记,这些笔记基本都是从书本、视频、博客等摘取记录的,看着这些笔记心里总结:看的多,内化不足。 02 整理大纲 为了解决这个…

hhdb数据库介绍(10-2)

集群管理 计算节点集群 集群管理主要为用户提供对计算节点集群的部署、添加、启停监控、删除等管理操作。 集群管理记录 集群管理页面显示已部署或已添加的计算节点集群信息。可以通过左上角搜索框模糊搜索计算节点集群名称进行快速查找。同时也可以通过右侧展开展开/隐藏更…

AG32既可以做MCU,也可以仅当CPLD使用

Question: AHB总线上的所有外设都需要像ADC一样,通过cpld处理之后才能使用? Reply: 不用。 除了ADC外,其他都是 mcu可以直接配置使用的。 Question: DMA和CMP也不用? Reply: DMA不用。 ADC/DAC/CMP 用。 CMP 其实配置好后,可以直…

贪心算法(1)

目录 柠檬水找零 题解: 代码: 将数组和减半的最少操作次数(大根堆) 题解: 代码: 最大数(注意 sort 中 cmp 的写法) 题解: 代码: 摆动序列&#xff0…

网络爬虫——综合实战项目:多平台房源信息采集与分析系统

1. 项目背景与目标 1.1 项目背景 随着房产市场的快速发展,各大平台上充斥着大量房源信息。为了帮助用户快速掌握市场动态,需要通过爬虫技术自动采集多平台数据,清洗后进行存储和分析,为用户提供有价值的洞察。开发者通过这一实战…

数据结构-7.Java. 对象的比较

本篇博客给大家带来的是java对象的比较的知识点, 其中包括 用户自定义类型比较, PriorityQueue的比较方式, 三种比较方法...... 文章专栏: Java-数据结构 若有问题 评论区见 欢迎大家点赞 评论 收藏 分享 如果你不知道分享给谁,那就分享给薯条. 你们的支持是我不断创作的动力 .…

NVR录像机汇聚管理EasyNVR多品牌NVR管理工具/设备如何使用Docker运行?

在当今的安防监控领域,随着视频监控技术的不断发展和应用范围的扩大,如何高效、稳定地管理并分发视频流资源成为了行业内外关注的焦点。EasyNVR作为一款功能强大的多品牌NVR管理工具/设备,凭借其灵活的部署方式和卓越的性能,正在引…

LSTM原理解读与实战

在RNN详解及其实战中,简单讨论了为什么需要RNN这类模型、RNN的具体思路、RNN的简单实现等问题。同时,在文章结尾部分我们提到了RNN存在的梯度消失问题,及之后的一个解决方案:LSTM。因此,本篇文章主要结构如下&#xff…

Springboot之登录模块探索(含Token,验证码,网络安全等知识)

简介 登录模块很简单,前端发送账号密码的表单,后端接收验证后即可~ 淦!可是我想多了,于是有了以下几个问题(里面还包含网络安全问题): 1.登录时的验证码 2.自动登录的实现 3.怎么维护前后端…

使用Element UI实现前端分页,前端搜索,及el-table表格跨页选择数据,切换分页保留分页数据,限制多选数量

文章目录 一、前端分页1、模板部分 (\<template>)2、数据部分 (data)3、计算属性 (computed)4、方法 (methods) 二、前端搜索1、模板部分 (\<template>)2、数据部分 (data)3、计算属性 (computed)4、方法 (methods) 三、跨页选择1、模板部分 (\<template>)2、…

VMware Workstation 17.6.1

概述 目前 VMware Workstation Pro 发布了最新版 v17.6.1&#xff1a; 本月11号官宣&#xff1a;针对所有人免费提供&#xff0c;包括商业、教育和个人用户。 使用说明 软件安装 获取安装包后&#xff0c;双击默认安装即可&#xff1a; 一路单击下一步按钮&#xff1a; 等待…

探索PyMuPDF:Python中的强大PDF处理库

文章目录 **探索PyMuPDF&#xff1a;Python中的强大PDF处理库**第一部分&#xff1a;背景第二部分&#xff1a;PyMuPDF是什么&#xff1f;第三部分&#xff1a;如何安装这个库&#xff1f;第四部分&#xff1a;至少5个简单的库函数使用方法第五部分&#xff1a;结合至少3个场景…

go语言range的高级用法-使用range来接收通道里面的数据

在 Go 语言中&#xff0c;可以使用 for ... range 循环来遍历通道&#xff08;channel&#xff09;。for ... range 循环会一直从通道中接收值&#xff0c;直到通道关闭并且所有值都被接收完毕。 使用 for ... range 遍历通道 示例代码 下面是一个使用 for ... range 遍历通…

14.C++STL1(STL简介)

⭐本篇重点&#xff1a;STL简介 ⭐本篇代码&#xff1a;c学习/7.STL简介/07.STL简介 橘子真甜/c-learning-of-yzc - 码云 - 开源中国 (gitee.com) 目录 一. STL六大组件简介 二. STL常见算法的简易使用 2.1 swap ​2.2 sort 2.3 binary_search lower_bound up_bound 三…

5G CPE与4G CPE的主要区别有哪些

什么是CPE&#xff1f; CPE是Customer Premise Equipment&#xff08;客户前置设备&#xff09;的缩写&#xff0c;也可称为Customer-side Equipment、End-user Equipment或On-premises Equipment。CPE通常指的是位于用户或客户处的网络设备或终端设备&#xff0c;用于连接用户…

智能安全配电装置在高校实验室中的应用

​ 摘要&#xff1a;高校实验室是科研人员进行科学研究和实验的场所&#xff0c;通常会涉及到大量的仪器设备和电气设备。电气设备的使用不当或者维护不周可能会引发火灾事故。本文将以一起实验室电气火灾事故为例&#xff0c;对事故原因、危害程度以及防范措施进行分析和总结…

深入理解 LMS 算法:自适应滤波与回声消除

深入理解 LMS 算法&#xff1a;自适应滤波与回声消除 在信号处理领域&#xff0c;自适应滤波是一种重要的技术&#xff0c;广泛应用于噪声消除、回声消除和信号恢复等任务。LMS&#xff08;Least Mean Squares&#xff09;算法是实现自适应滤波的经典方法之一。本文将详细介绍…

如何在分布式环境中实现高可靠性分布式锁

目录 一、简单了解分布式锁 &#xff08;一&#xff09;分布式锁&#xff1a;应对分布式环境的同步挑战 &#xff08;二&#xff09;分布式锁的实现方式 &#xff08;三&#xff09;分布式锁的使用场景 &#xff08;四&#xff09;分布式锁需满足的特点 二、Redis 实现分…

socket连接封装

效果&#xff1a; class websocketMessage {constructor(params) {this.params params; // 传入的参数this.socket null;this.lockReconnect false; // 重连的锁this.socketTimer null; // 心跳this.lockTimer null; // 重连this.timeout 3000; // 发送消息this.callbac…

基于RM开发板32学习日记

环境配置 芯片选型 STM32F407IGH6 配置时钟 12 168 模块 Led 引脚选择 比对原理图 可查看 设置为Out_Put输出 三色同时点亮 合为白色光 HAL_GPIO_WritePin(LED_R_GPIO_Port, LED_R_Pin, GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOH, GPIO_PIN_10, GPIO_PIN_SET);GPIOH->ODR…