Redis基础认识

news2024/12/27 11:03:37

日升时奋斗,日落时自省

目录

1、Redis安装及配置

2、缓存简介

2.1、缓存优点

2.2、缓存分类

2.3、常见缓存使用

2.3.1、Spring Cache

2.3.2、Redis

3、Redis数据类型和使用

3.1、字符串类型

3.2、哈希类型

3.3、列表类型

3.4、集合类型

3.5、有序集合类型

4、持久化

4.1、RDB

4.1.1、RDB优点

4.1.2、RDB缺点

4.2、AOF

4.2.1、AOF优点

4.2.2、AOF缺点

4.3、混合持久化

5、缓存相关问题

5.1、缓存雪崩

 5.1.1、解决方案

5.2、缓存穿透

5.2.1、解决方案

5.3、缓存击穿

 5.3.1、解决方案

5.4、缓存预热

6、Redis集群

6.1、主从同步

6.2、哨兵模式

6.3、Redis集群服务


edis安装及配置

Redis基础认识就从安装Redis来了解

这里就下载在Linux服务器上,当前可以安装在Windows上,但是我们基本都是将项目架在服务器上的,这里也是针对Redis在服务器上的使用

(1)使用命令将redis 安装到 linux服务器:

yum -y install redis   

如果当前不能进行安装,进行操作:

安装一个压缩功能

yum install -y lrzsz

(2)启动redis

以后台的运行方式启动redis:

redis-server /etc/redis.conf &

(3)操作redis

命令启动redis客户端:

redis-cli

前两步就不在进行演示,我这里已经安装好了,这里来看一下redis启动怎么样

 回车之后就会体现回环IP和端口号(当前端口号“6379”是独有的)

(4)设置远程连接

<1>将redis配置文件下载到本地:redis配置文件是Linux下的/etc/redis.conf;

<2>将redis.conf中的“bind 127.0.0.1”注释掉;(解决访问本机)

<3>将redis.conf中的“protected-mode yes”改为“protected-mode no”;(关闭保护模式)

<4>将修改后的redis.conf上传至linux下的/etc目录

<5>使用命令“redis-cli shutdown”先关闭redis服务,在使用“redis-server /etc/redis.conf &” 启动redis服务

以上服务进行演示,在演示之前这里给友友们提供一个比较方便的linux终端软件,FinalShell下载和安装过程也比较简单,所以这里就不在进行演示,一直下一步就可以,可以设置安装位置;

 以上配置好以后,将redis关闭,重新启动就可以了;

注:这里先给友友们推荐一个软件Another Redis Desktop Manager 找个3.0以上版本就够用了,方便我们看设置的信息

2、缓存简介

在程序中,也无非就是直接调用数据库取数据在很早之前,一个两个访问数据库没事,但是多个人访问数据库呢,数据库的资源也有限,也很昂贵,因此为防止数据库被过度的浪费,就有了缓存

缓存也就是部分常用数据存在这里,每次程序调用的时候会先走缓存,如果缓存没有在去访问数据库,下面通过图来分析

使用缓存之后:

 注:所有的程序不会直接调用数据库,而是会先调用缓存,当缓存中有数据时会直接返回,当缓存中没有数据时才去查询数据库,这样就大大的降低了数据库的压力,并加速了程序的响应速度。

2.1、缓存优点

相比于数据库而言,缓存的操作性能更高,缓存性能高的主要原因:

<1>缓存一般都是key-value查询数据的,因为不像数据库一样还有查询的条件等因素,所以查询的性能一般会比数据库高

<2>缓存的数据是存储在内存中的,而数据库的数据是存在磁盘中,因为内存的操作性能远远大于磁盘,因此缓存的查询效率会高很多

<3>缓存更容易做分布式部署(当一台服务器变成多台相连的服务器集群),而数据库一般比较难实现分布式部署,因此缓存的负载和性能更容易平行扩展和增加

2.2、缓存分类

缓存大致可以分为两大类:

<1>本地缓存

本地缓存也叫单机缓存,也就是说可以应用在单机环境下的缓存。所谓的单机环境是指,将服务部署到一台,本地缓存的优点是读取速度快,但是不能进行大数据量存储,本地缓存的特征是只适用于当前系统

