Redis-安装时问题整理

一、Redis编译:

1.问题:make gcc error

yum –y install gcc

2.问题:安装报错 error: jemalloc/jemalloc.h: No such file or directory

解决:make MALLOC=libc

3问题:

You need tcl 8.5 or newer in order to run the Redis test

make: * [test] 错误 1

解决:

wget http://downloads.sourceforge.net/tcl/tcl8.6.0-src.tar.gz

cd tcl8.6.0/

cd unix &&

./configure --prefix=/usr \

            --mandir=/usr/share/man \

            --without-tzdata \

            $([ $(uname -m) = x86_64 ] && echo --enable-64bit) &&

make &&

sed -e "s@^\(TCL_SRC_DIR='\).*@\1/usr/include'@" \

    -e "/TCL_B/s@='\(-L\)\?.*unix@='\1/usr/lib@" \

    -i tclConfig.sh

 

make install &&

make install-private-headers &&

ln -v -sf tclsh8.6 /usr/bin/tclsh &&

chmod -v 755 /usr/lib/libtcl8.6.so

 

二、配置

参数说明

redis.conf 配置项说明如下:

 

1. Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程

    daemonize no

 

2. 当Redis以守护进程方式运行时,Redis默认会把pid写入/var/run/redis.pid文件,可以通过pidfile指定

    pidfile /var/run/redis.pid

 

3. 指定Redis监听端口,默认端口为6379,作者在自己的一篇博文中解释了为什么选用6379作为默认端口,因为6379在手机按键上MERZ对应的号码,而MERZ取自意大利歌女Alessia Merz的名字

    port 6379

 

4. 绑定的主机地址

    bind 127.0.0.1

 

5.当 客户端闲置多长时间后关闭连接,如果指定为0,表示关闭该功能

    timeout 300

 

6. 指定日志记录级别,Redis总共支持四个级别:debug、verbose、notice、warning,默认为verbose

    loglevel verbose

 

7. 日志记录方式,默认为标准输出,如果配置Redis为守护进程方式运行,而这里又配置为日志记录方式为标准输出,则日志将会发送给/dev/null

    logfile stdout

 

8. 设置数据库的数量,默认数据库为0,可以使用SELECT 命令在连接上指定数据库id

    databases 16

 

9. 指定在多长时间内,有多少次更新操作,就将数据同步到数据文件,可以多个条件配合

    save

 

    Redis默认配置文件中提供了三个条件:

    save 900 1

    save 300 10

    save 60 10000

    分别表示900秒(15分钟)内有1个更改,300秒(5分钟)内有10个更改以及60秒内有10000个更改。

 

 

 

10. 指定存储至本地数据库时是否压缩数据,默认为yes,Redis采用LZF压缩,如果为了节省CPU时间,可以关闭该选项,但会导致数据库文件变的巨大

    rdbcompression yes

 

11. 指定本地数据库文件名,默认值为dump.rdb

    dbfilename dump.rdb

 

12. 指定本地数据库存放目录

    dir ./

 

13. 设置当本机为slav服务时,设置master服务的IP地址及端口,在Redis启动时,它会自动从master进行数据同步

    slaveof

 

14. 当master服务设置了密码保护时,slav服务连接master的密码

    masterauth

 

15. 设置Redis连接密码,如果配置了连接密码,客户端在连接Redis时需要通过AUTH 命令提供密码,默认关闭

    requirepass foobared

 

16. 设置同一时间最大客户端连接数,默认无限制,Redis可以同时打开的客户端连接数为Redis进程可以打开的最大文件描述符数,如果设置 maxclients 0,表示不作限制。当客户端连接数到达限制时,Redis会关闭新的连接并向客户端返回max number of clients reached错误信息

    maxclients 128

 

17. 指定Redis最大内存限制,Redis在启动时会把数据加载到内存中,达到最大内存后,Redis会先尝试清除已到期或即将到期的Key,当此方法处理 后,仍然到达最大内存设置,将无法再进行写入操作,但仍然可以进行读取操作。Redis新的vm机制,会把Key存放内存,Value会存放在swap区

    maxmemory

 

18. 指定是否在每次更新操作后进行日志记录,Redis在默认情况下是异步的把数据写入磁盘,如果不开启,可能会在断电时导致一段时间内的数据丢失。因为 redis本身同步数据文件是按上面save条件来同步的,所以有的数据会在一段时间内只存在于内存中。默认为no

    appendonly no

 

19. 指定更新日志文件名,默认为appendonly.aof

     appendfilename appendonly.aof

 

20. 指定更新日志条件,共有3个可选值:     no:表示等操作系统进行数据缓存同步到磁盘(快)     always:表示每次更新操作后手动调用fsync()将数据写到磁盘(慢,安全)     everysec:表示每秒同步一次(折衷,默认值)

    appendfsync everysec

 

 

 

21. 指定是否启用虚拟内存机制,默认值为no,简单的介绍一下,VM机制将数据分页存放,由Redis将访问量较少的页即冷数据swap到磁盘上,访问多的页面由磁盘自动换出到内存中(在后面的文章我会仔细分析Redis的VM机制)

     vm-enabled no

 

22. 虚拟内存文件路径,默认值为/tmp/redis.swap,不可多个Redis实例共享

     vm-swap-file /tmp/redis.swap

 

