Redis 服务器单机的安装
缓存在高性能的企业分布式应用中扮演着至关重要的作用,而 Redis 是缓存中间件中的佼佼者。本文总结了 Redis 服务器的安装(CentOS/Windows环境),Redis 常用命令及其界面工具的使用。
作者:王克锋
出处:https://kefeng.wang/2017/08/10/redis-installation/
版权:自由转载-非商用-非衍生-保持署名,转载请标明作者和出处。
1 概述
1.1 功能
Redis=REmote DIctionary Server,是一个由Salvatore Sanfilippo写的key-value存储系统。
是一个BSD协议开源的、使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
它通常被称为数据结构服务器,因为值(value)可以是字符串(String), 哈希(Map), 列表(List), 集合(Sets) 和 有序集合(Sorted Sets)等类型。
1.2 特点
- 数据保存在内存中,磁盘只是为了持久化;
- 存储的数据类型很丰富(字符串,列表,集合,可排序集合,哈希),这是memcached不具备的;
- 发布与订阅,支持数据复制至从服务器,这是memcached不具备的;
- 操作都是原子的。
2 CentOS 环境下安装
2.1 下载与编译
V4.0.8,发布于 2008-02-02。下载源码,编译。1
2
3
4
5
6## https://redis.io/download
wget http://download.redis.io/releases/redis-4.0.8.tar.gz
sudo tar xzf redis-4.0.8.tar.gz -C /opt
cd /opt/redis-4.0.8
sudo make ## create $REDIS_HOME/src/redis-*
sudo make install ## create linker /usr/local/bin/redis-*
2.2 设置环境变量
1 | ## sudo vim /etc/profile ## 所有用户有效 |
文件保存后,Linux用户重新登录后生效。
2.3 安装成服务
2.3.1 整理安装脚本
此脚本是为了封装程式化操作,以便接下来在单机实验多个 Redis 实例时,对每个实例(端口)重复执行。
所依赖脚本源码在这里:utils/install_server.sh1
2
3
4
5
6
7
8
9## sudo vim $REDIS_HOME/utils/install_server_x.sh
## sudo chmod +x $REDIS_HOME/utils/install_server_x.sh
sudo REDIS_PORT=$1 \
REDIS_CONFIG_FILE=/etc/redis/$1.conf \
REDIS_LOG_FILE=/var/log/redis_$1.log \
REDIS_DATA_DIR=/var/lib/redis/$1 \
REDIS_EXECUTABLE=`command -v redis-server` \
$REDIS_HOME/utils/install_server.sh
将来执行 install_server_x.sh 6379
(参数为服务监听端口号),会完成以下操作:
- 设定监听端口 6379
- 设定配置文件 /etc/redis/6379.conf
- 设定日志文件 /var/log/redis_6379.log
- 设定数据目录 /var/lib/redis/6379
- 设定服务器可执行文件 /usr/local/bin/redis-server
- 设定客户端可执行文件 /usr/local/bin/redis-cli
- 创建服务 redis_6379
- 启动服务 redis_6379
2.3.2 调整系统参数
2.3.2.1 设置客户端连接密码
如果需要设置 Redis 客户端连接的密码,则调整模板文件(假设密码为 passwd):
- 配置文件
$REDIS_HOME/redis.conf
:设置为requirepass passwd
- 服务脚本
$REDIS_HOME/utils/redis_init_script.tpl
:修改为$CLIEXEC -a passwd -p $REDISPORT shutdown
如果服务安装之前忘记了调整模板文件,则要在服务安装后手工调整:
- 配置文件
/etc/redis/{PORT}.conf
- 服务脚本
/etc/init.d/redis_{PORT}
2.3.2.2 上调系统最大连接数
- 警告日志:WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
- 参数含义:Redis 参数 tcp-backlog 表示服务器容许积压的客户端连接数(初始设定为 511),并发量大时要上调该参数值。但受限于 Linux 系统定义的限值(参数
net.core.somaxconn
,默认值为 128)。 - 调整系统上限为 1024 或更高:
1
2
3echo "net.core.somaxconn=1024" | sudo tee -a /etc/sysctl.conf ## 永久有效
sudo sysctl -p ## 立即生效
sudo sysctl net.core.somaxconn ## 查看结果
2.3.2.3 调整分配内存检查方式
- 警告日志:WARNING overcommit_memory is set to 0! Background save may fail under low memory condition.
- 参数含义:表示内核在分配内存时候做检查的方式,0(GUESS 默认值)表示根据是否有足够的可用内存再决定,1(ALWAYS)表示总是允许分配内存,2(NEVER)表示允许分配超过所有物理内存和交换空间总和的内存。
- 调整取值为 1(ALWAYS):
1
2
3echo "vm.overcommit_memory=1" | sudo tee -a /etc/sysctl.conf ## 永久有效
sudo sysctl -p ## 立即生效
sudo sysctl vm.overcommit_memory ## 查看结果
2.3.2.4 关闭系统透明大页功能
- 警告日志:WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis.
- 参数含义:默认值是 always,使用透明大页,可能导致 Redis 延迟和内存使用问题。
- 调整取值为 never:
1
2echo never | sudo tee /sys/kernel/mm/transparent_hugepage/enabled ## 立即生效
echo "echo never > /sys/kernel/mm/transparent_hugepage/enabled" | sudo tee -a /etc/rc.local ## 永久生效
2.3.3 安装成服务
执行命令 $REDIS_HOME/utils/install_server_x.sh 6379
,
自动生成配置文件 /etc/redis/6379.conf
,关键内容如下(可参考我的文章 Redis 服务器配置参数详解):1
2
3
4
5
6port 6379 ## 服务监听端口号
daemonize yes ## 守护进程模式,否则启动时卡死而超时
requirepass passwd ## 客户端连接时的密码
pidfile /var/run/redis_6379.pid ## 必须与 redis.service 一致
logfile /var/log/redis_6379.log ## 必须指定绝对路径
dir /var/lib/redis/6379 ## 数据目录
2.3.4 手动启停服务
服务已设置为开机自动启动。如果参数调整后想立即生效,则要手工启停:1
2
3
4
5sudo service redis_6379 stop ## 停止
sudo service redis_6379 start ## 启动
sudo service redis_6379 restart ## 重启
/etc/init.d/redis_6379 status ## 查看服务运行状态
redis-cli -a passwd info server ## 查看服务信息
2.4 防火墙放行
如果非本机客户端需要连接 Redis,必须把监听端口放行。1
2
3### sudo vim /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 6379 -j ACCEPT
### 重启生效: sudo systemctl restart iptables
除了服务监听端口,服务监听地址,也要根据客户端情况调整:
- 客户端在本机:
bind 127.0.0.1
,只允许本机连接,最安全 - 客户端在局域网:
bind 192.x.x.x
,只允许本机和局域网连接 - 客户端在因特网:
bind 0.0.0.0
,允许所有机器连接,最不安全
2.5 客户端验证
Redis 命令请查阅 Redis 客户端命令参考1
2
3[admin@centos] /home/admin $ redis-cli -a passwd
127.0.0.1:6379> keys *
127.0.0.1:6379> quit
2.6 卸载
如果要重新安装,则需要先卸载。
所谓卸载,就是对安装动作的撤消操作:utils/install_server.sh1
2
3
4
5
6
7
8
9
10
11## 卸载服务,每个实例(端口)的服务都要停止、卸载
# sudo chkconfig --list
sudo service redis_6379 stop
sudo chkconfig --del redis_6379
## 删除文件
sudo rm -rf /etc/redis ## {port}.conf
sudo rm -rf /var/lib/redis ## dump.rdb
sudo rm -rf /var/{run,log}/redis_*.*
sudo rm -rf /usr/local/bin/redis-*
sudo rm -rf $REDIS_HOME
3 Windows 环境下安装
注意:Redis 官方没有 Windows 版本,只能从 MicrosoftArchive 下载。
Windows 版不稳定,而且好久不更新,建议仅用于 Windows 试验环境。
3.1 下载
V3.0.504,发布于 2006-07-01。最新版本
可采用绿色版,解压至 {???}\Redis-x64-3.0.504
3.2 解压并配置
{???}\Redis-x64-3.0.504\redis.windows.conf1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21## 需要修改的参数
daemonize yes # 以后台方式启动(否则服务启动时会超时)
bind 127.0.0.1 # 绑定的主机(默认为0.0.0.0):尽量缩小范围
maxclients 32 # 客户端最大并发数(0为不限)
maxmemory 10485760 # 指定最大内存 10M(达到时清除过期或早期)
requirepass passwd # 设置 client/slave 连接时的密码(AUTH passwd提供)
## 日志级别(debug / verbose / notice[默认] / warning)和文件
loglevel verbose
logfile redis.log
## 无需修改的参数
port 6379 # 监听端口:建议默认不要修改
timeout 0 # 客户端闲置关闭时长(秒), 0表示不超时
loglevel notice # 日志级别, debug, verbose, notice(默认), warning
save [s] [n] # s 秒内有 n 次更新操作,就同步至数据文件
rdbcompression yes # 存储前压缩(省空间但耗时)
## 主从相关参数
slaveof <masterip> <masterport> # 自身作为slave, 指定master的host:port
masterauth <master-password> # 自身作为slave, 指定master的密码
3.3 启动服务端
1 | cd /d {???}\Redis-x64-3.0.504 |
CTRL+C 退出,或者关闭 DOS 窗口
3.4 启动客户端
1 | redis-cli.exe # host:port 可缺省为 localhost:6379 |
3.5 安装为服务
参考资料:Running Redis as a Service
1 | ## 【以“管理员权限”(避免多次询问)打开 cmd.exe 再执行】 |
4 Redis 浏览器 Redis Desktop
以 GUI 方式更方便地查看、操作 Redis 数据。
Download Redis Desktop Manager
redis-desktop-manager-0.9.0.684.exe