美文网首页
利用 Medis 优化 redis 数据存储

利用 Medis 优化 redis 数据存储

作者: 程序员阿奇 | 来源:发表于2020-06-12 11:36 被阅读0次
## timeout

客户端超过多少秒空闲后关闭(0是禁止此功能),如果小于0启动失败

## tcp-keepalive

用于检测tcp连接是否还存活,建议设置300(单位是秒),如果小于0启动失败

## protected-mode

当设置为yes后,如果没有通过bind设置address以及没有设置password,那么redis只接受来loopback address 127.0.0.1和::1的连接和unix domain socket

## port

制定监听端口(如果设置0,redis不会在tcp socket监听,如果设置小于0或者大于65535启动失败)

## tcp-backlog

tcp监听队列长度,如果大于/proc/sys/net/core/somaxconn,会取/proc/sys/net/core/somaxconn的值,所以调高此值的时候应该关注/proc/sys/net/ipv4/tcp_max_syn_backlog和/proc/sys/net/core/somaxconn的值
如果小于0启动失败

## bind

绑定网络接口,默认接受来自所有网络接口的连接
可以绑定多个,最多同时绑定16个

## unixsocket

制定用于监听l连接的unix socket的路径,没有默认值

## unixsocketperm

unixsocket path的权限,不能大于777

## save

1 save 900 1 格式
在900秒内有1个key改变了则执行save
2 save "" 格式
之前的save 配置无效

## dir

数据库存储的目录,必须是有效并且存在的目录

## loglevel

日志级别,取值范围debug,verbose,notice,warning

## logfile

日志文件名

## always-show-logo

总是显示logo

## syslog-enabled

启用写入日志到system logger

## syslog-ident

syslog的identity

## syslog-facility

syslog的facility,取值范围,user,local0-local7

## databases

database数量,如果小于1则启动失败

## include

加载其他配置文件

## maxclients

同时最大的连接数,默认10000,如果小于1启动失败

## maxmemory

最大使用内存,超过则触发内存策略

## maxmemory-policy

取值范围
1 volatile-lru 在设置了过期的key中通过lfu算法查找key淘汰
2 volatile-lfu 在所有key中通过lru算法查找key淘汰
3 volatile-random 在设置了过期的key中随机查找key淘汰
4 volatile-ttl 最近要超时的key淘汰
5 allkeys-lru 所有key通过lru算法查找key淘汰
6 allkeys-lfu 所有key通过lfu算法查找key淘汰
7 allkeys-random 所有key随机查找key淘汰
8 noeviction 不淘汰,对于写操作返回错误

## maxmemory-samples

lru,lfu会对这个数量的key进行检查,设置过高会消耗cpu,如果小于0则启动失败

## proto-max-bulk-len

批量请求的大小限制

## client-query-buffer-limit

客户端查询缓存大小限制,如果multi/exec 大可以考虑调节

## lfu-log-factor

小于0则启动失败

## lfu-decay-time

小于0则启动失败

## slaveof/replicaof

配置主机复制的主ip和端口
replicaof ip port

## repl-ping-slave-period/repl-ping-replica-period

从发给主的心跳周期,如果小于0则启动失败

## repl-timeout

多少秒没收到心跳的响应认为超时,最好设置的比 repl-ping-slave-period/repl-ping-replica-period大
如果小于0则启动失败

## repl-disable-tcp-nodelay

是否禁用tcp-nodelay,如果设置yes,会导致主从同步有40ms滞后(linux默认),如果no,则主从同步更及时

## repl-diskless-sync

以往主从复制是生成rdb文件,然后传输给从节点,配置成yes后可以不进行写磁盘直接进行复制,适用于磁盘慢网络带宽大的场景

## repl-diskless-sync-delay

让主节点等待更多从节点来同时复制,设置过小,复制时来的从节点必须等待下一次rdb transfer
单位秒,如果小于0则启动失败

## repl-backlog-size

复制积压大小,解决复制过程中从节点重连后不需要full sync,这个值越大,那么从节点断开到重连的时间就可以更长

## repl-backlog-ttl

复制积压的生命期,超过多长时间从节点还没重连,则释放内存

## masterauth

主从复制的认证

## slave-serve-stale-data/replica-serve-stale-data

默认yes
当从节点和主节点的连接断开或者复制正在进行中
设置yes,那么继续提供服务
设置no,那么返回sync with master in progress

## slave-read-only/replica-read-only

配置从节点是否只读,但是配置的修改还是可以的

## slave-ignore-maxmemory/replica-ignore-maxmemory

从节点是否忽略maxmemory配置,默认yes

## rdbcompression

压缩string 对象,但是会消耗cpu,可以设置为no

## rdbchecksum

是否检查rdbchecksum,默认yes,可以设置no

