【redis】redis的认识和安装

news2024/11/15 19:24:09

目录

  • 1.redis是什么
  • 2.Redis的特点
  • 3.安装redis
  • 4.设置远程连接
    • 4.1 开启隧道
    • 4.2 可视化客户端连接
    • 4.3 开启防火墙
  • 5.redis常见数据类型
    • 5.1 redis的一些全局命令
    • 5.2 数据结构
  • 6. redis的典型应用---缓存(cache)
    • 6.1 使用redis做缓存
    • 6.2 缓存穿透,缓存雪崩和缓存击穿

工具:Xshell + 云服务器 + CentOS

1.redis是什么

Redis 是⼀种基于键值对(key-value)的 NoSQL 数据库,与很多键值对数据库不同是,Redis中的值可以是由 string(字符串)、hash(哈希)、list(列表)、set(集合)、zset(有序集合)、Bitmaps(位图)、HyperLogLog、GEO(地理信息定位)等多种数据结构和算法组成。

2.Redis的特点

1. 速度快

  1. redis所有数据都是存放在内存中的。
  2. Redis 是⽤ C 语⾔实现的,⼀般来说 C 语⾔实现的程序 “距离” 操作系统更近,执⾏速度相对会更快。
  3. Redis 使⽤了单线程,预防了多线程可能产⽣的竞争问题。

2. 基于键值对的数据结构服务器

  • Redis 中的值不仅可以是字符串,⽽且还可以是具体的数据结构,这样不仅能便于在许多应⽤场景的开发,同时也能提⾼开发效率。
  • Redis 的全称是 REmote Dictionary Server,它主要提供了 5 种数据结构:字符串(string)、哈希(hash)、列表(list)、集合(set)、有序集合(ordered set /zet)

3. 丰富的功能

  • 提供了键过期功能,可以⽤来实现缓存。

  • 提供了发布订阅功能,可以⽤来实现消息系统。

  • ⽀持 Lua 脚本功能,可以利⽤ Lua 创造出新的Redis 命令。

  • 提供了简单的事务功能,能在⼀定程度上保证事务特性。

  • 提供了流⽔线(Pipeline)功能,这样客⼾端能将⼀批命令⼀次性传到 Redis,减少了⽹络的开销。

4. 简单稳定

  • redis源码很少,也就意味着普通的开发和运维⼈员完全可以 “吃透” 它。
  • 其次,Redis 使⽤单线程模型,这样不仅使得 Redis 服务端处理模型变得简单,⽽且也使得客⼾端开发变得简单。
  • Redis 不需要依赖于操作系统中的类库,⾃⼰实现了事件处理的相关功能。
  • Redis 具备相当的稳定性,在⼤量使⽤过程中,很少出现因为 Redis ⾃⾝ BUG⽽导致宕掉的情况。

5.客户端语言多

Redis 提供了简单的 TCP 通信协议,很多编程语⾔可以很⽅便地接⼊到 Redis,并且由于 Redis
受到社区和各⼤公司的⼴泛认可,所以⽀持 Redis 的客⼾端语⾔也⾮常多,⼏乎涵盖了主流的编程语⾔,例如 C、C++、Java、PHP、Python、NodeJS 等。

6. 持久化

通常看,将数据放在内存中是不安全的,⼀旦发⽣断电或者机器故障,重要的数据可能就会丢 失,因此 Redis 提供了两种持久化⽅式:RDB 和 AOF,即可以⽤两种策略将内存的数据保存到硬盘中,这样就保证了数据的可持久性。

7. 主从复制

Redis 提供了复制功能,实现了多个相同数据的 Redis 副本(Replica)。

在这里插入图片描述

8. 高可用和分布式

Redis 提供了⾼可⽤实现的 Redis 哨兵(Redis Sentinel),能够保证 Redis
结点的故障发现和故障⾃动转移。也提供了 Redis 集群(Redis
Cluster),是真正的分布式实现,提供了⾼可⽤、读写和容量的扩展性。