23. 将所有大于vm-max-memory的数据存入虚拟内存,无论vm-max-memory设置多小,所有索引数据都是内存存储的(Redis的索引数据 就是keys),也就是说,当vm-max-memory设置为0的时候,其实是所有value都存在于磁盘。默认值为0

     vm-max-memory 0

 

24. Redis swap文件分成了很多的page,一个对象可以保存在多个page上面,但一个page上不能被多个对象共享,vm-page-size是要根据存储的 数据大小来设定的,作者建议如果存储很多小对象,page大小最好设置为32或者64bytes;如果存储很大大对象,则可以使用更大的page,如果不 确定,就使用默认值

     vm-page-size 32

 

25. 设置swap文件中的page数量,由于页表(一种表示页面空闲或使用的bitmap)是在放在内存中的,,在磁盘上每8个pages将消耗1byte的内存。

     vm-pages 134217728

 

26. 设置访问swap文件的线程数,最好不要超过机器的核数,如果设置为0,那么所有对swap文件的操作都是串行的,可能会造成比较长时间的延迟。默认值为4

     vm-max-threads 4

 

27. 设置在向客户端应答时,是否把较小的包合并为一个包发送,默认为开启

    glueoutputbuf yes

 

28. 指定在超过一定的数量或者最大的元素超过某一临界值时,采用一种特殊的哈希算法

    hash-max-zipmap-entries 64

    hash-max-zipmap-value 512

 

29. 指定是否激活重置哈希,默认为开启(后面在介绍Redis的哈希算法时具体介绍)

    activerehashing yes

 

30. 指定包含其它的配置文件,可以在同一主机上多个Redis实例之间使用同一份配置文件,而同时各个实例又拥有自己的特定配置文件

include /path/to/local.conf

 

redis.conf文件英译版:

#Redis配置文件示例。
#
#注意,为了读取配置文件,Redis必须是
#以文件路径作为第一个参数开始:
#
#./redis-server /path/to/redis.conf

#注意单位:当需要内存大小时,可以指定
#以通常形式的1k 5GB 4M等等:
##
#1k => 1000字节
#1kb => 1024字节
#1m => 1000000字节
#1mb => 1024 * 1024个字节
#1g => 1000000000字节
#1gb => 1024 * 1024 * 1024字节
##
#单位不区分大小写,所以1GB 1Gb 1gB都是一样的。

################################# INCLUDES ###################################

#在此处包含一个或多个其他配置文件。这是有用的,如果你
#有一个标准模板,所有Redis服务器,但也需要
#自定义几个每服务器设置。包括文件可以包括
#其他文件,所以使用这个明智。
#
#注意选项“include”不会被命令“CONFIG REWRITE”重写,
#from admin或Redis Sentinel。因为Redis总是使用最后处理的
#line作为配置指令的值,你最好把includes
#在此文件的开头,以避免覆盖配置更改在运行时。
#
#如果相反,您有兴趣使用包括覆盖配置
#选项,最好使用include作为最后一行。
#
#include /path/to/local.conf
#include /path/to/other.conf

################################ 一般  #####################################

#默认情况下,Redis不作为守护程序运行。如果需要,使用“yes”。
#注意,Redis在守护进程时会在/var/run/redis.pid中写一个pid文件。
daemonize yes

#当运行守护进程时,Redis在/var/run/redis.pid中写入一个pid文件
#default。您可以在此处指定自定义pid文件位置。
pidfile /apps/app/redis3.0.6/redis.pid

#接受指定端口的连接,默认值为6379。
#如果指定端口0,Redis将不会侦听TCP套接字。
port 6379

#TCP listen()backlog。
#
#在高请求每秒的环境中,您需要高顺序的积压
#避免缓慢的客户端连接问题。注意Linux内核
#将默认截断它到/ proc / sys / net / core / somaxconn的值
#确保提高somaxconn和tcp_max_syn_backlog的值
#以获得所需的效果。
tcp-backlog 511

#默认情况下,Redis侦听来自所有网络接口的连接
#在服务器上可用。它可以只听一个或多个
#接口使用“bind”配置指令,后跟一个或
#more IP addresses。
#
# 例子:
#
#bind 192.168.1.100 10.0.0.1
#bind 127.0.0.1

#指定将用于侦听的Unix套接字的路径
#传入连接。没有默认值,所以Redis不会监听
#未指定时在unix套接字上。
#
#unixsocket /tmp/redis.sock
#unixsocketperm 700

#客户端空闲N秒后关闭连接(0禁用)
timeout 0

#TCP keepalive。
#
#如果非零,使用SO_KEEPALIVE发送TCP ACK到客户端缺席
通信的数量。这有两个原因:
#
#1)检测死对等体。
#2)从网络的角度来看连接是活着的
#设备在中间。
#
#在Linux上,指定的值(以秒为单位)是用于发送ACK的时间段。
#注意,要关闭连接,需要两倍的时间。
#在其他内核上,周期取决于内核配置。
#
#此选项的合理值为60秒。
tcp-keepalive 60

#指定服务器详细程度级别。
#这可以是以下之一:
#debug(很多信息,对开发/测试有用)
#verbose(很少有用的信息,但不像调试级别的混乱)
#notice(适度冗长,你想在生产中可能)
#warning(仅记录非常重要/关键的消息)
loglevel debug

#指定日志文件名。也可以使用空字符串强制
#Redis登录标准输出。注意,如果你使用标准
#输出用于日志,但是守护进程,日志将发送到/ dev / null
logfile "/apps/app/redis3.0.6/logs/log"

#要启用日志记录到系统记录器,只需将'syslog-enabled'设置为yes,
#并可选择更新其他syslog参数以满足您的需要。
#syslog-enabled no

#指定syslog标识。
#syslog-ident redis

#指定syslog设施。必须是USER或LOCAL0-LOCAL7之间。
#syslog-facility local0

#设置数据库的数量。默认数据库是DB 0,可以选择
#一个不同的在每个连接基础上使用SELECT 其中
#dbid是0和'databases'-1之间的一个数字
databases 16

################################ SNAPSHOTTING ################# ###############
#
#将磁盘上的数据块保存:
#
#save  
#
#将保存DB如果给定的秒数和给定的
#发生对数据库的写操作数。
#
#在下面的示例中,行为将保存:
#900秒(15分钟)后,如果至少1个键更改
#300秒(5分钟)后至少10个键更改
#after 60 seconds if至少10000 keys changed
#
#注意:您可以通过注释掉所有“保存”行来完全禁用保存。
#
#也可以删除所有以前配置的保存
#points通过添加一个具有单个空字符串参数的save指令
#像下面的例子:
#
#   save ""

save 900 1
save 300 10
save 60 10000

#默认情况下,如果启用了RDB快照,Redis将停止接受写入
#(至少一个保存点)和最近的后台保存失败。
#这将使用户意识到(以硬的方式)数据不持久
#在磁盘上正确,否则可能是没有人会注意到一些
#灾难会发生。
##
#如果后台保存过程将再次开始工作Redis将
#自动允许再次写入。
##
#但是,如果您已经设置了对Redis服务器的正确监视
#和持久性,您可能想要禁用此功能,以便Redis将
#继续照常工作,即使有磁盘的问题,
#权限,等等。
stop-writes-on-bgsave-error yes

#转储.rdb数据库时,使用LZF压缩字符串对象?
#对于默认设置为'yes',因为它几乎总是一个胜利。
#如果你想保存一些CPU在保存子项设置为'no',但
#数据集可能会更大,如果你有可压缩的值或键。
rdbcompression yes

#从RDB的版本5开始,CRC64校验和放在文件的末尾。
#这使得格式更加抗腐败,但有一个性能
#命中支付(约10%),当保存和加载RDB文件,所以你可以禁用它
#最大性能。
##
#禁用校验和创建的RDB文件的校验和为零
#告诉加载代码跳过检查。
rdbchecksum yes

#转储DB的文件名
dbfilename dump.rdb

#工作目录。
#
#DB将被写入此目录,并指定文件名
#上面使用'dbfilename'配置指令。
#
#仅附加文件也将在此目录中创建。
#
#请注意,您必须在此指定目录,而不是文件名。
dir ./

################################# REPLICATION ################ #################

#主从复制。使用slaveof使Redis实例成为副本
#另一个Redis服务器。关于Redis复制的几个事情。
##
#1)Redis复制是异步的,但您可以配置一个主机
#停止接受写入,如果它似乎至少没有连接
#给定数量的从属。
#2)Redis从设备能够执行部分重新同步
#master如果复制链路丢失了相对较少的数量
#    时间。您可能需要配置复制积压大小(请参阅下一页
#这个文件的部分)根据你的需要一个合理的价值。
#3)复制是自动的,不需要用户干预。之后
#网络分区从设备自动尝试重新连接到主设备
#并与他们重新同步。
##
#slaveof  

#如果主密码保护(使用“requirepass”配置
#directive下面)可以告诉从设备之前进行验证
#启动复制同步过程,否则master会
#拒绝从属请求。
##
#masterauth 
masterauth loong

#当从服务器失去与主服务器的连接或复制时
#仍在进行中,从属可以采取两种不同的方式:
##
#1)如果slave-serve-stale-data设置为“yes”(默认),则从属将
#仍然回复客户请求,可能使用过期数据,或
#data set可能只是空如果这是第一次同步。
##
#2)如果slave-serve-stale-data设置为“no”,从设备将回复
#一个错误“SYNC与主进程”到所有类型的命令
#但是INFO和SLAVEOF。
##
slave-serve-stale-data yes

#您可以配置从实例以接受写或不。写作
#一个从实例可能用于存储一些短暂的数据(因为数据
#写在从站上将很容易删除后再同步与主),但是
#也可能会导致问题,如果客户端写它,因为
#misconfiguration。
##
#由于Redis 2.6默认从机是只读的。
##
#注意:只读从站不是设计为暴露给不受信任的客户端
# 在网上。它只是一个防止实例滥用的保护层。
#仍然是只读slave默认情况下导出所有管理命令
#,如CONFIG,DEBUG等。在有限的程度上你可以改善
#security of read only slaves using'rename-command'to shadow all
#administrative / danger命令。
slave-read-only yes

#Replication SYNC策略:磁盘或套接字。
##
#------------------------------------------- ------
#警告:无条件复制是目前的实验
#------------------------------------------- ------
##
#新从站和重新连接从站,无法继续复制
#进程只是收到差异,需要做的就是所谓的"full
#synchronization"。一个RDB文件从主机发送到从机。
#传输可以以两种不同的方式进行:
##
#1)磁盘备份:Redis主机创建一个写入RDB的新进程
#文件。稍后,文件由父级传输
#过程递增到从站。
#2)无盘:Redis主机创建一个新的进程,直接写入
#RDB文件到从插座,而不触及磁盘。
##
#使用磁盘备份复制,同时生成RDB文件,有更多的从属
#可以在当前子节点生成后立即排队并与RDB文件一起提供
#RDB文件完成其工作。而使用无盘复制一次
#传输开始,新从站到达将排队和新的传输
#将在当前终止时启动。
##
#当使用无盘复制时,主服务器等待可配置的量
#时间(以秒为单位)开始传输之前希望多个从机
#将到达并且传输可以并行化。
##
#使用慢磁盘和快速(大带宽)网络,无盘复制
#工作更好。
repl-diskless-sync no

#启用无磁盘复制时,可以配置延迟
#服务器等待以便生成通过套接字传输RDB的子进程
#到奴隶。
##
#这很重要,因为一旦传输开始,它是不可能服务
#新奴隶到达,这将被排队等待下一次RDB传输,所以服务器
#等待延迟,以便让更多的奴隶到达。
##
#延迟时间以秒为单位,默认值为5秒。禁用
#完全只是设置为0秒,传输将尽快启动。
repl-diskless-sync-delay 5

#从设备以预定义的时间间隔向服务器发送PING。这是可能改变
#此间隔与repl_ping_slave_period选项。默认值为10
#秒。
##
#repl-ping-slave-period 10

#以下选项设置以下项的复制超时:
##
#1)SYNC期间的批量传输I / O,从从机的角度。
#2)主站从从站(数据,ping)的角度看超时。
#3)从主机(REPLCONF ACK ping)的角度看,从机超时。
##
#确保此值大于该值很重要
#指定为repl-ping-slave-period,否则将检测到超时
#每次在主机和从机之间有低流量。
##
#repl-timeout 60

#在SYNC之后在从槽上禁用TCP_NODELAY?
##
#如果选择“是”,Redis将使用较少数量的TCP数据包和
#减少带宽以向从设备发送数据。但这可以增加一个延迟
#数据出现在从机端,最多40毫秒
#Linux内核使用默认配置。
##
#如果选择“否”,从机侧显示的数据延迟
#减少,但更多的带宽将用于复制。
##
#默认情况下,我们优化低延迟,但在非常高的流量条件
#或当主机和从机有很多跳时,将此设置为“yes”可能
#是一个好主意。
repl-disable-tcp-nodelay no

#设置复制积压大小。积压是一个积累的缓冲区
#从数据,当从机断开一段时间时,使得当从机时
#想要重新连接,通常不需要完全重新同步,但是部分
#resync就足够了,只是传递从器件错过的数据部分
#disconnect。
##
#复制待办事项越大,从属节点的时间就越长
#断开连接,以后能够执行部分重新同步。
##
#仅在至少有一个从站连接时才分配积压。
##
#repl-backlog-size 1mb

#在主机已经不再连接从机一段时间后,积压
#将被释放。以下选项配置秒数
#需要经过,从最后一个slave断开的时间,for
#待清空缓冲区被释放。
##
#值为0表示永不释放积压。
##
#repl-backlog-ttl 3600

#从属优先级是由Redis在INFO输出中发布的整数。
#它被Redis Sentinel使用,以便选择一个从服务器升级到一个
#master如果主机不再正常工作。
##
#优先级数字低的从设备被认为是更好的促销,所以
#例如,如果有三个从属有优先级10,10025 Sentinel将
#选择优先级为10,即最低的那个。
##
#然而,0的特殊优先级标记从设备不能执行
#角色为主,所以优先级为0的从站将永远不会被选择
#Redis Sentinel进行宣传。
##
#默认情况下优先级为100。
slave-priority 100

#如果主数据小于,则可以停止接受写入
#N从站连接,具有小于或等于M秒的滞后。
##
#N个从站需要处于“在线”状态。
##
#以秒为单位的滞后,必须小于指定值,由计算
#从从设备接收的最后一个ping,通常每秒发送一次。
##
#此选项不保证N个副本将接受写入,但是
#将限制在没有足够的从设备的情况下丢失写入的暴露窗口
#可用,到指定的秒数。
##
#例如,要求至少3个滞后<= 10秒的从站使用:
##
#min-slaves-to-write 3
#min-slaves-max-lag 10
##
#将一个或另一个设置为0将禁用该功能。
##
#默认情况下,min-slaves-to-write设置为0(禁用功能)和
#min-slaves-max-lag设置为10。

################################## SECURITY ############### #####################

#要求客户端在处理任何其他文件之前发出AUTH 
#命令。这在您不信任的环境中可能很有用
#其他用户可以访问运行redis-server的主机。
##
#这应该保持注释掉向后兼容性,因为大多数
#个人不需要身份验证(例如他们运行自己的服务器)。
##
#警告:因为Redis是相当快的外部用户可以尝试
#150k密码每秒对一个好的盒子。这意味着你应该
#使用非常强的密码否则会很容易破解。
##
#requirepass foobared

#命令重命名。
##
#可以更改共享中的危险命令的名称
# 环境。例如,CONFIG命令可以重命名为某物
#难以猜测,所以它仍然可用于内部使用工具
#但不适用于一般客户。
##
#示例:
##
#rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52
##
#也可以通过将命令重命名为完全杀死命令
#一个空字符串:
##
#rename-command CONFIG""
##
#请注意,更改已登录到的命令的名称
#AOF文件或传输到从站可能会导致问题。

################################### LIMITS ############## ######################

#同时设置连接的客户端的最大数量。默认
#此限制设置为10000个客户端,但如果Redis服务器不是
#能够配置进程文件限制以允许指定的限制
#允许的最大客户端数被设置为当前文件限制
#minus 32(因为Redis为内部使用保留了几个文件描述符)。
##
#一旦达到限制,Redis将关闭所有新连接发送
#an error'max number of clients reached'。
##
#maxclients 10000

#不要使用比指定字节数更多的内存。
#当达到内存限制时,Redis将尝试删除密钥
#根据选择的逐出策略(请参阅maxmemory-policy)。
##
#如果Redis无法根据策略删除密钥,或者策略是
#set to'noeviction',Redis will start to reply with errors to commands
#将使用更多的内存,如SET,LPUSH等,并将继续
#来回复只读命令,如GET。
##
#当使用Redis作为LRU缓存或设置时,此选项通常很有用
#一个实例的硬内存限制(使用'noeviction'策略)。
##
#警告:如果有从属设备连接到具有maxmemory的实例,
#减去馈送从器件所需的输出缓冲器的大小
#从使用的内存计数,使网络问题/ resyncs将
#不触发按键被逐出的循环,反过来输出
#缓冲区的奴隶满了DEL的键被逐出触发删除
#个更多的键,依此类推,直到数据库完全清空。
##
#简而言之...如果你有奴隶附加它建议你设置一个较低
#limit for maxmemory,以便系统上有一些可用的RAM用于从属
#output buffers(但是如果策略是'noeviction',则不需要)。
##
#maxmemory 
maxmemory 1.5GB

#MAXMEMORY POLICY:Redis如何选择maxmemory时要删除的内容
#到达。您可以选择五种行为:
##
#volatile-lru  - >使用LRU算法删除带有过期集的密钥
#allkeys-lru  - >根据LRU算法删除任何密钥
#volatile-random  - >删除带有过期集的随机密钥
#allkeys-random  - >删除随机密钥,任意密钥
#volatile-ttl  - >删除具有最近过期时间的密钥(次要TTL)
#noeviction  - >不要过期,只是写操作返回一个错误
##
#注意:使用任何上述策略,Redis将在写入时返回错误
#操作,当没有合适的驱逐键时。
##
#在编写日期这些命令是:set setnx setex append
#incr decr rpush lpush rpushx lpushx linsert lset rpoplpush sadd
#烧结烧结料sion
#zunionstore zinterstore hset hsetnx hmset hincrby incrby decrby
#getset mset msetnx exec sort
##
#默认值为:
##
#maxmemory-policy noeviction

#LRU和最小TTL算法不是精确的算法,而是近似的
#算法(为了节省内存),所以你可以调整它的速度或
# 准确性。对于默认Redis将检查五个键,并选择一个
#最近使用较少,您可以使用以下更改样本大小
#configuration指令。
##
#默认值为5产生足够好的结果。 10非常接近
#true LRU但是成本多一点CPU。 3是非常快,但不是很准确。
##
#maxmemory-samples 5

############################## APPEND ONLY MODE ################# ##############

#默认情况下,Redis异步地转储磁盘上的数据集。这种模式是
#足够好在许多应用程序,但是一个问题与Redis进程或
#断电可能导致几分钟的写丢失(取决于
#配置的保存点)。
##
#仅附加文件是提供的替代持久性模式
#更好的耐用性。例如使用默认数据fsync策略
#(见后面的配置文件)Redis可以在a中丢失只有一秒的写入
#戏剧性事件,如服务器断电,或单个写如果有
#错误的Redis进程本身发生,但操作系统是
#仍然正常运行。
##
#AOF和RDB持久性可以同时启用而没有问题。
#如果在启动时启用AOF,Redis将加载AOF,即文件
#更好的耐用性保证。
##
#请检查http://redis.io/topics/persistence以获取更多信息。

appendonly no

#附加文件的名称(默认:"appendonly.aof")

appendfilename "appendonly.aof"

#fsync()调用告诉操作系统在磁盘上实际写入数据
#而不是在输出缓冲区中等待更多的数据。有些操作系统会真的刷新
#数据在磁盘上,一些其他操作系统将只尝试尽快做到。
##
#Redis支持三种不同的模式:
##
#no:do not fsync,只是让操作系统在需要时刷新数据。更快。
#always:fsync之后每次写入只追加日志。慢,最安全。
#everysec:fsync每秒只有一次。妥协。
##
#默认是“everysec”,因为它通常是正确的折中
#速度和数据安全。这是由你来了解,如果你可以放松这
#“no”,它将让操作系统在刷新输出缓冲区的时候
#想要,为了更好的表现(但如果你能生存的想法
#一些数据丢失考虑默认持久性模式的快照),
#或相反,使用“总是”,这是非常缓慢,但比一点安全
#everysec。
##
#更多详情请查看以下文章:
#http://antirez.com/post/redis-persistence-demystified.html
##
#如果不确定,请使用“everysec”。

#appendfsync always
appendfsync everysec
#appendfsync no

#当AOF fsync策略设置为always或everysec和背景时
#保存过程(后台保存或AOF日志背景重写)是
#在一些Linux配置中对磁盘执行大量I / O
#Redis可能在fsync()调用时阻塞太长时间。请注意,没有修复
#this目前,因为即使在不同的线程执行fsync也会阻塞
#我们的同步写(2)调用。
##
#为了缓解这个问题,可以使用以下选项
#将阻止fsync()在主进程中被调用
正在进行#BGSAVE或BGREWRITEAOF。
##
#这意味着当另一个孩子保存时,Redis的持久性是
#与“appendfsync none”相同。实际上,这意味着它
#可能丢失最多30秒的日志在最糟糕的情况下(与
#default Linux settings)。
##
#如果您有延迟问题,请将其设置为“yes”。否则保留为
#“no”这是从耐用性的角度来看最安全的选择。

no-appendfsync-on-rewrite no

#自动重写追加文件。
#Redis能够自动重写日志文件隐式调用
#BGREWRITEAOF当AOF日志大小增加指定的百分比时。
##
#这是它的工作原理:Redis记住AOF文件的大小之后
#latest rewrite(如果没有重写,自重启以来,大小
#使用启动时的AOF)。
##
#此基本大小与当前大小进行比较。如果当前大小为
#大于指定的百分比,则重写被触发。也
#需要指定要重写的AOF文件的最小大小,这
#用于避免重写AOF文件,即使百分比增加
#已达到,但它仍然相当小。
##
#指定一个百分比零为了禁用自动AOF
#重写功能。

auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

#AOD文件可能会在Redis结束时被截断
#启动过程,当AOF数据被加载回内存。
#这可能发生在Redis运行的系统上
#崩溃,特别是当一个ext4文件系统没有安装
#data = ordered选项(但是这不会发生在Redis本身
#崩溃或中止,但操作系统仍然正常工作)。
##
#Redis可以在出现这种情况时退出并返回错误,或者加载尽可能多的内容
#数据(默认为现在),如果找到AOF文件,则启动
#在末尾被截断。以下选项控制此行为。
##
#如果aof-load-truncated设置为yes,则加载截断的AOF文件
#Redis服务器开始发出日志以通知用户事件。
#否则,如果该选项设置为no,服务器将中止并显示错误
#并拒绝启动。当该选项设置为no时,用户需要
#重新启动之前使用“redis-check-aof”实用程序修复AOF文件
#服务器。
##
#注意,如果AOF文件被发现在中间被损坏
#服务器仍将退出并显示错误。此选项仅适用于
#Redis将尝试从AOF文件读取更多数据,但没有足够的字节
#将被找到。
aof-load-truncated yes

################################ LUA SCRIPTING ################ ###############

#Lua脚本的最大执行时间(毫秒)。
##
#如果达到最大执行时间,Redis将记录一个脚本
#在最大允许时间后仍然在执行,并将开始
#回复包含错误的查询。
##
#当长时间运行的脚本超过最大执行时间时
#SCRIPT KILL和SHUTDOWN NOSAVE命令可用。第一个可以
#用于停止尚未调用写入命令的脚本。第二
#是在写命令的情况下关闭服务器的唯一方法
#已经由脚本发出,但用户不想等待自然
#终止脚本。
##
#将其设置为0或负值,无限制执行,不带警告。
lua-time-limit 5000

################################ REDIS 集群 ################ ###############
##
#+++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++
#警告实验:但是Redis群集被认为是稳定的代码
#为了将其标记为"成熟",我们需要等待一个不重要的百分比
#个用户在生产环境中部署。
#+++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++
##
#正常Redis实例不能是Redis集群的一部分;只有节点
#作为集群节点启动。为了启动一个Redis实例
#cluster node启用集群支持取消注释以下内容:
##
#cluster-enabled yes

#每个集群节点都有一个集群配置文件。这个文件不是
#旨在手动编辑。它由Redis节点创建和更新。
#每个Redis群集节点需要一个不同的群集配置文件。
#确保在同一系统中运行的实例没有
#重叠群集配置文件名。
##
#cluster-config-file nodes-6379.conf

#集群节点超时是节点必须无法访问的毫秒数
#,以便它被认为处于故障状态。
#大多数其他内部时间限制是节点超时的倍数。
##
#cluster-node-timeout 15000

#发生故障的主设备的从设备将避免在其数据时启动故障转移
#看起来太旧了。
##
#没有简单的方法让从属实际上有一个精确的度量
#其“数据年龄”,因此执行以下两个检查:
##
#1)如果有多个从设备可以进行故障转移,则它们会交换消息
#为了试图给奴隶带来最好的优势
#replication offset(来自主处理器的更多数据)。
#Slaves将尝试通过偏移获得它们的排名,并应用于开始
#故障切换延迟与他们的排名成比例。
##
#2)每个从属计算最后一次交互的时间
#它的主人。这可以是接收的最后一次ping或命令(如果主机
#仍然处于“连接”状态),或自从之后经过的时间
#断开与主机的连接(如果复制链接当前关闭)。
#如果最后一次交互太旧,从设备将不会尝试故障转移
#at all。
##
#点“2”可以由用户调节。具体来说,从站将不执行
#failover if,自从上次与master交互后,时间
#elapsed大于:
##
#(node-timeout * slave-validity-factor)+ repl-ping-slave-period
##
#例如,如果node-timeout为30秒,并且slave-validity-factor
#为10,并且假设默认的repling-slave-period为10秒
#slave不会尝试故障转移,如果它不能与主机谈话
#长于310秒。
##
#大的从有效性因子可能允许具有太旧数据的从设备进行故障转移
#a master,而太小的值可能会阻止群集
#选择一个从属。
##
#为了实现最大可用性,可以设置从属有效因子
#到值为0,这意味着,奴隶将总是试图故障转移
#master,而不管他们最后一次与master交互的时间。
#(但是他们总是试图应用与他们成比例的延迟
#offset rank)。
##
#Zero是唯一能够保证当所有分区恢复时的值
#集群将永远能够继续。
##
#cluster-slave-validity-factor 10

#集群从属设备能够迁移到孤立的主设备,即主设备
#没有工作的奴隶。这提高了集群能力
#抵抗失败,否则孤立的主人不能失败
#如果没有工作从设备,则发生故障。
##
#奴隶迁移到孤立的主人,只有至少还有一个
#给他们的老主人的其他工作从站。这个数字
#是“迁移障碍”。迁移障碍为1意味着一个奴隶
#将迁移,只有当至少有一个其他工作从站为其主站
#等。它通常反映你想要的每一个奴隶的数量
#master。
##
#默认值为1(从机迁移只有当他们的主人至少保持
#一个从站)。要禁用迁移,只需将其设置为非常大的值。
#可以设置值0,但仅对调试和危险有用
#在生产中。
##
#cluster-migration-barrier 1

#默认情况下,如果Redis集群节点检测到,则停止接受查询
#是至少一个散列槽未覆盖(没有可用的节点服务它)。
#这种方式如果集群部分关闭(例如一个散列槽的范围
#不再被覆盖),所有的集群变为,最终不可用。
#一旦所有插槽再次覆盖,它将自动返回可用。
##
#但是有时候你想要的集群的子集是工作,
#继续接受仍为关键字空间部分的查询
#覆盖。为了这样做,只需设置cluster-require-full-coverage
#选项为no。
##
#cluster-require-full-coverage yes

#为了设置集群,请务必阅读文档
#可在http://redis.io网站上获得。

################################# SLOW LOG ############## #####################

#Redis Slow Log是一个系统,用于记录超过指定的查询
# 执行时间处理时间。执行时间不包括I / O操作
#喜欢和客户交谈,发送回复等等,
#但只是实际执行命令所需的时间(这是唯一的
#命令执行阶段,其中线程被阻塞并且无法服务
#其他请求在此期间)。
##
#您可以使用两个参数配置慢日志:一个告诉Redis
#什么是执行时间,以微秒为单位,超过为了
#命令获取日志,另一个参数是长度
#slow log。 当记录新命令时,最旧的命令从中删除
#日志命令队列。

#以下时间以微秒表示,因此1000000是等效的
#到一秒。 请注意,负数将禁用慢日志,而
#一个零值强制记录每个命令。
slowlog-log-slow-than 10000

#这个长度没有限制。 只是要注意它会消耗内存。
#您可以使用SLOWLOG RESET来回收慢速日志使用的内存。
slowlog-max-len 128

################################ 延迟监视器 ##############################

#Redis延迟监控子系统对不同的操作进行采样
#在运行时为了收集与可能的源有关的数据
#latency的Redis实例。
##
#通过LATENCY命令,此信息可供用户使用
#打印图形并获取报告。
##
#系统只记录在等于或的时间执行的操作
#大于通过指定的毫秒数
#latency-monitor-threshold配置指令。当其值设置时
#置零,延迟监视器关闭。
##
#默认情况下,延迟监控被禁用,因为它大多不需要
#如果没有延迟问题,并且收集数据有性能
#影响,虽然非常小,可以在大负载下测量
#监视可以在运行时使用命令轻松启用
#“CONFIG SET latency-monitor-threshold ”(如果需要)。
latency-monitor-threshold 0

############################# EVENT NOTIFICATION ################### ###########

#Redis可以通知Pub / Sub客户端关键空间中发生的事件。
#此功能在http://redis.io/topics/notifications中进行了说明
##
#例如,如果启用了键空间事件通知和客户端
#对存储在数据库0中的键“foo”执行DEL操作,两个
#邮件将通过Pub / Sub发布:
##
#PUBLISH __keyspace @ 0 __:foo del
#PUBLISH __keyevent @ 0 __:del foo
##
#可以选择Redis在集合中通知的事件
#类。每个类由单个字符标识:
##
#K 键空间事件,使用__keyspace @  __前缀发布。
#E  Keyevent事件,使用__keyevent @  __前缀发布。
#g 通用命令(非特定类型),如DEL,EXPIRE,RENAME,...
#$  String命令
#l 列出命令
#s 设置命令
#h 哈希命令
#z 排序set命令
#x 过期事件(每次密钥过期时生成的事件)
#e 驱逐事件(当maxmemory驱逐某个键时生成的事件)
#A g $ lshzxe的别名,因此“AKE”字符串表示所有事件。
##
#“notify-keyspace-events”接受一个作为参数的字符串
#为零或多个字符。空字符串表示通知
#已禁用。
##
#示例:启用列表和通用事件,从的角度来看
#event name,use:
##
#notify-keyspace-events Elg
##
#示例2:获取订阅频道的过期密钥的流
#name __keyevent @ 0 __:expired use:
##
#notify-keyspace-events Ex
##
#默认情况下,所有通知都被禁用,因为大多数用户不需要
#此功能和功能有一些开销。注意,如果你不
#指定K或E中的至少一个,不会传送任何事件。
notify-keyspace-events ""