## activerehashing

默认每1秒10次消耗1ms来做rehashing来释放内存,会增加请求的延时,如果你对延时敏感,则设置no,默认yes

## lazyfree-lazy-eviction

默认no,那么redis是同步释放内存,也就是停止完成其他请求来做释放内存操作,如果遇到key复杂度很大时(0(n))的会增加请求延时
如果yes,那么则先删除dict中的key,然后把释放内存的任务提交给后台线程做

## lazyfree-lazy-expire

默认no,那么redis是同步删除过期key,也就是停止完成其他请求来做删除过期key,如果遇到key复杂度很大时(0(n))的会增加请求延时
如果yes,把删除key的任务提交给后台线程做

## lazyfree_lazy_server-del

默认no,那么redis是同步删除key,也就是停止完成其他请求来做删除key,如果遇到key复杂度很大时(0(n))的会增加请求延时
如果yes,那么则先删除dict中的key,然后把删除key的任务提交给后台线程做(如果key很小则暂时不删除,只是减少了引用)

## slave-lazy-flush/replica-lazy-flush

默认no,那么redis是同步清空数据库,也就是停止完成其他请求来做清空数据库,如果遇到数据库很大会增加请求延时
如果yes,那么则新建dict等数据结构,然后把清空数据库提交给后台线程做

## activedefrag

如果你遇到内存碎片的问题,那么设置为yes,默认no

## daemonize

是否以守护进程运行,默认no

## hash-max-ziplist-entries

hash中的项数量小于或等于这个值使用ziplist
超过这个值使用hash

## dynamic-hz

设置yes,则根据客户端连接数可以自动调节hz

## hz

调节可以让redis再空闲时间更多的做一些任务(如关闭超时客户端等)

## appendonly

是否开启aof

## appendfilename

aof文件名

## no-appendfsync-on-rewrite

设置yes后,如果有保存的进程在执行,则不执行aof的appendfsync策略的fsync

## appendfsync

执行fynsc的策略
取值范围:
1 everysec 每秒执行sync
2 always 等到下次执行beforeslee时执行fsync
3 no 不执行fsync
设置always往往比较影响性能,但是数据丢失的风险最低
一般推荐设置everysec

## auto-aof-rewrite-percentage

相对于上次aof文件大小的增长百分比如果超过这个值,则重写aof

## auto-aof-rewrite-min-size

自动重写aof文件的最小大小,比 auto-aof-rewrite-percentage优先级高

## aof-rewrite-incremental-fsync

设置yes,则每32mb 执行fsync一次(增量式,避免一次性大写入导致的延时)
设置no,则一次性fsync

## rdb-save-incremental-fsync

设置yes,则每32mb 执行fsync一次(增量式,避免一次性大写入导致的延时)
设置no,则一次性fsync

## aof-load-truncated

加入aof文件被截断了
1 设置yes,redis可以启动并且显示日志告知这个信息
2 设置no,redis启动失败,显示错误

## aof-use-rdb-preamble

aof前部分用rdb,后面保存时缓存的命令还是用aof格式
优点:保存和恢复更快
设置yes开启

## requirepass

用于在客户端执行命令前,要求执行 auth password

## pidfile

存储redis pid的文件,redis启动后创建,退出后删除

## dbfilename

rdb文件名

## active_defrag_threshold_upper

开启内存碎片整理的最小内存碎片百分比
小于0或者大于1000则启动失败

## active_defrag_threshold_upper

内存碎片百分比超过这个值,则使用active-defrag-cycle-max
小于0或者大于1000则启动失败

## active-defrag-ignore-bytes

开启内存碎片整理的最小内存碎片字节数
如果小于等于0则启动失败

## active-defrag-cycle-max

最小努力cpu百分比,用来做内存碎片整理
如果小于1或者大于99则启动失败

## active-defrag-cycle-min

最大努力cpu百分比,用来做内存碎片整理
如果小于1或者大于99则启动失败

## active-defrag-max-scan-fields

用于主动的内存碎片整理的set/hash/zset/list 中的最大数量的项
如果小于1,启动失败

## hash-max-ziplist-value

hash 中的项大小小于或等于这个值使用ziplist
超过这个值使用hash

## stream-node-max-bytes

stream 的最大内存开销字节数

## stream-node-max-entries

stream 的最大项数量

## list-max-ziplist-size
取正值时表示quicklist节点ziplist包含的数据项。 
取负值表示按照占用字节来限定quicklist节点ziplist的长度。
  1.  -5: 每个quicklist节点上的ziplist大小不能超过64 Kb。
  2.  -4: 每个quicklist节点上的ziplist大小不能超过32 Kb。
  3.  -3: 每个quicklist节点上的ziplist大小不能超过16 Kb。
  4.  -2: 每个quicklist节点上的ziplist大小不能超过8 Kb。(默认值)
  5.  -1: 每个quicklist节点上的ziplist大小不能超过4 Kb。

