Redis 安装手册

简介

Redis是一个开源的、分布式的基于内存的数据结构化存储,常被用作内存数据库,消息缓存和代理。它支持数据结构,如字符串、哈希、列表、集合、带范围查询的排序集合、位图、超日志、带半径查询的地理空间索引和流。Redis具有内置的复制、Lua脚本、LRU逐出、事务和不同级别的磁盘持久性,并通过Redis Sentinel和带有Redis集群的自动分区提供高可用性

安装部署

安装步骤

  http://download.redis.io/releases/redis-5.0.7.tar.gz
 # chmod +x redis-5.0.7.tar.gz
 # tar -zxvf redis-5.0.7.tar.gz

 # cd /cloud/soft/redis-5.0.7
 # make
 # make install

服务验证

 # cd /cloud/soft/redis-5.0.7
 # redis-server

 备注:其实在任意目录都可以执行:redis-server命令
 * 打开新的ssh连接
 # cd /cloud/soft/redis-5.0.7
 # redis-cli 
 # set foo bar

 备注:【set foo bar】 返回OK表示成功

到此为止redis 5.0.7 单机版部署成功。

配置文件

常用配置项

 表示引入local.conf,可以在local.conf中设置一些公共的配置项,或者将local.conf作为模板配置文件引入

 redis服务绑定的网络接口,redis服务会监听来自这些接口的信息,可以跟多个ip地址,用空格分开,也可以有多个bind指令,分行显示
 bind 127.0.0.1 ::1 表示监听本地loopback,如果运行在internet,强烈建议配置bind指令,不配置表示监听所有网络接口
 redis服务监听端口,如果设置为:0,redis服务不监听tcp连接
 客户端idle 超时关闭时间,0:不启用(单位:秒)
 在没有通信的情况下redis用SO_KEEPALIVE 发送 TCP ACKs 给客户端的时间间隔。用于检测 客户端是否已经死掉;从中间网络设备的视角判断连接是否存活
 从3.2.1开始启用,合理值建议为:300  (单位:秒)
 是否启用守护进程,即后台运行,默认为:不启用;
 redis 采用daemonized 模式启动时,生成一个pid文件,pid文件默认位置为:/var/run/redis.pid,用户可以指定,启动时生成,退出时删除,创建失败,redis也能正常启动。
 # If a pid file is specified, Redis writes it where specified at startup
 指定服务器详细信息级别:debug,verbose,notice(建议生产环境配置),warning
 日志存放文件,如果为空字符串,则发送到标准输出,如果是daemonized模式,则发送到:/dev/null
 数据库数量,默认使用的数据库为:0;可以选择不同的数据库:在连接时使用:SELECT <DBID>,DBID是0到 {databases}-1 之间的数
 保存DB到磁盘的策略,注释所有的save行,表示禁用保存功能;通过设置:save "" 表示清除前面保存的所有信息
 * save 900 1     900秒至少有一个key改变
 * save 300 10    300秒至少10个keys修改
 * save 60 10000  60秒至少10000个keys修改
 同时可连接的最大客户端数,默认值为:10000,达到最大后,redis将会关闭新连接,病发送:max number of clients reached 错误信息。
 设置最多可以使用的内存大小
 达到最大使用内存时,采取的行为:默认为:不删除任何数据,只返回错误。
 LRU,LFU 以及最小TTL算法时,不是精确的算法,时概率算法。默认redis检测5个key,挑出最近最少使用的。可以修改此值。
 5个有较好的结果,10个接近于lru,但消耗更多cpu,3更快但更不精确。
 是否启用aof功能,aof和rdb可以同时写
 aof文件的名字

