美文网首页
Redis再整理

Redis再整理

作者: isuntong | 来源:发表于2020-02-10 19:56 被阅读0次

什么是 Redis

Redis 是用 C 语言开发的一个开源的高性能键值对(key-value)数据库。它通过提供多种键值数据类型来适应不同场景下的存储需求,目前为止 Redis 支持的键值数据类型如下:

  • 字符串类型
  • 散列类型
  • 列表类型
  • 集合类型
  • 有序集合类型

Redis 的应用场景

  • 缓存(数据查询、短连接、新闻内容、商品内容等等)
  • 分布式集群架构中的 session 分离
  • 聊天室的在线好友列表
  • 任务队列(秒杀、抢购、12306 等等)
  • 应用排行榜
  • 网站访问统计
  • 数据过期处理(可以精确到毫秒)

Redis实现自增数字,用年月日时分秒加Redis实现的自增数字实现唯一ID,保证在分布式条件下不会重复,如果用代码块生成的话多个服务器可能会生成相同的id

Redis HA方案(高可用)

概述

HA(High Available,高可用性群集)机集群系统简称,是保证业务连续性的有效解决方案,一般有两个或两个以上的节点,且分为活动节点及备用节点。通常把正在执 行业务的称为活动节点,而作为活动节点的一个备份的则称为备用节点。当活动节点出现问题,导致正在运行的业务(任务)不能正常运行时,备用节点此时就会侦测到,并立即接续活动节点来执行业务。从而实现业务的不中断或短暂中断。

Redis 一般以主/从方式部署(这里讨论的应用从实例主要用于备份,主实例提供读写)该方式要实现 HA 主要有如下几种方案:

  • keepalived: 通过 keepalived 的虚拟 IP,提供主从的统一访问,在主出现问题时, 通过 keepalived 运行脚本将从提升为主,待主恢复后先同步后自动变为主,该方案的好处是主从切换后,应用程序不需要知道(因为访问的虚拟 IP 不变),坏处是引入 keepalived 增加部署复杂性,在有些情况下会导致数据丢失
  • zookeeper: 通过 zookeeper 来监控主从实例, 维护最新有效的 IP, 应用通过 zookeeper 取得 IP,对 Redis 进行访问,该方案需要编写大量的监控代码
  • sentinel: 通过 Sentinel 监控主从实例,自动进行故障恢复,该方案有个缺陷:因为主从实例地址( IP & PORT )是不同的,当故障发生进行主从切换后,应用程序无法知道新地址,故在 Jedis2.2.2 中新增了对 Sentinel 的支持,应用通过 redis.clients.jedis.JedisSentinelPool.getResource() 取得的 Jedis 实例会及时更新到新的主实例地址

注意: sentinel 是解决 HA 问题的,cluster 是解决主从复制问题的,不重复,并且经常一起用

我们可以用Eureka、Nginx做高可用,Redis也有高可用方案,sentinel专门位Redis做高可用(哨兵模式)

Jedis是Redis的java实现客户端,其API提供了比较全面的Redis命令的支持;Redisson实现了分布式和可扩展的Java数据结构,和Jedis相比,功能较为简单,不支持字符串操作,不支持排序、事务‘管道、分区等Redis特性。Redisson的宗旨是促进使用者对Redis的关注分离,从而让使用者能够将精力更集中地放在处理业务逻辑上。

Spring中实用Lettuce作为客户端

https://www.cnblogs.com/throwable/p/11601538.html

三者对比

https://www.cnblogs.com/liyan492/p/9858548.html

Redis Sentinel 集群部署

Redis 集群可以在一组 redis 节点之间实现高可用性和 sharding。在集群中会有 1 个 master 和多个 slave 节点。当 master 节点失效时,应选举出一个 slave 节点作为新的 master。然而 Redis 本身(包括它的很多客户端)没有实现自动故障发现并进行主备切换的能力,需要外部的监控方案来实现自动故障恢复。

Redis Sentinel 是官方推荐的高可用性解决方案。它是 Redis 集群的监控管理工具,可以提供节点监控、通知、自动故障恢复和客户端配置发现服务。

Sentinel自身注册,同Eureka一样自己注册自己,实现高可用,

Redis Sentinel 核心配置

搭建 Redis 集群

