一、Linux环境部署Redis
1、卸载
# 查看 Redis 是否还在运行
[appuser@localhost redis]$ ps -ef|grep redis
appuser 135694 125912 0 14:24 pts/1 00:00:00 ./bin/redis-server *:6379
appuser 135731 125912 0 14:24 pts/1 00:00:00 grep --color=auto redis
# 停止 Redis
[appuser@localhost redis]$ redis-cli SHUTDOWN
# 删除 Redis 安装的相关文件
[root@localhost ~]# find / -name redis
[root@localhost ~]# rm -rf /xxx/xxx/xxx
2、安装
# 依赖安装
[appuser@localhost ~]$yum -y install gcc gcc-c++ libstdc++-devel
# redis下载:https://redis.io/download
[appuser@localhost ~]$ tar -zxvf redis-6.2.3.tar.gz -C /app
# 编译
[appuser@localhost ~]$cd /app/redis-6.2.3
[appuser@localhost redis-6.2.3]$ make
# 编译可能报错:
zmalloc.h:50:31: error: jemalloc/jemalloc.h: No such file or directory
zmalloc.h:55:2: error: #error "Newer version of jemalloc required"
make[1]: *** [adlist.o] Error 1
make[1]: Leaving directory `/data0/src/redis-2.6.2/src'
make: *** [all] Error 2
# 报错原因:分配器 allocator会使用 jemalloc,而不是 libc,因为相比于libc,jemalloc 有更少的 fragmentation problems。但是如果目前环境没有jemalloc,只有 libc,所以 make 出错
# 解决方法:使用环境变量 MALLOC 来建立Redis
[appuser@localhost redis-6.2.3]$ make MALLOC=libc
# 安装
[appuser@localhost redis-6.2.3]$ make PREFIX=/app/redis install
Reids 的默认安装路径在/usr/local/bin
,关键字 PREFIX 作用是编译的时候用于指定程序存放的路径。如果不添加该关键字,Linux会将可执行文件存放在/usr/local/bin
目录,库文件会存放在/usr/local/lib
目录。配置文件会存放在/usr/local/etc
目录。其他的资源文件会存放在usr/local/share
目录。这里指定好目录也方便后续的卸载,后续直接rm -rf /app/redis
即可删除Redis
3、配置
4、启动Redis 服务器
Redis启动方式有两种:直接启动、通过初始化脚本启动,分别适用于开发环境和生产环境
- 直接启动
# 拷贝一份配置文件
[appuser@localhost ~]$ cd /app/redis/bin
[appuser@localhost bin]$ ./redis-server ../redis.conf
配置文件redis.conf中设置daemonize=yes
,则Redis将采取后台进程方式启动
- 通过初始化脚本启动
在Linux中可以通过初始化脚本启动Redis,使得Reds能随系统自动运行,在生产环境中推荐使用该方式运行Redis。具体步骤如下:
① 配置初始化脚本:在redis-6.2.3/utils
文件夹下有一个初始化脚本文件redis_init_script
,将该脚本复制到ect/init.d目录中,文件重命名为redis_端口号,并将脚本中REDISPORT变量值改为同样的端口号。
② 创建文件夹:/etc/redis
(存储redis的配置文件)、/var/redis/端口号
(存放redis持久化文件)
③ 修改配置文件:将配置文件模板复制到/etc/redis
目录中,重命名为端口号.conf
,并修改一下参数:
# 使Redis以守护进程模式进行
daemonize=yes
# 设置Redis的PID文件位置
pidfile=/var/run/redis_端口号.pid
# 设置Redis监听的端口号
port=端口号
# 设置持久化文件存放位置
dir=/var/redis/端口号
现在就可以使用/etc/init.d/redis_端口号 start
来启动Redis了,而后需要执行下面的命令使Redis随系统自动启动:
[root@localhost ~]# sudo update_rc.d redis_端口号 default
5、停止 Redis
Redis 有可能正在将内存中的数据同步到硬盘中,强行终止Redis进程可能会丢失数据,正确方式是向Redis发送 SHUTDOWN命令
[appuser@localhost bin]$ ./redis-cli SHUTDOWN
当 Redis收到 SHUTDOWN命令后会先断开所有客户端链接,然后根据配置执行持久化,最后退出。
Redis 可以妥善处理SIGTERM信号,所以使用kill Redis进程的PID 也可以正常结束 Redis,效果同 SHUTDOWN命令。
6、客户端
通过 redis-cli 向 Redis 发送命令有两种方式:
- 将命令作为redis-cli的参数执行
[appuser@localhost bin]$ ./redis-cli -h 127.0.0.1 -p 6379 PING
- 交互模式
# 不携带参数进入交互模式
[appuser@localhost bin]$ ./redis-cli
127.0.0.1:6379> auth 123456@rds
127.0.0.1:6379> PING
二、Windows 环境部署 Redis
1、部署
(1)下载
目前 Redis官网 没有提供Windows版本的安装程序,如果需要安装,需要到Github上下载适合Windows的版本。
具体下载地址为:
(2)解压
将下载的压缩包解压到任意一个目录
(3)创建日志文件
在 Redis
解压后的根目录,新建 Logs
目录,然后在该目录下新建 redis_log.txt
文件。
否则,在进行下面操作的时候会报 Redis service failed to start.
错误。
2、启动
命令行进入刚才解压文件的根目录下,执行命令:
Z:\Program Files\Redis-x64-3.0.504> redis-server.exe redis.windows.conf
这种方式一旦关闭命令行,Redis
服务就关闭了,所以需要将 Redis
安装成系统(Windows)服务。
3、Windows 服务
命令行进入redis 根目录下,执行命令:
Z:\Program Files\Redis-x64-3.0.504> redis-server.exe --service-install redis.windows-service.conf --loglevel verbose --service-name Redis
执行成功后,可以在 Windows 的系统服务(命令行输入 services.msc
)中找到该服务(服务名称为 redis),对应的配置文件是 redis.windows-service.conf
,对应上面注册服务时使用的配置文件,所以后续的自定义配置就需要修改这个文件。
4、Redis 命令
# 安装服务
./redis-server.exe --service-install
# 卸载服务
./redis-server.exe --service-uninstall
# 开启服务
./redis-server.exe --service-start
# 停止服务
./redis-server.exe --service-stop
# 开启 CLI 模式
./redis-cli.exe -h 127.0.0.1 -p 6379
三、Docker 部署 Redis 集群
1、单机伪集群
# 1、创建自定义网络
docker network create redis --subnet 172.38.0.0/16
# 2、创建六个Redis配置文件
for port in $(seq 1 6); \
do \
mkdir -p /app/redis/node-${port}/conf
touch /app/redis/node-${port}/conf/redis.conf
cat << EOF >/app/redis/node-${port}/conf/redis.conf
port 6379
bind 0.0.0.0
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 172.38.0.1${port}
cluster-announce-port 6379
cluster-announce-bus-port 16379
appendonly yes
EOF
done
# 3、启动Redis容器
for port in $(seq 1 6); \
do \
docker run -p 637${port}:6379 -p 1637${port}:16379 --name redis-${port} \
-v /app/redis/node-${port}/data:/data \
-v /app/redis/node-${port}/conf/redis.conf:/etc/redis/redis.conf \
-d --net redis --ip 172.38.0.1${port} redis redis-server /etc/redis/redis.conf
done
# 4、创建集群
docker exec -it redis-1 /bin/sh
redis-cli --cluster create --cluster-replicas 1 172.38.0.11:6379 172.38.0.12:6379 172.38.0.13:6379 172.38.0.14:6379 172.38.0.15:6379 172.38.0.16:6379