list设计最容易被访问的是列表两端的数据,中间的访问频率很低,如果符合这个场景,list还有一个配置,可以对中间节点进行压缩(采用的LZF——一种无损压缩算法),进一步节省内存。配置如下
list-compress-depth 0  含义:
          0: 是个特殊值,表示都不压缩。这是Redis的默认值。
          1: 表示quicklist两端各有1个节点不压缩,中间的节点压缩。
          2: 表示quicklist两端各有2个节点不压缩,中间的节点压缩。
          以此类推

head->next->...->prev->tail
不压缩next,prev,以此类推
0表示都不压缩

## set-max-intset-entries

当set 的元素数量小于这个值且元素可以用int64范围的整型表示时,使用inset,节约内存
大于或者元素无法用int64范围的整型表示时用set表示

## zset-max-ziplist-entries

当sorted set 的元素数量小于这个值时,使用ziplist,节约内存
大于这个值zset表示

## zset-max-ziplist-value

当sorted set 的元素大小小于这个值时,使用ziplist,节约内存
大于这个值zser表示

## hll-sparse-max-bytes

大于这个值,hyperloglog使用稠密结构
小于等于这个值,使用稀疏结构
大于16000无意义,建议设置3000

## rename-command

重命名命令,建议重命名一些敏感的命令(如flushall,flushdb)

## cluster-enabled

开启集群模式

## cluster-config-file

集群配置文件名

## cluster-announce-ip

集群的节点的汇报ip,防止nat

## cluster-announce-port

集群的节点的汇报port,防止nat

## cluster-announce-bus-port

集群的节点的汇报bus-port,防止nat

## cluster-require-full-coverage

默认如果不是所有slot已经分配到节点,那么集群无法提供服务
设置为no,则可以提供服务

## cluster-node-timeout

认为集群节点失效状态的时间
如果小于0则启动失败

## cluster-migration-barrier

当存在孤立主节点后(没有从节点),其他从节点会迁移作为这个孤立的主节点的从节点(前提是这个从节点之前的主节点至少还有这个数额个从节点)
不建议设置为0
想禁用可以设置一个非常大的值
如果小于0则启动失败

## cluster-slave-validity-factor

如果从节点和master距离上一次通信超过 (node-timeout * replica-validity-factor) + repl-ping-replica-period时间,则没有资格失效转移为master
如果小于0则启动失败

## cluster-slave-no-failover/cluster-replica-no-failover

在主节点失效期间,从节点不允许对master失效转移
取值yes,no

## lua-time-limit

lua脚本的最大执行时间,超过这个时间后,恢复客户端的查询错误
0或者负数则无限制

## slowlog-log-slower-than

执行命令大于这个值计入慢日志
如果设置为0,则所有命令全部记录慢日志
单位毫秒

## latency-monitor-threshold

为了收集可能导致延时的数据根源,redis延时监控系统在运行时会采样一些操作
通过 LATENCY命令 可以打印一些图样和获取一些报告
这个系统仅仅记录那个执行时间大于或等于通过latency-monitor-threshold配置来指定的
当设置为0时这个监控系统关闭
单位毫秒

## slowlog-max-len

最大的慢日志条数,这个会占用内存的
可以通过slowlog reset来释放内存
可以通过slowlog len来查看当前条数

## client-output-buffer-limit

0则无限制
格式client-output-buffer-limit <class> <hard limit> <soft limit> <soft seconds>
client-output-buffer达到hard limit或者保持超过soft limit 持续sof seconds则断开连接
class 分为3种
1 normal 普通客户端包裹monitor客户端
2 replica 从节点
2 pubsub 至少pubsub一个channel或者pattern的客户端

## stop-writes-on-bgsave-error

basave错误后是否停止接受写请求

## slave-priority/replica-priority

当master不在工作后,从节点提升为master的优先级,0则不会提升为master
越小优先级越高

## slave-announce-ip/replica-announce-ip

从节点上报给master的自己ip,防止nat问题

## slave-announce-port/replica-announce-port

从节点上报给master的自己port,防止nat问题

## min-slaves-to-write

最少从节点数,不满足min-slaves-to-write个 低于min-slaves-max-lag/min-replicas-max-lag时间的从节点,master不在接受写请求
如果小于0则启动失败
默认0,也就是禁用状态

## min-slaves-max-lag/min-replicas-max-lag

最大从节点的落后时间,不满足min-slaves-to-write个 低于这个时间的从节点,master不在接受写请求
如果小于0则启动失败

## notify-keyspace-events