############################### ADVANCED CONFIG ################# #############

#哈希编码使用内存高效的数据结构,当他们有
#少数条目,并且最大条目不超过给定
#threshold。这些阈值可以使用以下指令进行配置。
hash-max-ziplist-entries 512
hash-max-ziplist-value 64

#类似于哈希,小列表也按照特殊的方式编码
#为了节省大量的空间。特殊表示仅在何时使用
#您符合以下限制:
list-max-ziplist-entries 512
list-max-ziplist-value 64

#集合在一种情况下有一个特殊的编码:当组合时
#的只是正好是范围内的10的整数的字符串
64位有符号整数。
#以下配置设置设置大小的限制
#设置为了使用这种特殊的内存保存编码。
set-max-intset-entries 512

#类似于散列和列表,排序集也是专门编码的
#为了节省大量的空间。此编码仅用于长度和
排序集合的#元素低于以下限制:
zset-max-ziplist-entries 128
zset-max-ziplist-value 64

#HyperLogLog稀疏表示字节数限制。限制包括
#16字节标头。当使用稀疏表示的HyperLogLog交叉时
#这个限制,它被转换成密集表示。
##
#大于16000的值是完全无用的,因为那时候
#密集表示更有内存效率。
##
#建议的值是~3000以便有好处
#空间高效编码,而不会减慢太多的PFADD,
#是具有稀疏编码的O(N)。该值可以提高到
#~10000当CPU不是一个关注,但空间是,并且数据集是
#由许多HyperLogLogs组成,基数在0 - 15000范围内。
hll-sparse-max-bytes 3000

#active rehashing每100毫秒的CPU时间使用1毫秒
#order以帮助重新散列主Redis散列表(一个映射顶层
#keys to values)。 Redis使用的哈希表实现(见dict.c)
#执行延迟重新散列:运行到散列表中的操作越多
#是重新散列,执行更多的重新散列“步骤”,所以如果
#server is idle the rehashing is never complete and some more memory is used
#由散列表。
##
#默认是每秒使用这个毫秒10次
#主动重写主要的字典,尽可能释放内存。
##
#如果不确定:
#use“activerehashing no”如果你有硬的延迟要求,它是
#在Redis可以不时回复的环境中不是一件好事
#到2毫秒延迟的查询。
##
#use“activerehashing yes”如果你没有这么严格的要求,但
#想尽可能释放内存空间。
activerehashing yes

#客户端输出缓冲区限制可用于强制断开客户端
#没有从服务器读取数据足够快,出于某种原因(a
#常见的原因是发布/订阅客户端不能消耗消息的速度
#publisher可以产生它们)。
##
#对于三种不同类别的客户端,可以设置不同的限制:
##
#normal - >正常客户端,包括MONITOR客户端
#slave - >从客户端
#pubsub - >客户端订阅至少一个pubsub通道或模式
##
#每个client-output-buffer-limit伪指令的语法如下:
##
#client-output-buffer-limit <class>   
##
#客户端在达到硬限制后立即断开连接,或者
#达到软限制并达到指定数量的软限制
#秒(持续)。
#例如,如果硬限制为32 MB,软限制为
#16兆字节/ 10秒,客户端将立即断开连接
#如果输出缓冲区的大小达到32兆字节,但也会得到
#断开连接,如果客户端达到16兆字节并持续克服
#限制10秒。
##
#默认情况下,正常客户端不受限制,因为它们不接收数据
#没有询问(推送方式),但只是在请求后,所以只
#异步客户端可以创建更快地请求数据的场景
#比它可以读。
##
#改为对pubsub和从属客户端有一个默认限制
#用户和从设备以推送方式接收数据。
##
#通过将硬限制或软限制设置为零可以禁用。
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60

#Redis调用内部函数执行许多后台任务,如
#关闭客户端的连接超时,清除过期的密钥
#从未请求,等等。
##
#并非所有任务都以相同的频率执行,但Redis会检查
#任务根据指定的“hz”值执行。
##
#默认情况下,“hz”设置为10.提高值将使用更多的CPU时间
#Redis是空闲的,但同时会使Redis更灵敏
#有许多键同时到期,并且超时可能
#处理更精确。
##
#范围在1到500之间,但是超过100的值通常不是
# 一个好主意。大多数用户应该使用默认值10,并将其升高到
#100仅在需要非常低延迟的环境中。
hz 10

#当子代重写AOF文件时,如果启用以下选项
#该文件将每隔32 MB的数据生成fsync-ed。这是有用的
#为了更加渐进地提交文件到磁盘并避免
#大延迟尖峰。
aof-rewrite-incremental-fsync yes

 

转载于:https://www.cnblogs.com/gnool/p/5997323.html

你可能感兴趣的:(Redis-安装时问题整理)