3.安装redis

安装redis

yum -y install redis

查看是否启动

ps -ef|grep redis

启动redis

redis-server /etc/redis.conf &

在这里插入图片描述6379是redis默认端口号,出现6379则启动成功。

停止redis

redis-cli shutdown

杀掉进程
(kill -9强制杀掉,kill -15优雅退出)

kill -9 PID

使用redis

redis-cli

具体操作如下:

在这里插入图片描述

4.设置远程连接

远程连接就是在远程连接另外一台计算机。当某台计算机开启了远程桌面连接功能后我们就可以在网络的另一端控制这台计算机了,通过远程桌面功能我们可以实时的操作这台计算机,在上面安装软件,运行程序,所有的一切都像是直接在该计算机上操作一样。

这里的远程连接指的是远程连接redis,即6379端口

⭐使用隧道的方式进行远程连接。

4.1 开启隧道

选择一个会话,右键->属性

在这里插入图片描述

  • 连接之后,需要重启会话连接,再打开才可以。
  • 后续访问云服务器的redis,就可以使用本地127.0.0.1+6379来访问。

⭐⭐注意:使用redis时,必须打开连接才可以。

其它电脑想访问云服务器:

  1. 开放端口号
  2. 防火墙

4.2 可视化客户端连接

使用的是redis 可视化客户端。

官网地址:redis

在这里插入图片描述

4.3 开启防火墙

防火墙(英语:Firewall)技术是通过有机结合各类用于安全管理与筛选的软件和硬件设备,帮助计算机网络于其内、外网之间构建一道相对隔绝的保护屏障,以保护用户资料与信息安全性的一种技术。

查看防火墙状态

systemctl status firewalld

为dead表示未开启:

在这里插入图片描述

开启防火墙

systemctl start firewalld

列出当前开放端口

firewall-cmd --list-ports

开放6379端口

firewall-cmd --add-port 6379/tcp

5.redis常见数据类型

Redis 提供了 5 种数据结构,理解每种数据结构的特点对于 Redis 开发运维⾮常重要,同时掌握每种数据结构的常⻅命令,会在使⽤ Redis 的时候做到游刃有余。

在这里插入图片描述

5.1 redis的一些全局命令

KEYS

返回所有满⾜样式(pattern)的 key。支持如下统配样式:

  • h?llo 匹配 hello, hallo 和 hxllo

  • h*llo 匹配 hllo 和heeeello

  • h[ae]llo匹配hello 和hallo 但不匹配 hillo

  • h[^e]llo 匹配hallo, hbllo, … 但不匹配 hello

  • h[a-b]llo 匹配hallo 和 hbllo

语法:

KEYS pattern

示例:

redis> KEYS *name*
1) "firstname"
2) "lastname"
redis> KEYS a??
1) "age"
redis> KEYS *
1) "age"
2) "firstname"
3) "lastname"

EXISTS

判断某个 key 是否存在。返回key 存在的个数。

语法:

EXISTS key [key ...]

示例:

redis> SET key1 "Hello"
"OK"
redis> EXISTS key1
(integer) 1
redis> EXISTS nosuchkey
(integer) 0
redis> SET key2 "World"
"OK"
redis> EXISTS key1 key2 nosuchkey
(integer) 2

DEL

删除指定的 key。返回删除掉的 key 的个数。

语法:

DEL key [key ...]

示例:

redis> SET key1 "Hello"
"OK"
redis> SET key2 "World"
"OK"
redis> DEL key1 key2 key3
(integer) 2

EXPIRE

为指定的 key 添加秒级的过期时间。返回值:1 表⽰设置成功。0 表⽰设置失败。

语法:

EXPIRE key seconds

示例:

redis> SET mykey "Hello"
"OK"
redis> EXPIRE mykey 10
(integer) 1
redis> TTL mykey
(integer) 10

TTL

获取指定 key 的过期时间,秒级。

语法:

TTL key

示例:

redis> SET mykey "Hello"
"OK"
redis> EXPIRE mykey 10
(integer) 1
redis> TTL mykey
(integer) 10

TYPE

返回 key 对应的数据类型。

语法:

TYPE key

示例:

redis> SET key1 "value"
"OK"
redis> LPUSH key2 "value"
(integer) 1
redis> SADD key3 "value"
(integer) 1
redis> TYPE key1
"string"
redis> TYPE key2
"list"
redis> TYPE key3
"set"

5.2 数据结构

type 命令实际返回的就是当前键的数据结构类型

  1. string(字符串)
  2. list(列表)
  3. hash(哈希)
  4. set(集合)
  5. zset(有序集合)

但这些只是 Redis 对外的数据结构。

在这里插入图片描述
实际上 Redis 针对每种数据结构都有⾃⼰的底层内部编码实现,⽽且是多种实
现,这样 Redis 会在合适的场景选择合适的内部编码,如图所示。

6. redis的典型应用—缓存(cache)

缓存 (cache) 是计算机中的⼀个经典的概念. 在很多场景中都会涉及到.核⼼思路就是把⼀些常⽤的数据放到触⼿可及(访问速度更快)的地⽅, ⽅便随时读取。

举个例子:

  • ⽐如我需要去⾼铁站坐⾼铁. 我们知道坐⾼铁是需要反复刷身份证的 (进⼊⾼铁 站, 检票, 上⻋, 乘⻋过程中, 出站…).
  • 正常来说, 我的身份证是放在⽪箱⾥的(⽪箱的存储空间⼤, ⾜够能装). 但是每次刷 身份证都需要开⼀次⽪箱找身份证, 就⾮常不⽅便.
  • 因此我就可以把身份证先放到⾐服⼝袋⾥. ⼝袋虽然空间⼩, 但是访问速度⽐⽪箱 快很多.
  • 这样的话每次刷身份证我只需要从⼝袋⾥掏身份证就⾏了, 就不必开⽪箱了. 此时 “⼝袋” 就是 “⽪箱” 的缓存.使⽤缓存能够⼤⼤提⾼访问效率.

6.1 使用redis做缓存

在⼀个⽹站中, 我们经常会使⽤关系型数据库 (⽐如 MySQL) 来存储数据. 关系型数据库虽然功能强⼤, 但是有⼀个很⼤的缺陷,就是性能不⾼. (换⽽⾔之, 进⾏⼀次查询操作消耗的系统资源多).

Redis 就是⼀个⽤来作为数据库缓存的常⻅⽅案.

Redis 访问速度⽐ MySQL 快很多. 或者说处理同⼀个访问请求, Redis 消耗的系统资源比MySQL 少很多. 因此 Redis 能⽀持的并发量更⼤.

  • Redis 数据在内存中, 访问内存⽐硬盘快很多.
  • Redis 只是⽀持简单的 key-value 存储, 不涉及复杂查询的那么多限制规则.

在这里插入图片描述

  • 客户端访问业务服务器, 发起查询请求.
  • 业务服务器先查询 Redis, 看想要的数据是否在 Redis 中存在.
  • 如果已经在 Redis 中存在了, 就直接返回. 此时不必访问 MySQL 了.
  • 如果在 Redis 中不存在, 再查询 MySQL,同时存在保存在Redis中

6.2 缓存穿透,缓存雪崩和缓存击穿

缓存穿透

什么是缓存穿透?

访问的 key 在 Redis 和 数据库中都不存在. 此时这样的 key 不会被放到缓存上,后续如果仍然在访问该key, 依然会访问到数据库.这就会导致数据库承担的请求太多, 压⼒很⼤. 这种情况称为 缓存穿透.

产生原因

  • 业务设计不合理. ⽐如缺少必要的参数校验环节, 导致⾮法的 key 也被进⾏查询了.
  • 开发/运维误操作. 不⼩⼼把部分数据从数据库上误删了.
  • ⿊客恶意攻击.