高级选项

 加载模块
 如果保护模式打开,并且:没有bind指令,也没设置密码,那么redis服务只会接受: IPv4 和 IPv6 loopback addresses 127.0.0.1 和 ::1, 以及 Unix domain Sockets的客户端连接
 默认:yes,如果想让其它主机能连接,需要禁用此选项,即设置为:no
 此参数确定了TCP连接中已完成队列(完成三次握手之后)的长度, 当然此值必须不大于Linux系统定义的/proc/sys/net/core/somaxconn值,默认是511,而Linux的默认参数值是128。当系统并发量大并且客户端速度缓慢的时候,可以将这二个参数一起参考设定
 unix socket 的路径,没有默认值,因此redis默认不启用unix socket

 # If you run Redis from upstart or systemd, Redis can interact with your
 # supervision tree. Options:
 #   supervised no      - no supervision interaction
 #   supervised upstart - signal upstart by putting Redis into SIGSTOP mode
 #   supervised systemd - signal systemd by writing READY=1 to $NOTIFY_SOCKET
 #   supervised auto    - detect upstart or systemd method based on
 #                        UPSTART_JOB or NOTIFY_SOCKET environment variables
 # Note: these supervision methods only signal "process is ready."
 #       They do not enable continuous liveness pings back to your supervisor.
 将日志写到系统logger标记,no:表示不启用
 指定syslog身份标识符,在启用syslog-enabled后可用
 指定syslog工具,必须是:USER或者在LOCAL0-LOCAL7之间
 默认redis真是ASII格式的艺术logo(tty方式的标准输出)。设置为yes在启动日志也可展示
 默认情况下,如果启用了RDB快照,并且最新的后台保存失败,则Redis将停止接受写入。这可以使用户知道数据没有持久化到磁盘。否则可能会引发灾难。如果后台进程又工作正常,则redis将会自动允许写入。
 当dump .db数据库的时候,使用LZF对string对象进行压缩。
 从RDB 的version 5 开始,会在文件末尾放CRC64 checksum。这可以使格式more resistant to corruption,但也带来性能损耗(10%)
 dump 数据库的文件名
 dbfilename的目录,append only file也会创建在这个目录下
 master-replica 异步,可以配置为:如果发现m-r之间至少有被给数量的replica不连接,停止接收写
 如果master使用密码保护(指令:requirepass),replica在开始复制前要先进行身份验证,否则master拒绝replica
 replica和master失去连接后的两种处理方式:yes:继续响应客户端请求,数据和master不一致;no:对所有指令返回错误(SYNC with master in progress),除了如下指令: 
 INFO,replicaOF, AUTH, PING, SHUTDOWN, REPLCONF, ROLE CONFIG,SUBSCRIBE, UNSUBSCRIBE, PSUBSCRIBE, PUNSUBSCRIBE, PUBLISH, PUBSUB, COMMAND, POST, HOST: 以及 LATENCY
 副本只能读,从2.6开始:默认redis副本只读
 新replicas加入,master复制rdb文件有两种方式:1. Disk-backed  master启动新进程写rdb 文件到磁盘,然后父进程将rdb文件增量发送给replicas;2. Diskless:master创建新进程直接发送rdb文件给replicas sockets,根本不在本地磁盘创建文件。

 如果多个副本,多个副本并行传输,满磁盘快网络,适合用diskless方式。diskless在5.0.7版本中为实验功能
 采用无盘复制时,可以配置服务器等待的延迟,以便生成通过socket将RDB传输到副本;一旦开始传输,不会再服务新到达的replicas,直到结束传输。默认:5  (单位:秒)
 replica 想server发送pings的间隔,默认:10  (单位:秒) 
 replica 同步信息超时时间,此值要大于:repl-ping-replica-period,超时的视角:1. replica:大量的I/O传输;2. replica:master超时;3. replica
 设置为yes:tcp传输使用最小的包,尽量少的带宽,replica侧的数据与master会有延迟;设置为:no 延迟变小,单占用更多的带宽
 设置replication的backlog大小,当replica偶尔断链并重连接时,同步数据不需要全部同步,只需要部分重新同步即可,这个就是部分同步要同步的buffer大小。
 master 断连释放backlog空间的超时时间,最后一个replica断连算起,如果值为0表示从不释放,如果是replicas超时不释放,有可能replica成为master;单位:秒
 redis sentinel选择master的策略,数值越小,选为master的优先级越高,如果为0,表示从来不会选为master
 两个值一起用:表示在指定的lag(秒)至少要有min-replicas-to-write 个replicas连接着master(ping),否则master停止接受写操作,如果min-replicas-max-lag 为0,禁用此功能