取值范围(可以多个一起)
K Keyspace events, published with **keyspace@<db>** prefix.
E Keyevent events, published with **keyevent@<db>** prefix.
g Generic commands (non-type specific) like DEL, EXPIRE, RENAME,
$ String commands
l List commands
s Set commands
h Hash commands
z Sorted set commands
x Expired events (events generated every time a key expires)
e Evicted events (events generated when a key is evicted for maxmemory)
A Alias for g$lshzxe , so that the "AKE" string means all the events.

## supervised

默认no
supervised no - 没有监督互动
supervised upstart - 通过将Redis置于SIGSTOP模式来启动信号
supervised systemd - signal systemd将READY = 1写入$ NOTIFY_SOCKET
supervised auto - 检测upstart或systemd方法基于 UPSTART_JOB或NOTIFY_SOCKET环境变量

## sentinel monitor

格式sentinel monitor <master-name> <ip> <redis-port> <quorum>
如sentinel monitor mymaster 127.0.0.1 6379 2
告知sentinel监控这个ip和redis-port端口的redis,当至少达到quorum数量的sentinel同意才认为他客观离线(O_DOWN)

## sentinel down-after-milliseconds

格式sentinel down-after-milliseconds <master-name> <milliseconds>
附属的从节点或者sentinel和他超过milliseconds时间没有达到,则主观离线(S_DOWN)

## sentinel failover-timeout

格式 sentinel failover-timeout <master-name> <milliseconds>
用在很多方面:
1 距离被一个给定的Sentiel对同一个master进行过failedover的上一次的时间是此设置值的2倍
2 从从节点根据sentinel当前配置复制一个错误的主节点到复制新的主节点的时间需要的时间(从sentinel检测到配置错误起计算)
3 取消一个在进行中但是还没有产生配置变化(slave of no one还没有被提升的从节点确认)的failover需要的时间
4 进行中的failover等待所有从节点 重新配置为新master的从节点的最大时间.然而 虽然在这个时间后所有从节点将被sentinel重新配置,但并不是指定的正确的parallel-syncs 过程

## sentinel parallel-syncs

格式 sentinel parallel-syncs <master-name> <numreplicas>
制定多少个从节点可以在failover期间同时配置到新的主节点.如果你用从节点服务查询,那么使用一个较低的值来避免所有的从节点都不可达,切好此时他们在和主节点同步

## sentinel notification-script

格式 sentinel notification-script <master-name> <script-path>
对任何生成的在WARNING 级别的sentinel 事件会调用这通知脚本(例如sdown,odown等)
这个脚本应该通过email,sms等其他消息系统通知系统管理员监控的redis系统有错
调用这个脚本带有2个参数,第一个是事件类型,第二个是事件描述
如果这个选项设置的话这个脚本必须存在

## sentinel client-reconfig-script

格式sentinel client-reconfig-script <master-name> <script-path>

当主节点由于failover改变,一个脚本可以执行,用于执行通知客户端配置改变了主节点在不同地址的特定应用的任务。
下面的参数将传递给这个脚本
<master-name> <role> <state> <from-ip> <from-port> <to-ip> <to-port>
state当前总是failover
role不是leader就是observer
从from-ip,from-port,to-ip,to-port 用于和旧主节点和被选举的节点(当前主节点)通信的地址
这个脚本是可以被多次调用的

## auth-pass

格式 sentinel auth-pass <master-name> <password>
设置用于和主节点以及从节点通信的密码.如果在监控redis实例中有密码的话是有用的
注意这个主节点密码同样用于从节点,所以给主节点和从节点实例设置不同的密码是不可能的
然后你可以拥有不开启认证的redis实例和需要认证的redis实例混合(只要需要密码的redis实例密码设置一样)
因为当认证关闭时,auth 命令将在redis实例中无效

## SENTINEL rename-command

如 SENTINEL rename-command mymaster CONFIG GUESSME
有时,redis服务 有些sentinel工作正常需要的命令,重命名为猜不到的字符串.通常是在提供者提供redis作为服务而且不希望客户重新配置在管理员控制台外修改配置的场景中的config,slaveof,

在这个情况,告诉sentinel使用不同的命令名字而不是常规的是可能的.

## sentinel announce-ip

格式 sentinel announce-ip <ip>
在nat环境下是有用的

## sentinel announce-port

格式sentinel announce-port <port>
在nat环境下是有用的

## sentinel deny-scripts-reconfig

格式sentinel deny-scripts-reconfig yes
默认sentinel set 在运行期是不能改变notification-script和 client-reconfig-script .
这个避免一些细小的安全问题,在这里客户端可以设置脚本为任何东西而且触发一个failover用于让这个程序执行

相关文章

网友评论

      本文标题:利用 Medis 优化 redis 数据存储

      本文链接:https://www.haomeiwen.com/subject/kvrgtktx.html