【redis】redis的认识和安装

目录

  • 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.mzph.cn/news/24445.shtml

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

相关文章

Excel·VBA表格横向、纵向相互转换

如图:对图中区域 A1:M6 横向表格,转换成区域 A1:C20 纵向表格,即 B:M 列转换成每2列一组按行写入,并删除空行。同理,反向操作就是纵向表格转换成横向表格 目录 横向转纵向实现方法1转换结果 实现方法2转换结果 纵向转横…

《吐血整理》高级系列教程-吃透Fiddler抓包教程(30)-Fiddler如何抓Android7.0以上的Https包-番外篇

1.简介 通过宏哥前边几篇文章的讲解和介绍想必大家都知道android7.0以上,有android的机制不在信任用户证书,导致https协议无法抓包。除非把证书装在系统信任的证书里,此时手机需要root权限。但是大家都知道root手机是非常繁琐的且不安全&…

HDFS中的sequence file

sequence file序列化文件 介绍优缺点格式未压缩格式基于record压缩格式基于block压缩格式 介绍 sequence file是hadoop提供的一种二进制文件存储格式一条数据称之为record&#xff08;记录&#xff09;&#xff0c;底层直接以<key, value>键值对形式序列化到文件中 优…

动态规划(一)

一、背包问题 1.1 01背包问题 特点:每件物品最多只用于一次 属性包括:最大值(Max)、最小值(Min)、数量 #include<iostream> #include<algorithm>using namespace std;const int N 1010;int n,m; int v[N],w[N]; int f[N][N];int main() {cin>>n>>m;…

MyCat概述

1.MyCat概述 MyCat是阿里巴巴的产品&#xff0c;他是开源的、基于Java语言编写的MySQL数据库中间件。可以像使用mysql一样来使用mycat&#xff0c;对于开发人员来说根本感觉不到mycat的存在。 MyCat下载地址&#xff1a;http://dl.mycat.org.cn/ MyCat官网&#xff1a;http:/…

CuratorFramework接口的作用和使用

CuratorFramework接口是Apache Curator库中的核心接口之一&#xff0c;用于与ZooKeeper集群进行交互。它提供了一组丰富的方法和功能&#xff0c;用于简化与ZooKeeper的交互操作&#xff0c;包括创建、删除、读取和更新节点等。 CuratorFramework接口的主要作用是封装了底层与…

【C语言进阶篇】模拟实现通讯录 (内附源码)

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏:《C语言初阶篇》 《C语言进阶篇》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 文章目录 &#x1f4cb; 前言一 、 通讯录的简介1.1 联系人的类型定义1.2 通讯录的定义1.3 通讯录要实现的功能 二 、 如何…

计算机网络的定义和分类

计算机网络的定义和分类 计算机网络的定义 计算机网络的精确定义并未统一计算机网络最简单的定义是&#xff1a;一些互相连接的、自治的计算机的集合 互连:指计算机之间可以通过有线或无线的方式进行数据通信自治:是指独立的计算机&#xff0c;它有自己的硬件和软件&#xff…

Python语法:... for ... in ... if ...

Python中&#xff0c;for...in...[if]...语句是一种简洁的构建List的方法&#xff0c;从for给定的List中选择出满足if条件的元素组成新的List&#xff0c;其中if是可以省略的。下面举几个简单的例子进行说明 [for in ]: ...for ....in..... 语句. 实例如下&#xff1a; (1) …

PHP实现首字母头像

<?php $name"哈哈"; $logoletter_avatar($name);echo <img src".$logo." style" border-radius: 50%;">;function letter_avatar($text) {$total unpack(L, hash(adler32, $text, true))[1];$hue $total % 360;list($r, $g, $b) hs…

【go-zero】docker镜像直接部署API与RPC服务 如何实现注册发现?docker network 实现 go-zero 注册发现

一、场景&问题 使用docker直接部署go-zero微服务会发现API无法找到RPC服务 1、API无法发现RPC服务 用docker直接部署 我们会发现API无法注册发现RPC服务 原因是我们缺少了docker的network网桥 2、系统内查看 RPC服务运行正常API服务启动,通过docker logs 查看日志还是未…

Linux学习之正则表达式元字符和grep命令

cat /etc/redhat-release看到操作系统的版本是CentOS Linux release 7.6.1810 (Core)&#xff0c;uname -r可以看到内核版本是3.10.0-957.21.3.el7.x86_64。 正则表达式是一种搜索字符串的模式&#xff0c;通俗点理解&#xff0c;也就是普通字符和元字符共同组成的字符集合匹…

模板方法模式——定义算法的框架

1、简介 1.1、概述 模板方法模式是结构最简单的行为型设计模式&#xff0c;在其结构中只存在父类与子类之间的继承关系。通过使用模板方法模式&#xff0c;可以将一些复杂流程的实现步骤封装在一系列基本方法中。在抽象父类中提供一个称之为模板方法的方法来定义这些基本方法…

vscode插件不能搜索安装

1 现象 vscode搜索自己的插件&#xff0c;报错&#xff1a; Error while fetching extensions. HXR failed2 原因 之前用vscode开发golang语言&#xff0c;设置了proxy代理&#xff0c;所以导致错误&#xff0c;删除即可 重启vscode 3 结果

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

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

git之reflog分析

写在前面 本文一起看下reflog命令。 1&#xff1a;场景描述 在开发的过程中&#xff0c;因为修改错误&#xff0c;想要通过git reset命令恢复到之前的某个版本&#xff0c;但是选择提交ID错误&#xff0c;导致多恢复了一个版本&#xff0c;假定&#xff0c;该版本对应的内容…

macOS 环境变量加载探究

使用 macOS 安装环境&#xff0c;见到过很数种环境变量配置方法&#xff0c;每次也都是按照别人的代码&#xff0c;人家配置在哪 我就配置在哪&#xff0c;其实不太清楚有什么区别&#xff0c;决定记录下。 本机 macOS 13.3&#xff0c;从 macOS Catalina(10.15) 开始&#xf…

用html+javascript打造公文一键排版系统15:一键删除所有空格

现在我们来实现一键删除所有空格的功能。 一、使用原有的代码来实现&#xff0c;测试效果并不理想 在这之前我们已经为String对象编写了一个使用正则表达式来删除所有空格的方法&#xff1a; //功能&#xff1a;删除字符串中的所有空格 //记录&#xff1a;20230726创建 Stri…

腾讯云-宝塔添加MySQL数据库

1. 数据库菜单 2. 添加数据库 3. 数据库添加成功 4. 上传数据库文件 5. 导入数据库文件 6. 开启数据库权限 7. 添加安全组 (宝塔/腾讯云) 8. Navicat 连接成功

python 封装sql 增删改查连接MySQL

select * from Teacher limit 10 连接字符串配置MysqlConfig.py class MysqlConfig:HOST 192.168.56.210PORT 3306USER rootPASSWORD 1qaz0987654321DBStudentDBCHARSET utf8封装增删改查MysqlConnection.py Author: tkhywang 2810248865qq.com Date: 2023-06-19 15:44:48 Las…