<2>分布式缓存

分布式缓存是指可以应用在分布式系统中的缓存。所谓的分布式系统是指将一套服务器部署到多台服务器,并且通过负载分发将用户的请求按照一定的规则分发到不同的服务器

2.3、常见缓存使用

本地缓存常见使用:Spring Cache 、MyBatis 缓存

分布式缓存常见使用:Redis 和 Memcached

2.3.1、Spring Cache

在Spring Boot 项目,可以直接使用Spring 的内置Cache(本地缓存),只需要完成以下是哪个个步骤就可以正常使用了(这里没有代码分析)。

<1>开启缓存

<2>操作缓存

<3>调用缓存

2.3.2、Redis

在Spring 框架中我们也可以直接操作Redis缓存 

项目是不同的操作同一个Redis,因此Redis对于整个项目来说是全局的(分布式)

Redis和Memcached区别:

Redis和Memcached都是基于内存的数据存储系统,但是有一些区别。

存储方式:Memcached是高性能分布式内存缓存服务,而Redis是一个开源的key-value存储系统。与Memcached类似,Redis将大部分数据存储在内存中(不是全部);

数据类型:Memcached支持字符串、哈希表、链表等数据类型的相关操作。但是,Redis还提供了一些其他的功能,例如:事务支持、持久化、Lua脚本支持等等(相对比较丰富)

存储大小:Redis最大可以达到512mb,memcache只有1mb

3、Redis数据类型和使用

Redis有5个基础数据类型:String(字符串类型)、Hash(哈希类型)、List(列表类型)、Set(集合类型)、ZSet有序集合类型

注:常用类型:字符串和哈希类型

3.1、字符串类型

使用方法:

创建操作:

 set  user hello

set添加数据键值key-value 这里的user 就是key值 ,hello就是value

获取操作:

get user

get获取key对应的value 这里就是获取user的value值

字符串使用场景:

<1>存放用户登录信息

<2>存放文章详情和列表信息

<3>存放和累计网页的统计信息

3.2、哈希类型

哈希类型又成为散列类型或者是哈希表类型,它是将一个键值和一个特殊的“哈希表"关联起来,这个“哈希表”表包含两列数据:字段的和值它就相当于Java中的Map<String,Map<String,String>>结构这里的字典类型,下面图解一下

 我们用字典类型存储用户信息,并且使用字典类型来存储此类信息就无需手动序列化和反序列化数据了,使用起来更加高效和方便

使用方法:

 哈希类型的的数据结构就类似于一个哈希表,每个数组后都是一个链表,这里再图解一下

注:这里只是为了演示其数据结构,不是次都使用链表的方式来存储的,一般情况下都是采用哈希方式存储的,但发生哈希冲突时才会使用链表结构来存储数据

3.3、列表类型

列表类型(List)是一个使用链表结构存储的有序结构,它的元素插入会按照先后顺序存储到链表结构中,因此它的元素操作中插入和删除的时间复杂度为O(1),相对来说速度上还是比较快的,但是它查询的时间复杂度为O(n),查询就会比较慢了

使用方法:

插入操作:

lpush list  2 3 4

就lpush就是给list赋值可以赋值多个,用空格隔开,所以这里就是给list赋值了2 3 4 这三个值

查询操作:

lrange list start stop 

lrange就是查询的关键词 list就是我们存储值的名称,start就是从几开始查询 ,stop就是截止位置

删除操作:

lpop list 

lpop是删除的关键词  list就是删除列表的名称,这里没有具体的删除值,因为只能删除第一个元素

 使用场景:

消息队列:列表类型使用rpush实现先进先出的功能,同时有可以使用lpop轻松弹出,拥来实现消息队列

文章列表:对于自己的文章列表就可以使用List存储,是有序的结构,所以这样又可以完美的实现分页功能,从而加快程序的响应速度

3.4、集合类型

集合类型(set)是一个无序并唯一的键值集合

添加键值集合:

sadd myset 2 3 4

查询集合:

smembers myset

 集合类型的经典使用场景如下:

<1> “关注”这个词是现在很常见一个词,但是关注者是不能重复的,这里就可以使用集合来存储