在发生failover时,特别有用,防止继续向旧的master写数据,导致数据永远丢失
 如果设置如上的两个参数,replica将会把如上的ip和port并暴露出去,通过INFO replication,以及master上的ROLE看到的就是这个IP和端口,
 常用于:端口转发和NAT场景下,对master暴露自己的真是IP和端口
 在客户端进行任何操作之前,先验证密码,此处密码为:foobared
 指令重命名,可以通过:rename-command CONFIG "" 将CONFIG指令kill
 从redis 5,默认replica 忽略最大内存限制设置,这意味着只有master会删除keys
 当内存达到maxmemory,要驱逐key的时候,是否阻塞其它命令。
 当key过期时间到,要进行驱逐时,是否阻塞其它命令。
 当重命名或者覆盖key值时,是否阻塞其它命令
 当重新同步master的信息时,需要删除rdb文件,重新从master拉取,是否采用阻塞方式执行(阻塞其它命令)。
 redis 调用fsync()写磁盘的三种模式:
 no: 不fsync,让os决定什么时候flush数据到磁盘,快;
 always:只要redis有写操作就fsync到aof,慢,安全;
 everysec:没瞄准fsync一次;

 默认为:everysec
 AOF fsync 策略设置为always或者everysec时,后台进程会消耗大量的I/O性能。在fsync调用上回占用大量的时间。甚至阻塞其它县城的同步write调用。
 使用此选项可以防止在BGSAVE或者BGREWRITEAOF 执行时主进程调用fsync。如果有延迟问题,设置为:yes;否则设置为:no,从持久性的角度看,这是最安全的。
 重写策略参数:当前文件比上次重写后增加 auto-aof-rewrite-percentage 的比例后再开始重写,如果刚启动,则采用初始aof文件为上次重写文件;如果aof文件小于auto-aof-rewrite-min-size,则不触发重写;如果auto-aof-rewrite-percentage设置为:0,则禁用自动重写功能
 redis启动时是否能支持加载损坏了的aof文件(在结尾被阶段,不完整),如果设置为:yes,redis加载尽可能多的数据,并将错误信息通知用户;如果设置为:no,redis决绝启动,需要用户通过:redis-check-aof 修复aof文件
 启用aof文件带rdb前导功能,在重写aof文件是时,文件会是如下格式:
 [RDB file][AOF tail]

 这能提供更快的重写和加载能力,在加载时先加载RDB文件再加载AOF tail
 lua脚本执行超时时间,如果为0或者负数,不限制;如果超过最大时间,redis会对查询请求返回错误; 两个命令:SCRIPT KILL 和 SHUTDOWN NOSAVE可以用于杀掉脚本和关闭服务。
 作为redis cluster的node,不使用此选项不能作为redis集群的实例
 redis集群配置文件,由集群自动创建,最好不要手工编辑,集群会自动调整
 集群节点认为不可达的超时时间,单位:毫秒
 故障转移因子,当replica与master的交互超过:
 (node-timeout * replica-validity-factor) + repl-ping-replica-period
 时,replica进行故障转移,此值太大,会导致replica与master的数据相差比较多,replica的数据太老。0是唯一能够保证当所有分区恢复时群集始终能够继续的值

 replica 迁移为孤儿master的条件:当master有(cluster-migration-barrier)+1 个副本时,支持replica迁移为孤儿master,设置为:0,不建议生产使用,禁用此功能:可以将值设的超级大
 * 当cluster-require-full-coverage为yes时,表示当负责一个插槽的主库下线且没有相应的从库进行故障恢复时,集群不可用
 * 当cluster-require-full-coverage为no时,表示当负责一个插槽的主库下线且没有相应的从库进行故障恢复时,集群仍然可用
 设置为yes,master故障,replica不做故障转移;但仍然可以手工做故障转移
 设置为no,master故障,replica转换为master
 做地址和端口映射的时候,可以通过如上三个参数把redis的真实地址提供出去,让客户端进行连接,他别时在docker化redis之后,端口映射比较有用
 超过此事件的查询,称作慢日志查询,单位:微妙
 慢日志队列大小,超过的,删除最老的,单位:条数,通过SLOWLOG RESET命令重设大小
 redis延时监控系统在运行时会采样一些操作,以便收集可能导致延时的数据根源。
 通过 LATENCY命令 可以打印一些图样和获取一些报告,方便监控
 这个系统仅仅记录那个执行时间大于或等于预定时间(毫秒)的操作,
 这个预定时间是通过latency-monitor-threshold配置来指定的,
 当设置为0时,这个监控系统处于停止状态
 CONFIG SET latency-monitor-threshold <milliseconds>
 过期事件通知,如果为"" 表示禁用
 K    键空间通知,以__keyspace@<db>__为前缀  db为:0-15
 E    键事件通知,以__keysevent@<db>__为前缀  db为:0-15

 g    del , expipre , rename 等类型无关的通用命令的通知, ...  
 $    String命令  
 l    List命令  
 s    Set命令  
 h    Hash命令  
 z    有序集合命令  
 x    过期事件(每次key过期时生成)  
 e    驱逐事件(当key在内存满了被清除时生成)  
 A    g$lshzxe的别名,因此”AKE”意味着所有的事件
 如果hash中字段的数量小于hash-max-ziplist-entries参数值,Redis将对该Key的Hash Value采用特殊编码
 如果hash中各个字段的最大长度不超过hash-max-ziplist-value字节,Redis也将对该Key的Hash Value采用特殊编码方式
 优化存储结构,以便占用更少的空间,在有些情况下,可以省去9/10的空间
 取正值表示quicklist包含的数据项,取负值表示按照占用字节来限定quicklist节点ziplist的长度。
 -5:每个quicklist节点上的ziplist大小不能超过64Kb
 -4:每个quicklist节点上的ziplist大小不能超过32Kb
 -3:每个quicklist节点上的ziplist大小不能超过16Kb
 -2:每个quicklist节点上的ziplist大小不能超过8Kb (默认值)
 -1:每个quicklist节点上的ziplist大小不能超过4Kb
 list设计最容易被访问的是列表两端的数据,中间的访问频率很低,如果符合这个场景,list使用此配置项,进一步节省内存,压缩算法:LZF
 0:表示都不压缩,默认值;
 1:表示quicklist两端各有1各节点不压缩,中间的节点压缩;
 2:表示quicklist两端各有2个节点不压缩,中间的节点压缩
 3:表示quicklist两端各有3个节点不压缩,中间的节点压缩
 依次类推
 当set集合内的数据符合以下条件时,会使用intset编码:
 1. 当集合内所有数据都是字符对象
 2. 都是基数为10的整数,范围为64位有符号整数
 有序的sets在满足以上条件时,也采用特殊的编码以节省内存空间,ziplist编码
 键值对数量小于:zset-max-ziplist-entries
 键值对的键和值的字符串长度的字节数都小于:zset-max-ziplist-value 
 value大小小于hll-sparse-max-bytes使用稀疏数据结构,大于hll-sparse-max-bytes 使用稠密的数据结构
 建议值为:3000,如果对cpu要求不高,对空间要求较高,建议设置到10000左右
 stream-node-max-bytes 单位Byte,默认值为4096,每个宏节点占用的内存容量上限为4096Bytes。0:表示无限制
 stream-node-max-entries 每个宏节点存储的stream条目,0:表示无限制,如果一个宏节点中存储的stream条目数达到上限时,新添加的条目将储存到新的宏节点中
 stream是redis5.0版本新增的数据类型。是一些由基数树(Radix tree)连接在一起的节点经过delta压缩后构成的。
 是否重新设置hash表,设置成yes:每100毫秒用1毫秒cpu事件来对redis的hash表重新hash,可降低内存的使用,当使用场景有较为严格的实时性需求,不能接受redis时不时的对请求有2毫秒的延迟的话,把这个配置项设置为:no。
 通过设置client-output-buffer-limit 将待接受数据超过缓冲区大小的客户端断开
 客户端的设置有三类:
 normal:常规的客户端,包括MONITOR
 replica:replica客户端,也就是集群的replica(不是连接replica的客户端,是指主从复制)
 pubsub:订阅至少一个个pubsub channel或者pattern的客户端

 语法 client-output-buffer-limit <class> <hard limit> <soft limit> <soft seconds>
 如果客户端输出缓冲区大小达到了“hard limit" 服务器立即断开连接
 如果客户端输出缓冲区大小达到了“soft limit”,且持续时间达到了“soft seconds”,服务器理解断开连接

 默认情况下普通的客户端不限制
 可以通过设置为:0 禁止掉
 每个client都有一个query buffer,用于保存客户端的发送命令,redis server从query buffer获取命令并执行
 批量请求的大小限制
 在空闲时,redis使用cpu来执行后台任务的一个参数,值越大,消耗的cpu就会越高,范围:1-500,但超过100不建议。
 可以执行的后台任务例如:关闭超时的客户端,主动清理过期的key
 支持动态调整hz的值,在5.0或以上版本中新增支持
 当一个子节点重写aof文件时,如果启用此选项,则文件每生成32M数据进行同步
 redis 保存RDB文件的规则,5.0支持此选项,降低save的影响,启用此选项,会在每生成32M数据同步一次磁盘
 lfu算法的两个参数,具体可参见redis的lfu算法
 启用碎片整理功能,此功能属于实验阶段,默认不启用
 浪费的碎片空间达到active-defrag-ignore-bytes时,开始碎片整理
 启动活动碎片整理的最小碎片百分比
  # 内存碎片超过100%,尽最大努力整理
  # 整理碎片占用资源最小百分比
  # 整理碎片占用资源最大百分比
 # 将从主字典扫描处理的 set/hash/zset/list 字段的最大数目

