Redis哨兵-3

1.Redis持久化策略

1.1 什么是持久化:

说明:

Redis运行环境在内存中,若是服务器关闭则内存数据讲话丢失;面试

需求: 如何保持内存数据

解决方案:能够按期将内存数据持久化到磁盘中redis

持久化策略规则:

当redis正常运行时,按期的将数据保存到磁盘中,当redis服务器重启时,则根据配置文件中指定的持久化方式,事项数据的回复(读取数据以后回复数据)算法

1.2 RDB模式:

1.2.1 RDB模式 是Redis默认的策略;
1.2.2 RDB模式 可以按期持久化(时间间隔),弊端_可能致使数据的丢失;
1.2.3 RDB模式 记录的是内存数据的快照,持久化效率较高,快照只保留最新记录;
1.2.4 RDB模式命令:数据库

  • save 命令:将内存数据持久化到磁盘中 ----主动式操做

缺点___ 会形成线程的阻塞vim

  • bgsave 命令:将内存数据采用后台运行的方式,持久化到磁盘中
  • 默认的持久化的机制:

a. save 900 1 若是在900秒内执行了1次更新操做,则持久化一次
b. save 300 10 若是在300秒内执行了10次更新操做,则持久化一次
c. save 60 10000 若是在60秒内执行了10000次更新操做,则持久化一数组

1.3 AOF模式:

1.3.1 AOF模式特色:缓存

  • AOF模式默认条件下是关闭的,须要手动开启;
  • AOF模式记录的是用户的操做过程,因此能够实现实时持久化操做;
  • AOF模式因为记录的是实时的操做过程,因此持久化文件较大,须要按期维护;

1.3.2 启动AOF模式:服务器

(redis 重启 redis-cli sutd缩写)
  • 说明: 若是开启AOF模式 则一AOF模式为准
    如何开启:进入 vim redis.conf 修改appendonly no 修改成yes

1.4 关于持久化操做总结:

  • 当内存数据容许少许丢失是,使用RDB模式(快);
  • 当内存数据不容许数据丢失是,采用AOF(按期须要维护);
  • 通常在工做中采用AOF+RDB模式共同做用,保证数据的有效性

2. Redis内存策略

2.1为何须要内存优化

  • 说明:因为redis在内存中保存数据,若是一直存储,则内存必然溢出

因此须要按期维护内存数据的大小并发

  • 维护策略:
    删除旧的不用的数据,保存新的经常使用的数据;

2.2 LRU算法:

  • 说明:
    LRU最近最少使用,是一种经常使用的页面置换算法,选择最近最久未使用的数据予以淘汰;
  • 计算维度
    时间T
  • 注意事项:
    是迄今为止内存中最好用的数据置换算法;

2.3 LFU算法

  • 说明:
    最不常常使用数据置换算法 ,要求在数据置换是置换引用计数最下的数据,由于常常使用的数据应该有一个较大的引用次数;
  • 计算维度:
    使用次数

2.4 随机算法

2.5 TTL算法

  • 说明
    根据存活时间,将立刻要超时的数据提早删除;

2.6 配置内存优化策略

  • valatile-lru 在设定了超时时间的数据,采用lru算法
  • allkeys-lru 在全部的数据中采用lru算法
  • volatile-lfu 在设定了超时时间的诗句中采用lfu算法
  • allkeys-lfu 全部数据采用lfu算法
  • volatile-random 设置超时时间数据的随机算法
  • allkeys-random 全部数据随机
  • volatile-ttl 将设定了超时时间的数据 提早删除
  • noeviction 若是设置了noeviction 则不删除数据 直接保存返回

3. 关于缓存的面试问题

问题出发点:app

因为缓存失效,致使大量用户直接访问后台数据库,
  • 3.1 缓存穿透

说明:
用户频繁访问数据库中不存在的数据是,可能出现缓存穿透的现象,若是该操做是高斌发操做,则肯能直接威胁数据库服务器;

解决方法:
A. 能够采用IP限流的方式,下降用户访问服务器次数;
B. 微服务处理方式:
利于断路器 返回指定的业务数据便可;不执行数据操做保护数据库
C. 微服务处理方式:API网关设计,

  • 3.2 缓存击穿

说明:
因为REdis中某个热点数据超时/删除等操做,致使数据失效,若是用户高并发访问该数据,则可能致使数据可宕机,该操做称之为 缓存击穿

解决方案:
能够采用多级缓存的设计;

  • 3.3 缓存雪崩

说明:
因为redis数据大量失效,致使用户访问命中率过低,=>大量用户直接访问数据库,致使服务器宕机;
解决方案:
能够采用多级缓存的设计;
设定不一样超时时间
禁止直行flushall等敏感操做;

### 4. Redis分片说明

  • 说明:

4.2部署

4.2.1 编制配置文件和修改端口
  • 搭建端口号 6379 6380 6381
  • 进入redis 根目录 cd /usr/local/src/redis

image.png

  • 启动redis-server 6380.conf (redis-cli -p 6380 进入服务器)
4.2.2 redis分片测试

image.png

  • 一致性HASH算法:
    A. 概念:是一种特殊的哈希算法,目的就是解决分布式缓存的问题,在移除和添加服务器的时候,可以尽量小的改变映射关系;
    B. 原理说明:

    1). 常规hash由8位16进制数组成;
    2). uuid由23位16进制数组成

    C. 只负责管理 不负责存储数据

4.2.3 hash特性一 平衡性

实现平衡性的方案: 引入虚拟节点

4.2.4 hash特性二 单调性

特色:在进行数据迁移时尽量小的改变的改变数据

4.2.5 hash特性三 分散性
4.2.6 redis的分散布局

第一步:配置文件
image.png

第二步:编辑配置类
API: ShardedJedis对象
image.png

5. Redis哨兵机制

5.1 分片机制存在的问题
  • 说明:
    实现内存数据的扩容,若是redis其中有一个节点宕机,就会直接影响全部节点的运行;
  • 采用哨兵机制,实现节点的高可用;
5.2 redis主从的部署
  • 关闭redis分片的节点,
  • 复制分片的目录 更名为sentinel
  • 删除多余的持久化文件,保存redis的配置文件
  • 启动三台redis服务器

image.png

实现redis的主从
  • 命令: info replication 查看节点的状态(默认redis都是主机)

image.png

实现redis的主从的挂载
  • 修改redis服务器状态 (主机和从机的修改)

A.slave of (进入80) 6379 为主机~~~~
image.png
B. redis全部节点均可以相同通讯,

5.2 哨兵机制的工做原理
5.3 哨兵机制的配置
相关文章
相关标签/搜索