<2>身份证信息也可以类似于这样存储,因为身份证也是独一份的

集合类型(Set)和列表类型(List)区别:

<1>列表可以存储重复的元素,集合只能存储非重复元素

<2>列表存储是有顺序的,而集合存储是没有顺序的

3.5、有序集合类型

有序集合类型(Sorted Set)相比于集合类型多了一个排序属性score(分值),对于有序集合ZSet,每个存储元素相当于有两个值组成的,一个是有序结合的元素值,一个排序值。有序集合的存储元素值也是不能重复的,但分值是可以重复的

 添加元素:

zadd zset1 分值 元素值 (可以有多个分值和元素值)

查询所有元素:

zrange zset1  start stop 

查询和之前基本没有什么不同,从start对应的分值开始,stop是结束分值,查询也是依据分值进行查询的

4、持久化

持久化:将数据从内存保存到磁盘的过程,目的就是为了防止数据丢失

Redis与Memcached的主要区别之一也是持久化,Redis支持持久化而Memcached不支持

Redis有这三种持久化方式:快照方式(RDB),文件追加方式(AOF),混合持久化方式

注:redis-cli命令行中执行config set aof-use-rdb-preamble yes 来开启混合持久化,当
开启混合持久化时 Redis 就以混合持久化⽅式来作为持久化策略;当没有开启混合持久化的情况下,使⽤ config set appendonly yes 来开启 AOF 持久化的策略,当 AOF 和混合持久化都没开启的情况下默认会是 RDB 持久化的⽅式

4.1、RDB

快照方式:将某一一个时刻的内存数据,以二进制的方式写入磁盘

4.1.1、RDB优点

存储方式:为二进制的数据,占用内存小,适合备份

传输效率:文件紧凑,传输到远程服务器更快

相比于AOF格式,RDB可以更快的重启,减少重启的时间

4.1.2、RDB缺点

<1>保存数据受限,只是一段时间的数据,如果中途Redis服务器意外终止,会丢失一段时间的数据

<2>需要经常fork()才能使用子进程持久化到磁盘上,如果数据集很大,fork很多次耗时很多,cpu性能降低,可能导致Redis停止为客户端服务几毫秒长可达一秒钟

4.2、AOF

文件追加方式:记录所有操作命令,并以文本的形式追加到文件中

4.2.1、AOF优点

<1>AOF持久化保存的数据更加完整,AOF提供了三种保存策略,每次操作保存,每秒钟保存一次,跟随系统的持久化策略保存,Redis进程挂了,最多丢掉1秒钟的数据

<2>AOF 采⽤的是命令追加的写⼊⽅式,所以不会出现⽂件损坏的问题,即使由于某些意外原因,也可以通过 redis-check-aof ⼯具轻松的修复,AOF日志文件以append-only模式写入,写入性能比较稳定;

<3>它是把所有 Redis 键值操作命令,以⽂件的⽅式存⼊了磁盘。即使不⼩⼼使⽤ flushall 命令删除了所有键值信息,只要使⽤ AOF ⽂件,删除最后的 flushall 命令,重启 Redis 即可恢复之前误删的数据

4.2.2、AOF缺点

<1>AOF文件比RDB文件大,因为它会记录所有的写操作,而不仅仅是最近一次的快照。

<2>AOF的速度可能会比RDB慢,因为它需要执行fsync操作来保证数据的一致性。

4.3、混合持久化

优点:混合持久化结合了 RDB 和 AOF 持久化的优点,可以在保证数据安全性的同时,提高Redis的读写性能

缺点:AOF ⽂件中添加了 RDB 格式的内容,使得 AOF ⽂件的可读性变得很差,版本限制4.0之前版本使用不了

5、缓存相关问题

5.1、缓存雪崩

缓存雪崩是指在一个时间段内,缓存中大量的数据同时失效,导致请求都落在了数据库上,从而引起数据库压力过大,甚至崩溃(这里有点绕,我们进行图解)

 5.1.1、解决方案

<1>加锁排队:在缓存失效时,先将请求加入到一个队列中,然后通过加锁的方式,依次从队列中取出请求并访问数据库,直到所有请求都处理完毕,这是以降低部分用户体验的一种缓冲方法(相对比较影响性能)

