官网:https://redis.io/downloadnode
redis-4.0.14.tar.gzredis
# tar zxf redis-4.0.14.tar.gz算法
# mkdir /usr/local/redis/etc -p数据库
# make PREFIX=/usr/local/redis install缓存
# cp -ap redis-4.0.14/redis.conf /usr/local/redis/etc/安全
# cat /etc/profile | grep redis服务器
export PATH=$PATH:/usr/local/redis/binapp
# /usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf异步
因为redis参数没有调整,直接启动redis进程不会后台启动,须要作参数调整。socket
#是否做为守护进程运行'yes'或者'no','yes'表示启动redis服务后台运行,反之。
daemonize yes
#监听IP,redis通常监听127.0.0.1 网段访问,集群模式须要指定IP地址。
bind 0.0.0.0 #监听全部的IP端口,不论本机有几块网卡。
bind 127.0.0.1 #只监听127.0.0.1本地端口。
#本机含有三块网卡,只监听192.xxx和10.xxx,若是第三块网卡IP是172.xxx,即便ping的通,也没法链接到redis。
bind 192.168.1.100 10.0.0.1
#会报错,redis服务没法启动。
bind #随便给个不存在的IP
#会报错,只能写具体存在的IP地址
bind 172.17.80.* 172.17.80.%
报错log以下:
10202:M 19 Jun 10:50:25.261 # Creating Server TCP listening socket 172.17.80.%:6379: Name or service not known
10276:C 19 Jun 10:51:08.707 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
10276:C 19 Jun 10:51:08.707 # Redis version=4.0.14, bits=64, commit=00000000, modified=0, pid=10276, just started
10276:C 19 Jun 10:51:08.707 # Configuration loaded
10277:M 19 Jun 10:51:08.794 # Creating Server TCP listening socket 172.17.80.*:6379: Name or service not known
#监听redis服务的端口
port 6379
#指定存储Redis进程号的文件路径。
pidfile /var/run/redis-6379.pid
#客户端和Redis服务端的链接超时时间,默认是0,表示永不超时。
timeout 0
#TCP链接保活策略,能够经过tcp-keepalive配置项来进行设置,单位为秒,假如设置为60秒,则server端会每60秒向链接空闲的客户端发起一次ACK请求,以检查客户端是否已经挂掉,对于无响应的客户端则会关闭其链接。因此关闭一个链接最长须要120秒的时间。若是设置为0,则不会进行保活检测。
tcp-keepalive 0
#redis支持经过loglevel配置项设置日志等级,共分四级,即debug、verbose、notice、warning。
loglevel notice
#redis也支持经过logfile配置项来设置日志文件的生成位置。若是设置为空字符串,则redis会将日志输出到标准输出。假如你在daemon状况下将日志设置为输出到标准输出,则日志会被写到/dev/null中。
logfile ""
若是但愿日志打印到syslog中,也很容易,经过syslog-enabled来控制。另外,syslog-ident还可让你指定syslog里的日志标志,好比:
syslog-ident redis
并且还支持指定syslog设备,值能够是USER或LOCAL0-LOCAL7。具体能够参考syslog服务自己的用法。
syslog-facility local0
对于redis来讲,能够设置其数据库的总数量,假如你但愿一个redis包含16个数据库,那么设置以下:
这16个数据库的编号将是0到15。默认的数据库是编号为0的数据库。用户可使用select <DBid>来选择相应的数据库。
databases 16
快照,redis的RDB持久化相关的配置:
save <seconds> <changes>
save 900 1 //表示每15分钟且至少有1个key改变,就触发一次持久化
save 300 10 //表示每5分钟且至少有10个key改变,就触发一次持久化
save 60 10000 //表示每60秒至少有10000个key改变,就触发一次持久化
禁用RDB持久化的策略,只要不设置任何save指令就能够,或者给save传入一个空字符串参数也能够达到相同效果:
save ""
当Redis数据持久化时,内存和RDB数据不一致时,redis中止对外提供服务,若是数据不一致时,继续使redis提供服务,配置以下参数:
stop-writes-on-bgsave-error yes
对于存储到磁盘中的快照,能够设置是否进行压缩存储。若是是的话,redis会采用LZF算法进行压缩。若是你不想消耗CPU来进行压缩的话,能够设置为关闭此功能,可是存储在磁盘上的快照会比较大。
rdbcompression yes
在存储快照后,还可让redis使用CRC64算法来进行数据校验,可是这样作会增长大约10%的性能消耗,若是你但愿获取到最大的性能提高,能够关闭此功能。
rdbchecksum yes
设置快照文件的名称,默认配置:
dbfilename dump.rdb
设置这个快照文件存放的路径。好比默认设置就是当前文件夹:
dir ./
redis主从同步功能:
经过slaveof配置项能够控制某一个redis做为另外一个redis的从服务器,经过指定IP和端口来定位到主redis的位置。通常状况下,咱们会建议用户为从redis设置一个不一样频率的快照持久化的周期,或者为从redis配置一个不一样的服务端口等等。
slaveof <masterip> <masterport>
从redis为只读:
slave-read-only yes
从redis会周期性的向主redis发出PING包,经过repl_ping_slave_period指令来控制其周期,默认是10秒。
repl-ping-slave-period 10
用户能够设置上述超时的时限,不过要确保这个时限比repl-ping-slave-period的值要大,不然每次主redis都会认为从redis超时。
repl-timeout 60
在主从同步时,可能在这些状况下会有超时发生:
以从redis的角度来看,当有大规模IO传输时。
以从redis的角度来看,当数据传输或PING时,主redis超时
以主redis的角度来看,在回复从redis的PING时,从redis超时
控制在主从同步时是否禁用TCP_NODELAY。若是开启TCP_NODELAY,那么主redis会使用更少的TCP包和更少的带宽来向从redis传输数据。可是这可能会增长一些同步的延迟,大概会达到40毫秒左右。若是你关闭了TCP_NODELAY,那么数据同步的延迟时间会下降,可是会消耗更多的带宽。
repl-disable-tcp-nodelay no
设置同步队列长度。队列长度(backlog)是主redis中的一个缓冲区,在与从redis断开链接期间,主redis会用这个缓冲区来缓存应该发给从redis的数据。这样的话,当从redis从新链接上以后,就没必要从新全量同步数据,只须要同步这部分增量数据便可。
repl-backlog-size 1mb
若是主redis等了一段时间以后,仍是没法链接到从redis,那么缓冲队列中的数据将被清理掉。咱们能够设置主redis要等待的时间长度。若是设置为0,则表示永远不清理。默认是1个小时。
repl-backlog-ttl 3600
# 设置slave优先级,默认为100
# 当主服务器不能正确工做的时候,数字低的首先被提高为主服务器,可是0是禁用选择
slave-priority 100
# 若是少于 N 个 slave 链接,且延迟时间 <=M 秒,则 master 可配置中止接受写操做。
# 例如须要至少 3 个 slave 链接,且延迟 <=10 秒的配置:
# min-slaves-to-write 3
# min-slaves-max-lag 10
# 设置 0 为禁用
# 默认 min-slaves-to-write 为 0 (禁用), min-slaves-max-lag 为 10
#设置Redis链接密码,若是配置了链接密码,客户端在链接Redis时须要经过AUTH <password>命令提供密码,默认关闭
requirepass foobared
设置同一时间最大客户端链接数,默认无限制,Redis能够同时打开的客户端链接数为Redis进程能够打开的最大文件描述符数,若是设置 maxclients 0,表示不做限制。当客户端链接数到达限制时,Redis会关闭新的链接并向客户端返回max number of clients reached错误信息
maxclients 128
指定Redis最大内存限制,Redis在启动时会把数据加载到内存中,达到最大内存后,Redis会先尝试清除已到期或即将到期的Key,当此方法处理 后,仍然到达最大内存设置,将没法再进行写入操做,但仍然能够进行读取操做。Redis新的vm机制,会把Key存放内存,Value会存放在swap区
maxmemory <bytes>
指定是否在每次更新操做后进行日志记录,Redis在默认状况下是异步的把数据写入磁盘,若是不开启,可能会在断电时致使一段时间内的数据丢失。由于 redis自己同步数据文件是按上面save条件来同步的,因此有的数据会在一段时间内只存在于内存中。默认为no
appendonly no
指定更新日志文件名,默认为appendonly.aof
appendfilename appendonly.aof
指定更新日志条件,共有3个可选值:
no:表示等操做系统进行数据缓存同步到磁盘(快)
always:表示每次更新操做后手动调用fsync()将数据写到磁盘(慢,安全)
everysec:表示每秒同步一次(折衷,默认值)
appendfsync everysec
指定是否启用虚拟内存机制,默认值为no,简单的介绍一下,VM机制将数据分页存放,由Redis将访问量较少的页即冷数据swap到磁盘上,访问多的页面由磁盘自动换出到内存中
vm-enabled no
虚拟内存文件路径,默认值为/tmp/redis.swap,不可多个Redis实例共享
vm-swap-file /tmp/redis.swap