样例配置文件

 # 启动reids时,如果要跟配置文件,必须把配置文件作为第一个参数
 # ./redis-server /path/to/redis.conf

 # 设定内存的格式如下:
 # 1k => 1000 bytes
 # 1kb => 1024 bytes
 # 1m => 1000000 bytes
 # 1mb => 1024*1024 bytes
 # 1g => 1000000000 bytes
 # 1gb => 1024*1024*1024 bytes
 #
 # 单位不区分大小写: 1GB 1Gb 1gB,表示同一个意思

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

 include /cloud/soft/redis-common.conf
 include /cloud/soft/redis-dev.conf

 ################################## MODULES #####################################

 # Load modules at startup. If the server is not able to load modules
 # it will abort. It is possible to use multiple loadmodule directives.
 #
 # loadmodule /path/to/my_module.so
 # loadmodule /path/to/other_module.so

 ################################## NETWORK #####################################

 bind 192.168.106.128
 protected-mode yes
 port 6379
 tcp-backlog 128
 timeout 0
 tcp-keepalive 300

 ################################# GENERAL #####################################

 daemonize no
 supervised no
 pidfile /var/run/redis_6379.pid
 loglevel notice
 logfile ""
 databases 16
 always-show-logo yes

 ################################ SNAPSHOTTING  ################################

 save 900 1
 save 300 10
 save 60 10000

 stop-writes-on-bgsave-error yes
 rdbcompression yes
 rdbchecksum yes
 dbfilename dump.rdb
 dir ./

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

 # repl-timeout 60
 # repl-disable-tcp-nodelay no
 # repl-backlog-size 1mb
 # repl-backlog-ttl 3600
 replica-priority 100
 # min-replicas-to-write 3
 # min-replicas-max-lag 10
 # replica-announce-ip 5.5.5.5
 # replica-announce-port 1234

 ################################## SECURITY ###################################
 # requirepass foobared
 # rename-command CONFIG ""

 ################################### CLIENTS ####################################
  maxclients 10000

 ############################## MEMORY MANAGEMENT ################################

 # maxmemory <bytes>
 # maxmemory-policy noeviction
 # maxmemory-samples 5
 # replica-ignore-maxmemory yes

 ############################# LAZY FREEING ####################################

 lazyfree-lazy-eviction no
 lazyfree-lazy-expire no
 lazyfree-lazy-server-del no
 replica-lazy-flush no

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

 appendonly no
 appendfilename "appendonly.aof"
 appendfsync everysec
 # appendfsync no
 no-appendfsync-on-rewrite no
 auto-aof-rewrite-percentage 100
 auto-aof-rewrite-min-size 64mb
 aof-load-truncated yes
 aof-use-rdb-preamble yes

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

 lua-time-limit 5000

 ################################ REDIS CLUSTER  ###############################

 # cluster-enabled yes
 # cluster-config-file nodes-6379.conf
 # cluster-node-timeout 15000
 # cluster-replica-validity-factor 10
 # cluster-migration-barrier 1
 # cluster-require-full-coverage yes
 # cluster-replica-no-failover no

 ########################## CLUSTER DOCKER/NAT support  ########################


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

 slowlog-log-slower-than 10000
 slowlog-max-len 128

 ################################ LATENCY MONITOR ##############################

 latency-monitor-threshold 0

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

 notify-keyspace-events ""

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

 hash-max-ziplist-entries 512
 hash-max-ziplist-value 64

 list-max-ziplist-size -2
 list-compress-depth 0

 set-max-intset-entries 512
 zset-max-ziplist-entries 128
 zset-max-ziplist-value 64

 hll-sparse-max-bytes 3000

 stream-node-max-bytes 4096
 stream-node-max-entries 100

 activerehashing yes

 client-output-buffer-limit normal 0 0 0
 client-output-buffer-limit replica 256mb 64mb 60
 client-output-buffer-limit pubsub 32mb 8mb 60

 # client-query-buffer-limit 1gb
 # proto-max-bulk-len 512mb

 hz 10
 dynamic-hz yes
 aof-rewrite-incremental-fsync yes
 rdb-save-incremental-fsync yes

 # lfu-log-factor 10
 # lfu-decay-time 1

 ########################### ACTIVE DEFRAGMENTATION #######################

 # activedefrag yes
 # active-defrag-ignore-bytes 100mb
 # active-defrag-threshold-lower 10
 # active-defrag-threshold-upper 100
 # active-defrag-cycle-min 5
 # active-defrag-cycle-max 75
 # active-defrag-max-scan-fields 1000

结语

【回首页】