<2>设置不同的过期时间,避免缓存在同一时间过期(减少访问数据库访问量)

<3>采用多级缓存、异步更新缓存(实际举例理解:在一级缓存中访问不到的话,就会去访问二级缓存,异步其实与多级缓存比较相仿)

5.2、缓存穿透

缓存穿透是指查询一个缓存和数据库中都没有的数据,由于大部分缓存策略是被动加载的,并且出于容错考虑,如果从存储层查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到存储层去查询,失去了缓存的意义

红色路径就是缓存穿透的执行路径

5.2.1、解决方案

我们可以把每次从数据库查询的数据都保存到缓存中,为了提⾼前台⽤户的使⽤体验 (解
决⻓时间内查询不到任何信息的情况),我们可以将空结果的缓存时间设置的短⼀些

5.3、缓存击穿

缓存击穿是指当一个请求无法从缓存中得到响应时,它会导致服务器不断地进行数据库查询,从而使应用程序的性能大幅降低。 缓存击穿的原因主要有热点数据、缓存过期和高并发等

 5.3.1、解决方案

<1>加锁排队:与缓存雪崩加锁排队的方法类似,都是在查询数据库时加锁排队,缓冲操作请求以此来减少服务器运行压力(但是会降低性能)

<2>设置redis过期时间为永不过期,保证缓存的稳定性,但是也有弊端就是,热点数据需要及时更新到缓存中,否则查询结果可能有误差

5.4、缓存预热

<1>缓存预热是一种主动加载热点数据到缓存的策略,旨在提高缓存命中率、保持应用程序性能稳定和优化用户体验。

<2>在系统上线之前,将需要缓存的热点数据加载到缓存中,以避免在用户请求时,先查询数据库,然后再将数据缓存的问题。

 注:其实就是程序启动之初就将部分数据查询缓存起来,应用程序都通过redis缓存进行

缓存预热的实现思路有以下三种

<1>提前给缓存中嵌入部分数据,再提供服务。

<2>根据当天的具体访问情况,试试统计出频率较高的热数据。(设置定时)

<3>将热点数据持久化下来,然后在模块更新的时候预热下缓存。(手动触发预热)

6、Redis集群

Redis多机服务主要包含以下3个内容:

<1>Redis主从同步

<2>Redis哨兵模式

<3>Redis集群服务(3.0及以后版本)

6.1、主从同步

Redis主从同步是指将一个Redis实例作为主节点,其他Redis实例作为从节点,通过复制主节点的数据来实现数据同步。

在Redis主从同步中,主节点负责写入数据,从节点负责读取数据。当主节点写入数据时,会将数据发送给所有从节点,从节点接收到数据后进行同步。当从节点接收到数据后,会将数据写入自己的内存中,并等待下一次同步

优点:提高数据的可用性和可靠性,同时也可以提高系统的读写性能,当主服务器磁盘坏掉之后,其他从服务器还保留着相关的数据,不⾄于数据全部丢失。

缺点:需要额外的网络带宽和存储空间,并且在主节点出现故障时,可能会导致整个系统不可用

6.2、哨兵模式

专注于对Redis实例(主节点、从节点)运行状态的监控,并能够在主节点发生故障时通过一系列的机制实现选主及主从切换,实现故障转移,确保整个Redis系统的可用性,哨兵模式(Redis Sentinel)

使用哨兵模式可以用来监控主从同步服务器节点,并在主从服务器出现问题的时候实现自动容灾恢复

 注:一个哨兵模式的最小分配单位一主一从

原理:

哨兵会不断地检查主节点和从节点是否正常工作,如果出现问题,哨兵可以通过API通知系统管理员或者其他程序。当主节点发生故障时,哨兵会自动将从节点切换为主节点,并将新主节点的信息写入配置文件中

6.3、Redis集群服务

Redis 集群(Redis Cluster)是 Redis 多机运⾏最完美的终极⽅案,它是 Redis 3.0 之后推出的服
务,它的出现可以让我们完全抛弃主从同步和哨兵模式来实现 Redis 多机运⾏。

优点:Redis集群通过分区来提供一定程度的可用性:即使集群中有一部分节点失效或者无法进行通讯,集群也可以继续处理命令请求

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

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

