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。
-
准备服务器
在开始搭建之前,需要准备三台CentOS 7服务器并安装编译环境。每台服务器需要开放
6379
和6373
端口,以及16379
和16373
端口以便Redis集群进行通信。每台服务器将安装两个Redis服务,分别使用6379
和6373
端口,所以需要开放这两个端口。服务器IP地址和端口信息如下:
192.168.42.101
,端口:6379
,6373
,16379
,16373
192.168.42.102
,端口:6379
,6373
,16379
,16373
192.168.42.103
,端口:6379
,6373
,16379
,16373
-
安装gcc
在每台服务器上执行以下命令安装gcc:
sudo yum install gcc gcc-c++
-
下载Redis源代码
从Redis官网下载最新的Redis源代码。例如,要下载版本5.0.4,可以执行以下命令:
wget http://download.redis.io/releases/redis-5.0.4.tar.gz
-
复制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
-
编译和安装Redis
进入Redis源代码目录:
cd /opt/redis-5.0.4/
执行以下命令进行编译和安装:
make make install
-
配置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