新建一个虚拟机

启动起来

修改ip地址为静态

参考之前文章

偶然发现之前随机分配是采用DHCP协议(动态主机配置协议),即插即用,为新来的主机分配ip。

设置为192.168.79.140;

进入usr/local/docker/redis目录下,创建vi docker-compose.yml

搭建一主两从环境,docker-compose.yml 配置如下:

version: '3.1'
services:
  master:
    image: redis
    container_name: redis-master
    ports:
      - 6379:6379

  slave1:
    image: redis
    container_name: redis-slave-1
    ports:
      - 6380:6379
    command: redis-server --slaveof redis-master 6379

  slave2:
    image: redis
    container_name: redis-slave-2
    ports:
      - 6381:6379
    command: redis-server --slaveof redis-master 6379

我发现不能先固定为静态ip,不然docker-compose up 启动报错

测试连接成功

搭建 Sentinel 集群

创建sentinel目录

我们至少需要创建三个 Sentinel 服务,docker-compose.yml 配置如下:

version: '3.1'
services:
  sentinel1:
    image: redis
    container_name: redis-sentinel-1
    ports:
      - 26379:26379
    command: redis-sentinel /usr/local/etc/redis/sentinel.conf
    volumes:
      - ./sentinel1.conf:/usr/local/etc/redis/sentinel.conf

  sentinel2:
    image: redis
    container_name: redis-sentinel-2
    ports:
      - 26380:26379
    command: redis-sentinel /usr/local/etc/redis/sentinel.conf
    volumes:
      - ./sentinel2.conf:/usr/local/etc/redis/sentinel.conf

  sentinel3:
    image: redis
    container_name: redis-sentinel-3
    ports:
      - 26381:26379
    command: redis-sentinel /usr/local/etc/redis/sentinel.conf
    volumes:
      - ./sentinel3.conf:/usr/local/etc/redis/sentinel.conf

修改 Sentinel 配置文件

需要三份 sentinel.conf 配置文件,分别为 sentinel1.conf,sentinel2.conf,sentinel3.conf,配置文件内容相同

port 26379
dir /tmp
# 自定义集群名,其中 127.0.0.1 为 redis-master 的 ip,6379 为 redis-master 的端口,2 为最小投票数(因为有 3 台 Sentinel 所以可以设置成 2)
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000
sentinel deny-scripts-reconfig yes

查看集群是否生效

进入 Sentinel 容器,使用 Sentinel API 查看监控情况:

docker exec -it redis-sentinel-1 /bin/bash
redis-cli -p 26379
sentinel master mymaster
sentinel slaves mymaster

此时不用连接单机redis了,连sentinel,

添加键值

docker exec -it redis-master redis-cli

刷新之后就看到了suntong nb

但是此时如果关闭master容器,却选举不出来新的master,

相关文章

  • Redis再整理

    什么是 Redis Redis 是用 C 语言开发的一个开源的高性能键值对(key-value)数据库。它通过提供...

  • Redis整理

    Redis简介 Redis是一个速度非常快的非关系数据库(non-relational database),它可以...

  • Redis整理

    DOC 连接操作相关的命令 默认直接连接 远程连接-h 192.168.1.20 -p 6379 ping:测试...

  • redis整理

    redis整理 - redis是啥? redis是一个高性能的key-value数据库(好像很简单的样子) - 那...

  • redis整理

    redis 使用单进程单线程,减少内存拷贝,不存在上下文切换,提高性能。 直接内存操作。 过期策略redis也是惰...

  • redis整理

    一 主从复制 基本原理:https://mp.weixin.qq.com/s?__biz=MzI4NTA1MDEw...

  • Redis整理

    1.什么是 Redis? Redis 是完全开源免费的,遵守BSD协议,是性能极高的nosql数据库,Key-Va...

  • Redis整理

    Redis 简介 Redis 是完全开源免费的,遵守BSD协议[https://www.jianshu.com/p...

  • Redis整理

    1、什么是 Redis?.2、Redis 的数据类型?3、使用 Redis 有哪些好处?4、Redis 相比 Me...

  • Redis整理

    什么是 Redis? Redis 是完全开源免费的,遵守[BSD协议],是性能极高的nosql数据库,并提供多种语...

网友评论

      本文标题:Redis再整理

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