相关文章

华为举办5G商业对话沙龙,携手运营商共促5G产业再升级

【中国&#xff0c;上海&#xff0c;2023年06月27日】在2023 MWC 上海期间&#xff0c;华为举办“5G商业对话沙龙”&#xff0c;旨在面向国内外运营商&#xff0c;搭建产业深度交流和求策问计的对话平台&#xff0c;共同促进5G产业再升级。会议期间&#xff0c;与会嘉宾达成一致…

回收站数据恢复方法 回收站清空如何恢复数据

在日常使用计算机时&#xff0c;我们经常会不小心删除文件或者清空回收站&#xff0c;导致重要的数据似乎丢失。然而&#xff0c;在某些情况下&#xff0c;我们仍然有可能通过一些回收站数据恢复方法来找回已经被清空的回收站中的数据。今天我们一起来了解一下回收站数据恢复方…

HadoopHA搭建

主机设置 三台主机关闭防火墙 三台主机关闭SeLinux安全机制 给每台主机修改主机名 配置三台主机地址映射 设置免密登录 安装JDK 解压安装 配置jdk的环境变量 测试安装成功 分发JDK 分发配置文件 ZooKeeper配置 解压安装 添加ZK环境变量 分发文件 启动 安…

Redis基础第一篇

一 简介 redis是一个key-value存储系统。和Memcached类似&#xff0c;它支持存储的value类型相对更多&#xff0c;包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash&#xff08;哈希类型&#xff09;。这些数据类型都支持push/pop、add/remove及…

【Python基础函数笔记】random.shuffle()

官方文档&#xff1a;random --- 生成伪随机数 — Python 3.10.11 文档 import random a[[sunny123.com,sunny],[zhangsanjust.cn.com,zhangsan],[lisijust.cn.com,lisi],[wangwujust.cn.com,wangwu]] random.shuffle(a) print(a)random.shuffle()用来打乱列表的。

ubuntu20下安装网络调试助手

1、下载安装包 链接&#xff1a;https://pan.baidu.com/s/1g-IzsYBuicxiRaeo4aNyqw?pwd35wm 提取码&#xff1a;35wm --来自百度网盘超级会员V6的分享 2、安装依赖文件 sudo add-apt-repository ppa:rock-core/qt4 sudo apt install libqt4-declarative 3、安装网络调试工…

如何在 SOLIDWORKS 工程图中显示金折弯线?

今天我们将展示使用多种方法可以使钣金折弯线在SOLIDWORKS工程图中显示&#xff08;或不显示&#xff09;。 在哪里可以找到弯曲线 首先&#xff0c;我们需要知道弯曲线存储/创建/保存的位置。在使用钣金工具生成的零件中&#xff0c;折弯线存储在展开模式特征中。显示/隐藏和…

差值结构的基态和跃迁

( A, B )---3*30*2---( 1, 0 )( 0, 1 ) 让网络的输入只有3个节点&#xff0c;AB训练集各由5张二值化的图片组成&#xff0c;让差值结构中有6个1, 行分布是0&#xff0c;1&#xff0c;1&#xff0c;2&#xff0c;2列分布是4&#xff0c;2. 得到数据 差值结构 A-B 迭代次数 共…

win10笔记本电脑总是自动休眠解决办法

1、运行regedit&#xff0c;进入注册表编辑器&#xff1b; 2、在打开的注册表编辑器左侧定位到&#xff1a;计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\PowerSettings\238C9FA8-0AAD-41ED-83F4-97BE242C8F20\7bc4a2f9-d8fc-4469-b07b-33eb785aaca0&…

软件测试必问的十道面试题

前言 &#xff08;第一个就刷掉一大批人&#xff09; 有很多“会自动化”的同学来咨询技术问题&#xff0c;他总会问到我一些元素定位的问题。元素定位其实都不算自动化面试的问题。 一般我都会问&#xff1a;你是定位不到吗&#xff1f;通常结果都是说确实定位不到。 做自…

100种思维模型之冗余备份系统思维模型-84

