美文网首页
分布式缓存中间件redis应用

分布式缓存中间件redis应用

作者: 烦远远 | 来源:发表于2021-11-03 21:35 被阅读0次

    1 nosql数据库简介

            NoSQL是 Not Only SQL 的缩写,意即"不仅仅是SQL"的意思,泛指非关系型的数据库。强调Key-Value Stores和文档数据库的优点,而不是单纯的反对RDBMS。

    NoSQL产品是传统关系型数据库的功能阉割版本,通过减少用不到或很少用的功能,来大幅度提高产品性能

    NoSQL产品redis、mongodb、 MembaseHBase 。

    2 redis简介

    Redis是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。

    Redis与其他 key - value 缓存产品有以下三个特点:

    1.Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。

    2.Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。

    3.Redis支持数据的备份,即master-slave模式的数据备份。

    3 redis linux安装(安装方式1)

    第一步:上传压缩包到服务器(我的位置是/data/soft)解压。

    第二步:安装插件 yum install gcc

    第三步:进入解压缩的文件目录 看到有Makefile。

    和nginx一样,也是先make编译然后再make install 安装。

    列表

    make 

    make install 

    安装成功了

    安装成功

    第四步:更改配置

    将启动文件拷贝到init.d    cp ../utils/redis_init_script /etc/init.d/

    创建redis配置文件夹        mkdir /usr/local/redis -p

    将配置文件拷贝过去         cp /data/soft/redis-5.0.5/redis.conf /usr/local/redis/

    编辑配置文件: 

    将daemonize的值改为yes

    将bind 127.0.0.1 改为bind 0.0.0.0

    添加 working 持久化工作空间(可以理解为oracle的workspace)

    mkdir /usr/local/redis/working -p

    添加工作空间

    添加redis连接密码

    添加连接密码

    修改启动文件里面redis配置文件的路劲

    vi  /etc/init.d/redis_init_script

    修改配置文件的路径

    在启动脚本中加上密码配置:

    -a "password"

    添加密码

    第五步: 启动redis

    为启动脚本添加权限  : chmod 777 redis_init_script 

    启动redis:   ./redis_init_script start

    停止redis:   ./redis_init_script stop

    添加权限并启动

    查看端口是否已经启动

    已经启动redis

    查看redis是否存活命令

    redis-cli -a "abc123" ping  ---abc123 是redis 密码

    返回 Pong 结果表示成功!

    redis是否存活

    第六步:设置redis开机自启

    在启动脚本中加上:

    #chkconfig: 22345 10 90

    #description: Start and Stop redis

    添加如图信息

    然后执行注册脚本命令:

    chkconfig redis_init_script on

    4 redis linux 安装(安装方式2)

    yum -y install gcc automake autoconf libtool make 

    # wget https://github.com/antirez/redis/archive/3.2-rc1.tar.gz

    # tar zxvf 3.2-rc1.tar.gz

    # cd redis-3.2-rc1

    # make MALLOC=libc

    # cd src

    # make install PREFIX=/usr/local/redis

    # mkdir /usr/local/redis/etc

    # cp ../redis.conf /usr/local/redis/etc

    #cp /usr/local/redis/bin/* /usr/bin/

    # vi /usr/local/redis/etc/redis.conf

    将daemonize的值改为yes

    将bind 127.0.0.1 改为bind 0.0.0.0

    启动redis

    # /usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf

    # redis-cli -h 127.0.0.1

    尝试链接redis试试

    5 redis 客户端命令基本使用

    启动客户端输入界面 redis-cli 

    输入密码  auth abc123 

    redis-cli

    然后就可以存取删值了

    命令增删改

    6 redis的数据类型

    6.1 String 字符串

    String字符串

    6.2 hash

    hash 是存储对象类型的数据的。类似如图

    hash 类型

    6.3 list 

    list 类型

    7 spring 集成 redis

    第一步:引入pom 依赖

    pom 依赖

    第二步:更改配置文件

    application.yml配置

    第三步:测试类测试操作redis数据库。

    如图:我们可以通过浏览器测试一下能否存储查询和删除值。

    代码 测试SpringBoot集成redis

    8 redis 的持久化机制

            redis对数据的操作都是基于内存的,当遇到了进程退出、服务器宕机等意外情况,如果没有持久化机制,那么Redis中的数据将会丢失无法恢复。有了持久化机制,Redis在下次重启时可以利用之前持久化的文件进行数据恢复。

    redis有RDB和AOF两种持久化机制:目前生产环境为了达到数据的安全性一般都两者都用,混合持久化。

    8.1 RDB模式

    原理:在指定时间间隔内,把当前数据生成dump.rdb的文件二进制中快照保存在磁盘上。恢复时直接将文件直接读取到内存中来恢复数据。redis会单独fork一个子进程来进行持久化,会先将数据写入一个临时文件中,等持久化好了以后再用这个临时文件替换上次持久化好的文件,在这个过程中只有子进程来进行IO操作,主进程任然处理客户端请求,所以保证了极高的性能,但是要预留出足够的磁盘空间。

    操作:我们可以在redis的配置文件进行配置来实现RDB持久化配置。

    RDB 持久化配置

    每900秒至少有一个key改变,触发一次数据快照。

    每300秒至少有10个key改变,触发一次数据快照。

    每60有10000个key改变,触发数据快照。

    优点:

    1.如果要进行大规模数据的恢复,RDB方式要比AOF方式恢复速度要快。

    2.RDB可以最大化Redis性能,父进程做的就是fork子进程,然后继续接受客户端请求,让子进程负责持久化操作,父进程无需进行IO操作。

    3.RDB是一个非常紧凑(compact)的文件,它保存了某个时间点的数据集,非常适合用作备份,同时也非常适合用作灾难性恢复,它只有一个文件,内容紧凑,通过备份原文件到本机外的其他主机上,一旦本机发生宕机,就能将备份文件复制到redis安装目录下,通过启用服务就能完成数据的恢复。

    缺点:

    1.RDB这种持久化方式不太适应对数据完整性要求严格的情况,因为,尽管我们可以用过修改快照实现持久化的频率,但是要持久化的数据是一段时间内的整个数据集的状态,如果在还没有触发快照时,本机就宕机了,那么对数据库所做的写操作就随之而消失了并没有持久化本地dump.rdb文件中。

    2.每次进行RDB时,父进程都会fork一个子进程,由子进程来进行实际的持久化操作,如果数据集庞大,那么fork出子进程的这个过程将是非常耗时的,就会出现服务器暂停客户端请求,将内存中的数据复制一份给子进程,让子进程进行持久化操作。

    8.2 AOF模式

    原理:以日志的形式记录Redis每一个写操作,将Redis执行过的所有写指令记录下来(读操作不记录),只许追加文件不可以改写文件,redis启动之后会读取appendonly.aof文件来实现重新恢复数据,完成恢复数据的工作。默认是不开启的。

    操作:需要将redis.conf中的appendonly  no改为yes启动Redis。

    AOF 配置

    appendfsync always:每修改同步,每一次发生数据变更都会持久化到磁盘上,性能较差,但数据完整性较好。

    appendfsync everysec: 每秒同步,每秒内记录操作,异步操作,如果一秒内宕机,有数据丢失。默认是这个。

    appendfsync no:不同步。

    优点:

    1.可以保持更高的数据完整性,如果设置的是1s,那么最多丢失这1s的数据。

    2.redis可以在AOF文件体积变得过大的时候自动对AOF进行重写。

    缺点:同样大小的数据AOF日志文件比RDB文件庞大并且AOF速度比较慢。

    9 redis主从复制(读写分离)

            主从复制,是指将一台redis服务器的数据,复制到其他的redis服务器。前者称为主节点(master),后者称为从节点(slave)。数据的复制是单向的,只能由主节点到从节点。默认情况下,每台Redis服务器都是主节点;且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能有一个主节点。

            由于redis的高性能,在应用中对其依赖很高,有时候一台redis服务器性能不够,需要配置redis集群。最简单的就是一台用来读,一台用来写。一般对读的需求比较大,所以可以配置一主(写)多从(读)。

    主从复制

    9.1 redis主从复制的配置

    在配置redis主从复制的时候,主节点不需要修改。只需要更改从节点的redis.conf文件。

    从节点配置:搜索到配置文件的REPLICATION模块如图配置 replicaof。

    如果主节点有密码的话:往下加上 masterauth   abc123 将主节点的密码的配置也加上。

    从节点配置

    然后重启redis 后可以通过 info replication 来查看 主从节点的状态。

    主节点上查看 从节点上查看

    10 redis哨兵模式

            之前我们搭建了redis一主多从模式,若是redis master主节点挂了的话,那该怎么办呢。所以我们的哨兵模式就是解决master挂了的问题的。

            所谓哨兵模式就是:我们有哨兵来监控redis的主机情况,若是它挂了,我们就启用一个从机把它作为主节点,并且相应的配置文件也要更改掉。但是一个哨兵是不够的,万一哨兵也挂了,所以我们需要哨兵的集群。

    哨兵模式

    10.1 搭建哨兵模式

    进入redis 解压缩的文件夹有个sentinel.conf 哨兵的配置文件夹。

    把它拷贝: cp sentinel.conf /usr/local/redis 。

    拷贝 配置哨兵文件

    运行 redis-sentinel sentinel.conf

    启动哨兵 启动成功

    测试:我们手动将 101 主机redis 停掉 过一段时间查看从机信息发现 102 被选举成为master主节点了。

    从机上看 102 成为了主节点

    如果:master恢复以后,它会原恢复成master吗? 答案是否定的。它会变成一个从机。

    主机重新启动变从机

    10.2 springboot 集成哨兵模式

    springboot集成redis哨兵

    11 redis缓存穿透、雪崩 解决方案

    缓存穿透:就是外界频繁的去请求一个不存在的数据,缓存里面没有,那么就会直接击穿去查询数据库。

    解决方案:就是查出来即使是为空的我们也将其保存到缓存中去,给他设定一个过期时间。这样就会防止某一时刻大量的请求去穿透请求到数据库里面。:

    缓存雪崩:在某一时刻,key值大量的过期导致缓存失效,在这个时刻大批量的数据请求来请求进来导致数据库压力过大。

    解决方案:1.缓存不设置过期时间。2.缓存过期时间错峰。3.多级缓存。

    相关文章

      网友评论

          本文标题:分布式缓存中间件redis应用

          本文链接:https://www.haomeiwen.com/subject/rcuhyltx.html