什么是Redis
Redis(Remote Dictionary Server)是一个开源的内存中数据存储系统,也被称为缓存数据库。它被广泛用于构建高性能、可扩展、实时应用程序。Redis支持多种数据结构,如字符串、哈希、列表、集合、有序集合等,可以用于各种用途,包括缓存、消息队列、会话存储、排行榜、实时统计等。
以下是一些 Redis 的主要特点和用途:
-
内存存储:Redis将数据存储在内存中,这使得它非常快速,适用于需要快速读写的应用程序。同时,Redis也支持将数据持久化到磁盘,以防止数据丢失。
-
多数据结构:Redis支持多种数据结构,如字符串、哈希、列表、集合、有序集合等。这些数据结构使得Redis非常灵活,适用于各种不同的应用场景。
-
持久化:Redis支持将数据保存到磁盘,以便在服务器重启时恢复数据。这提供了数据持久性和可靠性。
-
复制:Redis支持主从复制,可以创建一个或多个从服务器,用于备份和扩展读取操作。
-
分布式:Redis支持分布式集群模式,允许将数据分布在多台服务器上,以提供高可用性和扩展性。
-
事务:Redis支持事务,可以执行一组命令作为原子操作,保证了数据的一致性。
-
发布/订阅:Redis支持发布和订阅模式,允许客户端订阅消息通知,以实现实时消息传递和事件驱动的应用程序。
-
缓存:Redis经常用作缓存层,以加速访问底层数据存储系统,减轻数据库负载。
-
计数器和排行榜:Redis的有序集合数据结构非常适合创建计数器和排行榜等实时统计功能。
Redis是一个多功能、高性能的内存数据库,它在许多不同类型的应用程序中得到了广泛的应用,从缓存到实时数据处理和消息队列等各种用途。它的灵活性和可扩展性使其成为开发人员的有力工具之一。
(一)单个Redis搭建
1.下载Redis安装包
可以先去官网下载有关的安装包,这里链接奉上:Index of /releases/ (redis.io)
这里我是用的是5.0.5的版本,可以使用wget连接下载
wget https://download.redis.io/releases/redis-5.0.5.tar.gz
2.解压Redis安装包并编译安装
将Redis的安装包解压到/usr/local下进行编译安装
tar xzf redis-5.0.5.tar.gz -C /usr/local/
在编译安装前要先安装一下有关的依赖包
yum install -y gcc-c++ ruby rubygems
cd /usr/local/redis-5.0.5/
make && make install
3.配置文件并启动
1.创建一个redis目录,在这个目录创建1个etc目录和一个bin目录分别存放我们redis的核心配置文件和存放主要命令,你可以理解为springboot的主启动类
mkdir -p /usr/local/redis/etc
mkdir -p /usr/local/redis/bin
这里可以看到我已经是创建成功了,接下来就可以直接复制我们需要的文件了
1.移动etc目录所需的文件
mv /usr/local/redis-5.0.5/redis.conf /usr/local/redis/etc/
2.移动bin目录所需的文件
cd /usr/local/redis-5.0.5/src/
mv mkreleasehdr.sh redis-benchmark redis-check-aof redis-check-rdb redis-cli redis-sentinel redis-server redis-trib.rb /usr/local/redis/bin/
这里可以看到我已经是移动成功了,接下来进入/etc下修改redis的核心配置文件,在修改文件前我们习惯性的先做一个备份
cp /usr/local/redis/etc/redis.conf /usr/local/redis/etc/redis.conf.bak
vim /usr/local/redis/etc/redis.conf
1.将 protected-mode 属性改为 no (关闭保护模式,不然会阻止远程访问;同上,正式服务器项目上线可不修改,该条在88行)
2.将 daemonize 属性改为 yes (这样启动时就在后台启动,该条在136行)
3.设置密码(可选,个人建议还是设个密码,该行在507行)
4.允许连接主机(解决只能特定网段连接的限制;正式服务器部署如阿里云,为项目安全严格可以保留注释,自己用的话就取消注释,该行在69行)
注:如果和我一样也是使用5.0.5版本的可以使用我一下的替换命令直接替换,不用到文本中进行一条一条的更改,不同版本的配置文件也是不同的,如果使用其他版本的就只能自行寻找该行进行更改了!!
sed -i '507s/.*/requirepass 123456/' /usr/local/redis/etc/redis.conf
sed -i '69s/.*/bind 0.0.0.0/' /usr/local/redis/etc/redis.conf
sed -i '136s/.*/daemonize yes/' /usr/local/redis/etc/redis.conf
sed -i '88s/.*/protected-mode no/' /usr/local/redis/etc/redis.conf
sed -i '92s/.*/port 6379/' /usr/local/redis/etc/redis.conf
以上配置文件就已经修改完成了,可以去到目录下进行启动了,启动完成后我们可以查看进程
cd /usr/local/redis
./bin/redis-server /usr/local/redis/etc/redis.conf
ps -ef | grep redis
测试ping的结果是PONG后可以使用可视化工具 RedisDesktopManager 连接 redis,进行查看和操作
什么是Redis伪群集
Redis 伪集群是一种 Redis 部署模式,它模拟了 Redis 集群的某些特性,但并没有实际的分布式数据存储。它通常用于开发和测试环境中,以便模拟 Redis 集群的行为,而不需要在生产环境中配置和维护真正的 Redis 集群。
以下是 Redis 伪集群的主要特点:
-
多个 Redis 实例:Redis 伪集群包含多个 Redis 实例,通常在不同的端口上运行。每个实例都可以独立运行,并且有自己的配置文件和数据存储目录。
-
共享配置文件:虽然每个 Redis 实例都有自己的配置文件,但它们通常会共享相同的配置,以模拟集群中的一致性配置。
-
单点故障:Redis 伪集群中的每个实例都是单点,没有主从复制,也没有数据分片。这意味着如果某个实例发生故障,将会影响到整个伪集群。
-
模拟分片和节点:虽然伪集群没有真正的数据分片,但您可以将不同的数据集合存储在不同的实例中,并使用客户端路由来模拟分片。
-
用于测试和开发:Redis 伪集群通常用于测试和开发,以便在不配置真正的 Redis 集群的情况下模拟集群行为。这对于验证应用程序在集群环境中的行为非常有用。
需要注意的是,Redis 伪集群并不是生产环境的解决方案,因为它没有提供真正的高可用性和数据分布。在生产环境中,通常会使用 Redis 集群或其他分布式 Redis 解决方案,以满足高可用性和数据分片的需求。
(二)Redis伪群集搭建
1.复制主节点配置文件,编辑从配置文件,修改集群环境,修改端口
1.创建从节点的存放目录,这里我创建了6个从节点端口分别是从7001-7006
mkdir /usr/local/jiedian
mkdir -p /usr/local/jiedian/{7001..7006}
2.把我们单个Redis下的/etc目录和/bin目录复制到这几个从节点文件夹中,并更改从中的每一个配置文件,相比第一个主节点的配置文件来说,我们,只需要修改其中4行即可
修改第一行在92行,将每个端口都修改为从节点的目录端口号
修改第二行在507行注释掉密码配置
修改第三行在832行改为yes.表示开启集群
修改第四行在840行表示指定的配置文件名称
2.快捷批量配置
1.如果不想那么麻烦也是有捷径可以走的,接下来是我的批量配置的脚本,用for循环解决这些繁琐的事件,注意这个脚本是基于第一步单个Redis而部署的,如果读者是自己定义的路径完成的第一步,那么也许这个脚本帮助不到你
#!/bin/bash
#function:Redis伪群集批量创建脚本
#author:20230913 Mr.xie
base_dir="/usr/local/jiedian"
redis_dir="/usr/local/redis"
# 数组保存节点端口号
ports=(7001 7002 7003 7004 7005 7006)
# 循环遍历每个端口号
for port in "${ports[@]}"
do
# 创建节点文件夹
folder="$base_dir/$port"
mkdir -p "$folder/etc"
mkdir -p "$folder/bin"
# 拷贝配置文件和二进制文件
cp -r "$redis_dir/etc/"* "$folder/etc/"
cp -r "$redis_dir/bin/"* "$folder/bin/"
# 修改端口号
sed "92s/.*/port $port/" -i "$folder/etc/redis.conf"
#开启群集模式
sed '832s/.*/cluster-enabled yes/' -i "$folder/etc/redis.conf"
#修改群集端口
sed "840s/.*/cluster-config-file nodes-$port.conf/" -i "$folder/etc/redis.conf"
# 注释掉第 507 行,密码文件
sed -i '507s/^/#/' "$folder/etc/redis.conf"
# 启动节点
"$folder/bin/redis-server" "$folder/etc/redis.conf"
sleep 1
done
3.群集的搭建和组成
批量创建完成后我们可以使用ps命令来查看我们从节点的进程有没有起来,一下可以看到我的从节点是已经起来了,那么下面我们需要,将其组成起来
ps -ef | grep redis
基于我们使用的是5.0.5的版本可以直接使用以下命令进行群集组成
cd /usr/local/redis/bin/ #进入redis的控制文件存放目录
redis-cli --cluster create 192.168.42.130:7001 192.168.42.130:7002 192.168.42.130:7003 192.168.42.130:7004 192.168.42.130:7005 192.168.42.130:7006 --cluster-replicas 1
已下是这条命令的详细解释:
redis-cli
:这是 Redis 客户端工具的命令行界面,用于与 Redis 服务器进行交互。
--cluster create
:这是redis-cli
命令的子命令,用于创建一个 Redis 集群。
192.168.42.130:7001 192.168.42.130:7002 192.168.42.130:7003 192.168.42.130:7004 192.168.42.130:7005 192.168.42.130:7006
:这是一系列参数,指定了 Redis 集群中的各个节点的地址和端口号。$ip
应该是一个变量,代表了 Redis 节点的 IP 地址或主机名。在这个命令中,假设$ip
变量包含了集群中所有节点的地址,每个节点都监听不同的端口号(7001 到 7006)。
--cluster-replicas 1
:这是一个选项,用于指定每个主节点在 Redis 集群中的从节点数量。在这里,它指定了每个主节点都有一个从节点。这条命令的目的是创建一个包含多个主节点和从节点的 Redis 集群。主节点用于存储数据,而从节点用于备份数据和提供读取操作的负载均衡。Redis 集群提供了高可用性和分布式存储的能力,使得 Redis 在大规模应用中能够更可靠地运行。
到这里伪群集就部署完成了,这几个redis串起来组成一个集群。