一、Redis部署
1 上传tar.gz到服务器
使用工具将下载的tar包上传到服务器即可。推荐使用moba,拖拉即可实现上传。
2 解压
使用tar命令解压,tar -zxvf命令解压,tar -zcvf命令压缩
[root@zxy_slave1 software]# tar -zxvf redis-4.0.0.tar.gz -C /zxy/apps/
3 下载GCC
因为redis是C语言编写的,它的运行环境需要C环境,因此为方便编译,这里先安装gcc
[root@zxy_slave1 software]# yum -y install gcc-c++
4 编译安装
4.1.创建redis安装目录,程序运行目录bin,文件目录etc
[root@zxy_slave1 redis-4.0.0]# mkdir redis
4.2.进入redis主目录指定目录安装
[root@zxy_slave1 redis-4.0.0]# make PREFIX=/zxy/apps/redis-4.0.0/redis install
4.3.安装成功后,指定redis目录下生成bin目录
[root@zxy_slave1 bin]# pwd /zxy/apps/redis-4.0.0/redis/bin [root@zxy_slave1 bin]# ls redis-benchmark redis-check-aof redis-check-rdb redis-cli redis-sentinel redis-server [root@zxy_slave1 bin]#
4.4.为方便启动redis的时候指定配置文件,在redis目录下创建一个conf文件,存放redis.conf配置文件
[root@zxy_slave1 redis]# mkdir conf [root@zxy_slave1 redis]# cp /zxy/apps/redis-4.0.0/redis.conf ./conf/
4.5.配置环境变量
[root@zxy_slave1 redis]# vim /etc/profile export REDIS_HOME=/zxy/apps/redis-4.0.0/redis export PATH=$PATH:$REDIS_HOME/bin [root@zxy_slave1 redis]# source /etc/profile
5 修改配置
修改redis.conf配置文件实现以下功能
5.1 设置redis后台启动
################################# GENERAL #####################################
# By default Redis does not run as a daemon. Use 'yes' if you need it.
# Note that Redis will write a pid file in /var/run/redis.pid when daemonized.
# daemonize属性改为yes,即为后台运行
# daemonize no
daemonize yes
## 后台运行的时候,可以通过以下命令查看:
[root@zxy_slave1 ~]# ps -ef | grep redis
root 8278 8155 0 11:35 pts/1 00:00:00 grep --color=auto redis
5.2 设置redis远程访问
5.2.1 第一步:解除bind限制
将bind 127.0.0.1使用#注释掉,这里的bind功能是指定只有指定的网段才能远程访问这个redis,注释掉后就接触限制
################################## NETWORK #####################################
# By default, if no "bind" configuration directive is specified, Redis listens
# for connections from all the network interfaces available on the server.
# It is possible to listen to just one or multiple selected interfaces using
# the "bind" configuration directive, followed by one or more IP addresses.
#
# Examples:
#
# bind 192.168.1.100 10.0.0.1
# bind 127.0.0.1 ::1
#
# ~~~ WARNING ~~~ If the computer running Redis is directly exposed to the
# internet, binding to all the interfaces is dangerous and will expose the
# instance to everybody on the internet. So by default we uncomment the
# following bind directive, that will force Redis to listen only into
# the IPv4 lookback interface address (this means Redis will be able to
# accept connections only from clients running into the same computer it
# is running).
#
# IF YOU ARE SURE YOU WANT YOUR INSTANCE TO LISTEN TO ALL THE INTERFACES
# JUST COMMENT THE FOLLOWING LINE.
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# bind 127.0.0.1
5.2.2 第二步:调整保护机制
# Protected mode is a layer of security protection, in order to avoid that
# Redis instances left open on the internet are accessed and exploited.
#
# When protected mode is on and if:
#
# 1) The server is not binding explicitly to a set of addresses using the
# "bind" directive.
# 2) No password is configured.
#
# The server only accepts connections from clients connecting from the
# IPv4 and IPv6 loopback addresses 127.0.0.1 and ::1, and from Unix domain
# sockets.
#
# By default protected mode is enabled. You should disable it only if
# you are sure you want clients from other hosts to connect to Redis
# even if no authentication is configured, nor a specific set of interfaces
# are explicitly listed using the "bind" directive.
# protected-mode yes
protected-mode no
5.3 端口
根据需要调整
# Accept connections on the specified port, default is 6379 (IANA #815344).
# If port 0 is specified Redis will not listen on a TCP socket.
port 6379
5.4 密码
根据需要,注释掉requirepass foobared即不需要密码。若需要可解除注释,将foobared改为自定义的密码
################################## SECURITY ###################################
# Require clients to issue AUTH <PASSWORD> before processing any other
# commands. This might be useful in environments in which you do not trust
# others with access to the host running redis-server.
#
# This should stay commented out for backward compatibility and because most
# people do not need auth (e.g. they run their own servers).
#
# Warning: since Redis is pretty fast an outside user can try up to
# 150k passwords per second against a good box. This means that you should
# use a very strong password otherwise it will be very easy to break.
# requirepass foobared
6 redis启动
## 1.redis安装目录下的bin文件和conf文件
## 指定配置文件启动
[root@zxy_slave1 bin]# redis-server ../conf/redis.conf
17343:C 22 Apr 11:52:55.843 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
17343:C 22 Apr 11:52:55.843 # Redis version=4.0.0, bits=64, commit=00000000, modified=0, pid=17343, just started
17343:C 22 Apr 11:52:55.843 # Configuration loaded
## 2.查看启动成功
[root@zxy_slave1 bin]# ps -ef | grep redis
root 17344 1 0 11:52 ? 00:00:00 redis-server *:6379
root 17416 8155 0 11:53 pts/1 00:00:00 grep --color=auto redis
[root@zxy_slave1 bin]#
## 3.云服务器开启该端口[进入服务器控制平台]
## 虚拟机关闭防火墙[systemctl stop firewalld]
7 客户端连接
客户端使用Redis Desktop Manager连接
我在redis.conf中没有设置密码,所以不需要密码可以直接连接
连接成功页面限制,自此完工
8 开机自启(视需求定)
前提
启动方式很多,如果你没配置环境变量,则可以忽略,并使用绝对路径完成下面的自启配置
## 1.我这里使用配置的环境变量启动,避免过长的路径
[root@zxy_slave1 /]# $REDIS_HOME/bin/redis-server $REDIS_HOME/conf/redis.conf
25002:C 22 Apr 12:07:52.327 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
25002:C 22 Apr 12:07:52.327 # Redis version=4.0.0, bits=64, commit=00000000, modified=0, pid=25002, just started
25002:C 22 Apr 12:07:52.327 # Configuration loaded
## 2.正常启动
[root@zxy_slave1 /]# ps -ef | grep redis
root 25003 1 0 12:07 ? 00:00:00 /zxy/apps/redis-4.0.0/redis/bin/redis-server *:6379
root 25172 8155 0 12:08 pts/1 00:00:00 grep --color=auto redis
[root@zxy_slave1 /]#
自启配置
## 在/etc/rc.d/rc.local目录下添加如下即可
[root@zxy_slave1 /]# vim /etc/rc.d/rc.local
$REDIS_HOME/bin/redis-server $REDIS_HOME/conf/redis.conf
二、redis.conf配置文件解读
# Redis configuration file example.
# 启动redis的时候,必须按照这种方法启动服务
# ./redis-server /path/to/redis.conf
################################## INCLUDES ###################################
# 通过一个注册配置文件去Include你自定义的配置文件,引用方法如下
# include /path/to/local.conf
# include /path/to/other.conf
################################## NETWORK #####################################
# 绑定你的redis-server的可访问的IP地址
bind 0.0.0.0
# 开启保护模式,目的是为了其他客户端不能够非法得访问我的redis服务
protected-mode yes
#配置redis-server的端口
port 6379
# TCP listen() backlog.
# 当redis-server面临高并发的时候,他将一部分的连接请求存入backlog的日志中,从而避免高挤压
tcp-backlog 511
# Unix socket.
#配置显示的显示出redis服务的socket的配置文件,如果没有配置,就没有这个文件
# unixsocket /tmp/redis.sock
# unixsocketperm 700
# 服务端和客户端断开连接的最大多的超时时间
timeout 0
# 配置每五分钟汇报一次当前服务端的状态
tcp-keepalive 300
################################# GENERAL #####################################
# 开启后台启动
daemonize yes
# 如果你使用了外部组件(supervised)来控制你的redis的启动,你就要选择这个下面的选项来控制
supervised no
# redis-server的进程文件的生成路径
pidfile /var/run/redis_6379.pid
# 指定你的日志级别:从以下4中模式选择
# debug 最多日志的提示,一般在开发环境下使用
# verbose 在测试环境下可以使用这个模式
# notice 日志提示相对较少,一般只提示一些启动关闭等关键信息,一般在生产环境中使用
# warning 只有非常重要的日志才会被记录
loglevel notice
# 指定redis-server的日志的路径
logfile ""
# 设置你的数据库的数量
databases 16
################################ SNAPSHOTTING ################################
# 将数据库保存在磁盘的策略:RDB
# 以下配置含义:
# 900秒(15分钟)完成了至少一次写操作,就将数据保存在磁盘中
# 300秒(5分钟)完成至少10次此操作
# 1分钟之内至少完成3次此操作
# save ""
save 900 1
save 300 10
save 60 3
# 配置的作用是,当你的后台RDB进行日志持久化的时候,如果持久化快照失败,
# 你的redis的服务将不再允许进行数据保存。因为普通状态下我们的开发者很难
# 观察到日志快照失败,它通过停止写操作来强制使开发注意到日志保存失效的。
# 如果你的日志又可以保存成功的情况下,自动允许写入
stop-writes-on-bgsave-error yes
# 设置使用LZF算法对持久化数据进行压缩,但是压缩会非常消耗CPU性能,但是文件
# 的体积可以得到缩减
rdbcompression yes
# 在压缩完成之后,redis还恶意使用CRC64算法校验你保存文件完整性。
# 但是这个做法会让你多牺牲10%性能
rdbchecksum yes
# 持久化文件名称
dbfilename dump.rdb
# 持久化文件路径
dir /opt/apps/redis-3.2.8/
################################# REPLICATION #################################
# 这个命令使用于连接redis服务中的主节点的命令
# slaveof <masterip> <masterport>
# 使用主机授权
# masterauth <master-password>
# 当你的从机连接主机做主从复制的时候,如果失败。
# 1.yes的策略将会使salve重新向master请求;
# 2.no的策略发送 要给错误信息给主
slave-serve-stale-data yes
# 配置主从复制,读写分离。从机只读
slave-read-only yes
# 同步策略:本地磁盘同步,无盘同步:Socket
# yes:表示使用无盘同步,no表示有磁盘同步
repl-diskless-sync no
# 当开启无盘同步配置的最大延迟时间(s)
repl-diskless-sync-delay 5
# 从服务器以预定的间隔向服务器发送ping,可以使用replping从time选项更改此间隔。默认是间隔秒
# repl-ping-slave-period 10
# The following option sets the replication timeout for:
#
# 1) Bulk transfer I/O during SYNC, from the point of view of slave.
# 2) Master timeout from the point of view of slaves (data, pings).
# 3) Slave timeout from the point of view of masters (REPLCONF ACK pings).
#
# It is important to make sure that this value is greater than the value
# specified for repl-ping-slave-period otherwise a timeout will be detected
# every time there is low traffic between the master and the slave.
# 以下选项是设置超时时间:
# 1>同步期间的大容量传输I/O,从slaves角度看
# 2>主节点超时时间,从slaves(数据,pings)角度看
# 3>从结点超时时间,从主节点角度看
# 需要注意的是,这个时间点的设置应该大于repl-ping-slave-period的设置,
# 否则会每次都被检测到主从结点之间的通信量很低
# repl-timeout 60
# 配置从机延迟带宽。yes的时候,会减少带宽这将增加从机的数据延迟度。
# no的话就会降低从机的数据延迟。但是选择yes的好处是我们将主从复制的带宽减少,
# 这些带宽更多的是用于写操作。所以当你的集群面对海量的数据写入的时候,
# 选择yes是一个good idea
repl-disable-tcp-nodelay no
# 配置的是当你的从机断开了与主机连接,从机一旦断开连接,这个从机重启之后就
# 没有主机的数据了。这个时候从机需要重新同步,但是由于我们之前同步过,如果每次
# 都要从头再来,成本太大了。backlog,我们可以通过这个backlog进行同步恢复,
# 通过它,我只需要同步我宕机之后的那一部分新的数据。
# repl-backlog-size 1mb
# 当主节点在一段时间内不再连接从结点时,将释放挤压。下面的选项设置了从最后一个从连接断开
# 开始释放待定缓冲区所需的秒数。
# 值为0时表示永远不会发布待办事项安排
# repl-backlog-ttl 3600
# slave优先级是由Redis在INFO输出中发布的整数
# 优先级状态表示被选为master的可能性的高低
# 缺省情况下,优先级为100
slave-priority 100
# min-slaves-to-write表示至少有N个从服务器,必须处于online状态。
# min-slaves-max-lag表示以秒为单位的从节点的延迟时间,从从服务器接收到的最后一个ping,通过每秒发送一次
# 例如:需要至少三个slave,并且延迟<=10秒使用
# 将其中一个设置为0,表示禁用该特性
# 默认情况下min-slaves-to-write设置为0(特性禁用),min-slaves-max-lag设置为10
# min-slaves-to-write 3
# min-slaves-max-lag 10
# 从机通常上报的IP地址是通过以下方法获得:
# IP:通过检查从端与主端连接所用的套接字的对端地址来自动检测该地址
# 端口:复制握手期间由从端通信的端口,通常是从端用于列出连接的端口
# 然而,当算口转发或网络地址转换NAT被使用的时候,slave实际可能通过不同的IP和端口对可达。
# 从服务器可以使用以下两个选项向主服务器报告一组特定的IP和端口,这样的INOF和ROLE都将报告这些值
# 如果只需要覆盖端口或IP地址,则不需要同时使用这两个选项
# slave-announce-ip 5.5.5.5
# slave-announce-port 1234
################################## SECURITY ###################################
# 要求客户端在处理任何其他命令之前发出AUTH<PASSWORD>。这在你不信任的环境中可能很有用,
# 其他具有访问运行redis-server的主机的权限
# 为了向后兼容,这应该被注释掉,因为大多数人不需要认证(因为他们一般是运行自己的服务器)
# 警告:因为redis是相当快的,每秒查询15万个密码队,这意味着应该设置一个非常强的密码,
# 否则将会被很容易的破解。
# requirepass foobared
# 命令重命名:
# 在共享环境中可以更改危险命令的名称。例如:CONFIG可以被更改为一些难以置信的东西。
# 即使这样它依旧可以应用于内部,但是不能用于普通的客户端
# 例如:
# rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52
#
# 也可以通过命令重命名为空字符串来完全终止命令:
# rename-command CONFIG ""
#
# 需要注意的是,更改登录到AOF文件或传输到从服务器的命令可能会导致严重的问题
################################### LIMITS ####################################
# 设置同时连接的客户端的最大数量,默认情况下,这个限制被设置为10000个客户端。
# 但是如果Redis服务器不能配置进程文件限制。允许的最大客户数量被设置为当前的文件限制
# 一旦达到限制,Redis将关闭并发送”最大客户端数量达到限制“的错误的新连接
# maxclients 10000
# 不要使用超过指定字节数的内存。当达到内存限制时,Redis将根据所选的回收策略尝试删除键(参见maxmemory-policy)。
# 如果Redis不能根据策略删除键,或者如果策略设置为“noeviction”。Redis将开始对使用更多内存的命令(如SET、LPUSH等)进行错误回复,
# 并继续对只读命令(如GET)进行回复当使用Redis作为LRU缓存时,这个选项通常很有用,或者为一个实例设置硬内存限制(使用'noeviction'策略)警告:
# 如果你有一个附加到一个实例maxmemory上的slave,需要从使用的内存计数中减去输出缓冲区的大小,因此网络问题/ resync将不触发一个循环,
# 其中键被逐出,并依次输出从服务器的缓冲区被键的del所填满,触发删除更多键,
# 以此类推,直到数据库被完全清空总之……如果你有附加的奴隶,建议你为maxmemory设置一个下限,
# 以便在系统上有一些空闲RAM用于从输出缓冲区(但如果策略是'noeviction',这是不需要的)最大记忆<bytes>
# maxmemory <bytes>
# 当内存使用已经达到上限的时候,选择以下机制:
# volatile-lru -> 使用LRU算法删除带有过期集合
# allkeys-lru -> 根据LRU算法删除任意一个密钥
# volatile-random -> 删除一个过期的随机密钥
# allkeys-random -> 移除一个随机的任何的密钥
# volatile-ttl -> 移除一个最近过期的密钥
# noeviction -> 根本不过期,只是在写操作时返回一个错误
# 默认选项:
# maxmemory-policy noeviction
# LRU和最小TTL算法不是精确的算法,而是近似的算法(为了节省内存),因此你可以选择
# 调整他的精度或者速度,对于默认的redis将检查5个键,并选择一个最近很少使用的,你可以改变样本大小使用以下配置指令
#
# 默认的5可以产生足够好的结果,10非常接近真实的LRU,但是花费更多的CPU,3是非常快,但不是非常精确
#
# maxmemory-samples 5
############################## APPEND ONLY MODE ###############################
# AOF的持久化方式是它通过将所有的向redis的写操作记录到日志中的形式来帮助我们进行数据
# 的恢复。我可以每1秒中记录一次,也可以每一次写操作都记录。但是这个模式默认是关闭的
# 所以需要我们手动的开启。在生产环境中我们一般都是RDB和AOF一起配合使用
appendonly yes
# 指定AOF的日志文件的名称
appendfilename "appendonly.aof"
# 配置AOF同步日志的策略
# appendfsync always ## 每一次写操作都记录日志
appendfsync everysec ## 每一秒记录日志
# appendfsync no ## 不记录
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes