redis的使用-4

redis的使用-4

一个实例能存2.5亿个key

1、持久化

  1. RDB:RDB持久化是指在指定的时间间隔内将内存中的数据集快照写入磁盘。也是 默认 的持久化方式,这种方式是就是将内存中数据以快照的方式写入到二进制文件中,默认的文件名为dump.rdb。

    **三种触发机制:**save触发、bgsave触发、自动触发

    **save:**该命令会阻塞当前Redis服务器,执行save命令期间,Redis不能处理其他命令,直到RDB过程完成为止。执行完成时候如果存在老的RDB文件,就把新的替代掉旧的。我们的客户端可能都是几万或者是几十万,这种方式显然不可取。

    **bgsave:**执行该命令时,Redis会在后台异步进行快照操作,快照同时还可以响应客户端请求。具体操作是Redis进程执行fork操作创建子进程,RDB持久化过程由子进程负责,完成后自动结束。阻塞只发生在fork阶段,一般时间很短。基本上 Redis 内部所有的RDB操作都是采用 bgsave 命令。

    **自动触发:**redis.conf配置文件配置如下

    save 						#
    stop-writes-on-bgsave-error #
    rdbcompression				#
    rdbchecksum 				#
    dbfilename 					#
    dir							#
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-d7kWMTSO-1615212110847)(https://pics5.baidu.com/feed/1c950a7b02087bf43b4490d50ac25f2a11dfcf7e.jpeg?token=22f387ba78130c6115420059481b2393&s=EF48A15796784D8816E1D9EB03007024)]

    • RDB优缺点

      优点:1、在不影响主进程的情况下,会独立创建fork子进程异步去生成文件快照,并替换之前的快照文件

      ​ 2、数据较大时redis启动时性能相对较优

      缺点:1、当对数据要求很高的时侯不宜使用RDB,因为RDB机制问题只存储给定时间内的数据,会导致数据的遗失

      ​ 2、如果当数据集较大时,可能会导致整个服务器停止服务几百毫秒,甚至是1秒钟。

    • AOF优缺点

      优点:1、写入操作采用的是append模式,出现宕机也不会破坏日志文件里的内容

      ​ 2、当数据不是太大的时候,可以保证数据的完整性

      缺点:1、当数据太大时,重启的时候性能太低

  2. AOF:AOF持久化以日志的形式记录服务器所处理的每一个写、删除操作,查询操作不会记录,以文本的方式记录,可以打开文件看到详细的操作记录。

    通过在配置文件中设置appendonly yes开启AOF此时RDB持久化则不再生效,设置为appendonly no 则RDB持久生效。

    appendfsync always     	#每次有数据修改发生时都会写入AOF文件。
    appendfsync everysec  	#每秒钟同步一次,该策略为AOF的缺省策略。
    appendfsync no          #从不同步。高效但是数据不会被持久化。
    

    RDB原理图

    AOF原理图

2、集群的搭建

docker版
# 主从
# 哨兵模式
# 搜索镜像
docker search redis
# 拉取镜像
docker pull redis:latest
# 启动
docker run --name redis1 -d -p 6381:6379 -v /mydata/redis1:/data redis:latest
docker run --name redis2 -d -p 6382:6379 -v /mydata/redis2:/data redis:latest
docker run --name redis3 -d -p 6383:6379 -v /mydata/redis3:/data redis:latest

# 进入redis
docker exec -it redis1 redis-cli
docker exec -it redis2 redis-cli
docker exec -it redis3 redis-cli
# 设置主从

redis2 :SLAVEOF 118.111.22.216 6381
redis3 :SLAVEOF 118.111.22.216 6381
# 查看角色
role
1) "master"
2) (integer) 112
3) 1) 1) "118.111.22.216"
      2) "6379"
      3) "112"
   2) 1) "118.111.22.216"
      2) "6379"
      3) "112
# 修改每个sentinel.config文件
sentinel monitor mymaster 主节点ip 主节点端口 2
# 启动哨兵模式,进入每个redis
redis-sentinel sentinel.conf
# 当主redis突然宕机时,哨兵会自动重新选取一个主redis,当之前的redis重连后只能为从redis了

3、缓存穿透与雪崩

  1. 缓存穿透(击穿):在向redis获取某一个key值时,然而redis中不存在该key,此时就要向数据库发起请求,即“缓存穿透”

    产生原因:

    • 第一次访问
    • 恶意访问不存在的key
    • Key过期

    如何解决与避免:

    • 服务器启动时, 提前写入该key
    • 规范key的命名, 通过中间件拦截
    • 对某些高频访问的Key,设置合理的TTL或永不过期
  2. 雪崩:缓存层因不知原因宕机,此时所有的请求就会直接请求到存储层,这时存储层可能因大量的并发导致瘫痪,即“雪崩”

    如何结局与避免:

    • 使用Redis集群
    • 限流
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值