Redis5

简介

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

  • 支持数据的持久化
  • 支持list,set,zset,hash等数据结构的存储
  • 支持master-slave模式的数据备份

优势

  • 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
  • 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
  • 原子 – Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。
  • 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。

与其他key-value存储有什么不同

  • Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径
  • Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。
  • Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,应为数据量不能大于硬件内存。
  • 在内存数据库方面的另一个优点是, 相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。
  • 同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。

在CentOS 8.5上安装和配置Redis集群

安装Redis

使用以下命令在CentOS 8.5上安装Redis:

sudo dnf install redis

编译安装Redis集群

在CentOS 7上搭建Redis集群需要三台服务器,并在每台服务器上安装gcc。

  1. 准备服务器

    在开始搭建之前,需要准备三台CentOS 7服务器并安装编译环境。每台服务器需要开放63796373端口,以及1637916373端口以便Redis集群进行通信。每台服务器将安装两个Redis服务,分别使用63796373端口,所以需要开放这两个端口。

    服务器IP地址和端口信息如下:

    • 192.168.42.101,端口:637963731637916373
    • 192.168.42.102,端口:637963731637916373
    • 192.168.42.103,端口:637963731637916373
  2. 安装gcc

    在每台服务器上执行以下命令安装gcc:

    sudo yum install gcc gcc-c++
  3. 下载Redis源代码

    从Redis官网下载最新的Redis源代码。例如,要下载版本5.0.4,可以执行以下命令:

    wget http://download.redis.io/releases/redis-5.0.4.tar.gz
  4. 复制Redis源代码到每台服务器

    将下载的Redis源代码复制到每台服务器上。可以将源代码复制到/opt/目录下,例如:

    scp redis-5.0.4.tar.gz user@192.168.42.101:/opt/
    scp redis-5.0.4.tar.gz user@192.168.42.102:/opt/
    scp redis-5.0.4.tar.gz user@192.168.42.103:/opt/

    然后在每台服务器上解压源代码:

    cd /opt/
    tar -xzvf redis-5.0.4.tar.gz
  5. 编译和安装Redis

    进入Redis源代码目录:

    cd /opt/redis-5.0.4/

    执行以下命令进行编译和安装:

    make
    make install
  6. 配置Redis集群

    在每台服务器上修改Redis配置文件/opt/redis-5.0.4/redis.conf,配置文件中需要修改的参数如下:

    port 6379				# 端口号,这里是6379和6373
    bind 127.0.0.1			# 默认IP地址为127.0.0.1,需要改为其他节点机器可访问的IP地址
    daemonize yes

docker-compose 安装集群(伪)

  • docker-compose.yml文件配置了六个redis节点

  • 底部注释的redis-cli命令开启了3个主节点3个从节点

    version: "3.9"
    networks:
        redis-net:
            driver: bridge
            ipam:
                driver: default
                config:
                    -   subnet: 172.1.0.0/24
                        gateway: 172.1.0.254
    services:
        r1:
            image: redis:5.0-alpine
            restart: always
            volumes:
                - ./conf/redis.conf:/etc/redis/redis.conf
                - ./data/r1/:/data/
            command: [ "redis-server", "/etc/redis/redis.conf" ]
            networks:
                redis-net:
                    ipv4_address: 172.1.0.1
        r2:
            image: redis:5.0-alpine
            restart: always
            volumes:
                - ./conf/redis.conf:/etc/redis/redis.conf
                - ./data/r2/:/data/
            command: [ "redis-server", "/etc/redis/redis.conf" ]
            networks:
                redis-net:
                    ipv4_address: 172.1.0.2
        r3:
            image: redis:5.0-alpine
            restart: always
            volumes:
                - ./conf/redis.conf:/etc/redis/redis.conf
                - ./data/r3/:/data/
            command: [ "redis-server", "/etc/redis/redis.conf" ]
            networks:
                redis-net:
                    ipv4_address: 172.1.0.3
        r4:
            image: redis:5.0-alpine
            restart: always
            volumes:
                - ./conf/redis.conf:/etc/redis/redis.conf
                - ./data/r4/:/data/
            command: [ "redis-server", "/etc/redis/redis.conf" ]
            networks:
                redis-net:
                    ipv4_address: 172.1.0.4
        r5:
            image: redis:5.0-alpine
            restart: always
            volumes:
                - ./conf/redis.conf:/etc/redis/redis.conf
                - ./data/r5/:/data/
            command: [ "redis-server", "/etc/redis/redis.conf" ]
            networks:
                redis-net:
                    ipv4_address: 172.1.0.5
        r6:
            image: redis:5.0-alpine
            restart: always
            volumes:
                - ./conf/redis.conf:/etc/redis/redis.conf
                - ./data/r6/:/data/
            command: [ "redis-server", "/etc/redis/redis.conf" ]
            networks:
                redis-net:
                    ipv4_address: 172.1.0.6
    
    # 首次执行后 再次启动集群 无需执行下面的命令
    # redis-cli --cluster create 172.1.0.1:6379 172.1.0.2:6379 172.1.0.3:6379 172.1.0.4:6379 172.1.0.5:6379 172.1.0.6:6379 --cluster-replicas 1
    # 测试 redis
    # r1:redis-cli -c
    # > set test 1998
    # r6:redis-cli -c
    # > get test

    redis集群配置

    # 端口6379
    port  6379
    # 默认ip为127.0.0.1 需要改为其他节点机器可访问的ip
    bind 0.0.0.0
    # redis后台运行
    # daemonize yes
    # pidfile文件
    pidfile  /var/run/redis.pid
    # 开启集群  把注释#去掉
    cluster-enabled  yes
    # 集群的配置  配置文件首次启动自动生成
    cluster-config-file  nodes.conf
    # 请求超时  默认15秒,可自行设置
    cluster-node-timeout  15000
    # aof日志开启  有需要就开启,它会每次写操作都记录一条日志
    # appendonly  yes

参考资料