冗余备份系统思维&#xff0c;源于工程学&#xff0c;它指的是利用并联模型来提高系统可靠性&#xff0c;即通过备份或者自动防故障设备、措施来应对意外情况。 生活中&#xff0c;我们常说的Plan B、备胎计划等就是一种冗余备份。 01、何谓冗余备份系统思维模型 一、冗余备份…

C++primer(第五版)第三章(字符串、向量和数组)

本章主要介绍了字符串和vector以及数组&#xff0c;但是vector和数组差不多甚至比数组更加强大&#xff0c;完全可以用vector来代替数组&#xff0c;所以尽管书中有介绍数组&#xff0c;但我也不过多记录&#xff0c;有兴趣的小伙伴可以自行查看原书。 3.1命名空间的using声明…

MySQL-SQL InnoDB引擎 (上)

♥️作者&#xff1a;小刘在C站 ♥️个人主页&#xff1a; 小刘主页 ♥️努力不一定有回报&#xff0c;但一定会有收获加油&#xff01;一起努力&#xff0c;共赴美好人生&#xff01; ♥️学习两年总结出的运维经验&#xff0c;以及思科模拟器全套网络实验教程。专栏&#xf…

使用VuePress生成静态网站并部署到github

目录 第一步 安装VuePress第二步 书写博客第二步 部署到github 第一步 安装VuePress VuePress是一个基于Vue驱动的静态网站生成器 相关资料 文档&#xff1a;https://v1.vuepress.vuejs.org/zh/github: https://github.com/vuejs/vuepressvuepress-deploy: https://github.c…

在 CentOS 7/8 上安装 NVIDIA Container Toolkit

文章目录 设置存储库和 GPG 密钥更新包列表后安装 nvidia-container-toolkit 包&#xff08;和依赖项&#xff09;配置 Docker 守护进程以识别 NVIDIA 容器运行时设置默认运行时后&#xff0c;重新启动 Docker 守护进程以完成安装测试 参考官方文档&#xff0c;在 CentOS 7 上…

测试用例设计简单吗?简单!但你有可能栽在这5道S级测试用例设计题上!(附答案)

很多人不知道写测试用例有什么用&#xff0c;而仅仅是像工具人一样&#xff0c;在每次提测之前&#xff0c;把测试用例照着需求文档抄一遍&#xff0c;仿佛像是走个过场。 开发提测之后&#xff0c;就照着测试用例点点点&#xff0c;可能一天就走完用例了&#xff0c;开发代码写…

Spring专家课程Day01_Spring-IOC

​ 文章目录 基础配置1)基础文件结构(Maven项目创建) 一、01_Spring概述_IOC_HelloWorld1.Spring框架的两个核心功能1.1) IOC/DI ,控制反转依赖注入!1.2) AOP,面向切面编程 2.IOC的两种模式2.1)配置文件中配置 Bean2.2)配置文件,组件扫描注解类注解Component 二、02_JavaBean_J…

数睿通2.0功能发布—集成Doris、数仓动态配置、质量任务完善、接入速度优化

文章目录 引言集成 Doris数仓动态配置质量任务完善接入速度优化结语 引言 数睿通 2.0 数据中台迎来了 6 月份的更新&#xff0c;本次更新集成了 Doris 数据库&#xff0c;可用于数据集成&#xff0c;数据开发等模块。过去数仓使用的是 TiDB&#xff0c;新版本可以根据自身需求…

记一次移动九联UNT401H电视盒子免拆刷机(图文详细教程 附所有软件)

文章目录 1.准备1.硬件介绍2.刷机硬件3.相关软件1.刷机软件2.工具软件 2.刷机1.开启adb2.查看IP地址3.写入recovery4.刷入系统 3.系统使用1.首次启动2.安装第三方软件安装blibili tv看IPTV 4.总结附&#xff1a; 声明&#xff1a;本安卓固件&#xff0c;仅供内部测试和技术交流…

vue element UI在button按钮使用 @keyup.enter不生效

如图所示&#xff0c;没效果。在按钮上绑定keyup事件&#xff0c;加上.native覆盖原有封装的keyup事件 解决办法 created () {document.onkeyup e > {if (e.keyCode 13 && e.target.baseURI.match(/login/)) {// 调用登录 验证方法this.submitForm()}}}成功解决&…