• 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 <dbid>命令在连接上指定数据库id

        databases 16

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

        save <seconds> <changes>

        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 <masterip> <masterport>

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

        masterauth <master-password>

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

        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 <bytes>

    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>其中
    #dbid是0和'databases'-1之间的一个数字
    databases 16
    
    ################################ SNAPSHOTTING ################# ###############
    #
    #将磁盘上的数据块保存:
    #
    #save <seconds> <changes>
    #
    #将保存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 <masterip> <masterport>
    
    #如果主密码保护(使用“requirepass”配置
    #directive下面)可以告诉从设备之前进行验证
    #启动复制同步过程,否则master会
    #拒绝从属请求。
    ##
    #masterauth <master-password>
    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 <PASSWORD>
    #命令。这在您不信任的环境中可能很有用
    #其他用户可以访问运行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 <bytes>
    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 <milliseconds>”(如果需要)。
    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 @ <db> __前缀发布。
    #E  Keyevent事件,使用__keyevent @ <db> __前缀发布。
    #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> <hard limit> <soft limit> <soft seconds>
    ##
    #客户端在达到硬限制后立即断开连接,或者
    #达到软限制并达到指定数量的软限制
    #秒(持续)。
    #例如,如果硬限制为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
  • 相关阅读:
    20199137 2019-2020-2 《网络攻防实践》第七次作业
    2019-2020-2 20199137《网络攻防实践》 第六周作业
    2019-2020-2 20199137《网络攻防实践》第五周作业
    2019-2020 -2 20199137 《网络攻防实践》第四周作业
    20199111 2019-2020-2 《网络攻防实践》第十二周作业
    20199111 2019-2020-2 《网络攻防实践》第十一周作业
    20199111 2019-2020-2 《网络攻防实践》第十周作业
    20199111 2019-2020-2 《网络攻防实践》第九周作业
    20199111 2019-2020-2 《网络攻防实践》第八周作业
    20199111 2019-2020-2 《网络攻防实践》第七周作业
  • 原文地址:https://www.cnblogs.com/gnool/p/5997323.html
Copyright © 2020-2023  润新知