zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    1104 Sum of Number Segments (20 分)(数学问题)
    1092 To Buy or Not to Buy (20 分)(hash散列)
    1082 Read Number in Chinese (25 分)(字符串处理)【背】
    1105 Spiral Matrix (25 分)(模拟)
    初识网络安全及搭建网站(内网)
    HTML5开发者需要了解的技巧和工具汇总(转)
    native+web开发模式之web前端经验分享
    移动平台3G手机网站前端开发布局技巧汇总(转)
    Asp.net 中图片存储数据库以及页面读取显示通用方法详解附源码下载
    使用H3Viewer来查看VS2010的帮助文档
  • 原文地址:https://www.cnblogs.com/gnool/p/5997323.html
Copyright © 2011-2022 走看看