缓存雪崩

什么是缓存雪崩?

短时间内⼤量的 key 在缓存上失效, 导致数据库压⼒骤增, 甚⾄直接宕机.本来 Redis 是MySQL 的⼀个护盾, 帮 MySQL抵挡了很多外部的压⼒. ⼀旦护盾 突然失效了, MySQL ⾃身承担的压⼒骤增, 就可能直接崩溃.

产生原因

⼤规模 key 失效, 可能性主要有两种:

  • Redis 挂了.
  • Redis 上的⼤量的 key 同时过期

缓存击穿

什么是缓存击穿?

相当于缓存雪崩的特殊情况. 针对热点 key , 突然过期了, 导致⼤量的请求直接访问 到数据库上, 甚⾄引起数据库宕机.

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

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

相关文章

【绪论0】

#pic_center R 1 R_1 R1​ R 2 R^2 R2 目录 知识框架No.0 引言No.1 操作系统的概念功能和定义一、操作系统的概念和定义1、电脑的演变 二、操作系统的功能和目标 No.2 操作系统的特征一、并发二、共享三、虚拟四、异步 No.3 操作系统的发展与分类一、手工操作阶段二、批处理阶段…

Windows11 家庭中文版关于本地组策略编辑器gpedit.msc找不到即打不开的解决办法(征诚小张售后实测有效)

Windows11 家庭中文版关于本地组策略编辑器gpedit.msc找不到即打不开的解决办法 根本原因:是因为Windows11家庭中文版的 版本系统没内置安装本地策略组编辑器 好了废话不多说 直接说解决办法 第一步 首先电脑上新建一个空文本文件 输入以下内容: echo o…

Android Studio安装AI编程助手Github Copilot

csdn原创谢绝转载 简介 文档链接 https://docs.github.com/en/copilot/getting-started-with-github-copilot 它是个很牛B的编程辅助工具,装它,快装它. 支持以下IDE: IntelliJ IDEA (Ultimate, Community, Educational)Android StudioAppC…

Qt应用开发(基础篇)——时间类 QDateTime、QDate、QTime

一、前言 时间类QDateTime、QDate、QTime、QTimeZone保存了Qt的时间、日期、时区信息,常用的时间类部件都会用到这些数据结构,常用概念有年、月、日、时、分、秒、毫秒和时区,时间和时区就关系到时间戳和UTC的概念。 UTC时间,又称…

FPGA初步学习之串口发送模块【单字节和字符串的发送】

串口相关简介 UART 在发送或接收过程中的一帧数据由4部分组成,起始位、数据位、奇偶校验位和停止位,如图所示。其中,起始位标志着一帧数据的开始,停止位标志着一帧数据的结束,数据位是一帧数据中的有效数据。 通常用…

【贪心算法】leetcode刷题

贪心算法无固定套路。 核心思想:先找局部最优,再扩展到全局最优。 455.分发饼干 两种思路: 1、从大到小。局部最优就是大饼干喂给胃口大的,充分利用饼干尺寸喂饱一个,全局最优就是喂饱尽可能多的小孩。先遍历的胃口&a…

Win11大小写切换图标关闭方法

大家使用Win11操作系统的时候经常会切换大小写键盘,有些游戏本在游戏过程中需要切换大小写,这个时候电脑的屏幕就会出现大小写切换的图标而影响游戏体验; 那么想要关闭Win11电脑上大小写切换图标,又不知道具体怎么操作&#xff0c…

VS Code search tab

Vs Code search 栏的应用 我发现,在vs code种,上面的搜索框的功能非常多。在最初使用vscode时候,以为这只是一个普通的搜索框。后来,发现它可以用于全局搜索文件,比如使用ctrlshiftp。 后来,我发现&#xf…

lifecycleScope Unresolved reference

描述 导入了lifecycle.lifecycleScope,但是在activity中使用lifecycleScope报错出现Unresolved reference找不到引用。 导包 import androidx.lifecycle.lifecycleScope使用 lifecycleScope.launch(Dispatchers.IO) {...}错误 方案 代码中的activity继承Activ…

SSM(Vue3+ElementPlus+Axios+SSM前后端分离)--功能实现【四】

文章目录 SSM--功能实现实现功能06-修改家居信息需求分析/图解思路分析代码实现注意事项和细节 实现功能07-删除家居信息需求分析/图解思路分析代码实现 实现功能08-分页显示列表需求分析/图解思路分析代码实现完成测试分页显示效果 SSM–功能实现 实现功能06-修改家居信息 需…

39.利用matlab寻找素数(matlab程序)

1.简述 MATLAB嵌套循环允许使用一个循环在另一循环内,下面用一个嵌套循环来把所有从1到100的素数显示出来。 2.代码 %% 学习目标:寻找素数 clear sum5; %求0~100素数之和 ss0; %用来标定是否是素数,0表示不是 p…

MongoDB SQL

Microsoft Windows [版本 6.1.7601] 版权所有 (c) 2009 Microsoft Corporation。保留所有权利。C:\Users\Administrator>cd C:\MongoDB\Server\3.4\binC:\MongoDB\Server\3.4\bin> C:\MongoDB\Server\3.4\bin> C:\MongoDB\Server\3.4\bin>net start MongoDB 请求的…

Mac电脑怎么使用“磁盘工具”修复磁盘

我们可以使用“磁盘工具”的“急救”功能来查找和修复磁盘错误。 “磁盘工具”可以查找和修复与 Mac 磁盘的格式及目录结构有关的错误。使用 Mac 时,错误可能会导致意外行为,而重大错误甚至可能会导致 Mac 彻底无法启动。 继续之前,请确保您…

【C# 基础精讲】C# 开发环境搭建(Visual Studio等)

安装C#开发环境是开始学习和使用C#编程的第一步。目前,最常用的C#开发环境是Microsoft Visual Studio,它是一套强大的集成开发环境(IDE),提供了丰富的工具和功能,使开发C#应用程序变得更加便捷。以下是安装…

OSLog与NSLog对比

NSLog: NSLog的文档,第一句话就说:Logs an error message to the Apple System Log facility.,所以首先,NSLog就不是设计作为普通的debug log的,而是error log;其次,NSLog也并非是printf的简单…

Redis 6.5 服务端开启多线程源码

redis支持开启多线程,只有从socket到读取缓冲区和从输出缓冲区到socket这两段过程是多线程,而命令的执行还是单线程,并且是由主线程执行 借鉴:【Redis】事件驱动框架源码分析(多线程) 一、main启动时初始化…

nacos本地搭建+springCloud服务注册中心-nacos(简易实现)

一.nacos概述 nacos官网 二.Windows使用搭建nacos 较为完整使用参考 1.安装nacos 去nacos github下载nacos最新稳定版本,我用的是nacos-server-2.2.3.zip,下载后解压,得到 2.创建数据库 启动mysql,创建数据库nacos&#xff…

Day 72 固定激活函数的BP神经网络 (1. 网络结构理解)

代码: package dl;/*** Back-propagation neural networks. The code comes from*/public class SimpleAnn extends GeneralAnn{/*** The value of each node that changes during the forward process. The first* dimension stands for the layer, and the secon…

[迁移学习]领域泛化

一、概念 相较于领域适应,领域泛化(Domain generalization)最显著的区别在于训练过程中不能访问测试集。 领域泛化的损失函数一般可以描述为以下形式: 该式分为三项:第一项表示各训练集权重的线性组合,其中π为使该项最小的系数&a…

微信云托管(本地调试)⑥:nginx、vue刷新404问题

一、nginx默认路径 1.1、默认配置文件路径:/etc/nginx/nginx.conf 1.2、默认资源路径:/usr/share/nginx/html/index.html 二、修改nginx.conf配置 (注意配置中的:include /etc/nginx/conf.d/*.conf; 里面包了一个server配置文件…