首页 » PHP教程 » phpinisetmemory技巧_redis设备文件笔记

phpinisetmemory技巧_redis设备文件笔记

访客 2024-11-22 0

扫一扫用手机浏览

文章目录 [+]

1.根本参数配置

# 是否在后台实行,yes:后台运行;no:不是后台运行(老版本默认)daemonize yes # 是否开启保护模式(默认开启)# 假如配置里没有指定bind和密码。
开启该参数后,redis只会本地进行访问,谢绝外部访问。
假如开启了密码 和bind,可以开启。
否 则最好关闭,设置为no。
protected-mode yes# redis的进程文件pidfile /var/run/redis/redis-server.pid# redis监听的端口号port 6379# 此参数确定了TCP连接中已完成行列步队的长度(默认511)tcp-backlog 511 # 指定redis只吸收指定IP地址的要求# 如需处理所有要求(远程访问) bind 0.0.0.0bind 127.0.0.1 # 配置unix socket来让redis支持监听本地连接。
unixsocket /var/run/redis/redis.sock# 配置unix socket利用文件的权限unixsocketperm 700 # 此参数为设置客户端空闲超过timeout,做事端会断开连接,为0则做事端不会主动断开连接,不能小于0。
timeout 0 # tcp keepalive参数。
如果设置不为0,就利用配置tcp的SO_KEEPALIVE值,利用keepalive有两个好处:检测挂掉的对端。
降落中间设备出问题而导致网络看似连接却已经与对端端口的问题。
在Linux内核中,设置了keepalive,redis会定时给对端发送ack。
检测到对端关闭须要两倍的设置值。
tcp-keepalive 0 # 指定了做事端日志的级别# debug(适宜开拓、测试环境)# verbose(较少于debug级别 适宜开拓、测试环境)# notice(适宜生产环境)# warn(只有非常主要的信息)loglevel notice # 指定了记录日志的文件。
空字符串的话,日志会打印到标准输出设备。
后台运行的redis标准输出是/dev/null。
logfile /var/log/redis/redis-server.log # 是否打开记录syslog功能# syslog-enabled no # syslog的标识符# syslog-ident redis # 日志的来源、设备# syslog-facility local0 # 数据库的数量(默认16)databases 16

2.持久化配置

phpinisetmemory技巧_redis设备文件笔记

# 注释掉\"大众save\"大众这一行配置项就可以让保存数据库功能失落效# 设置redis进行数据库镜像的频率。
# 900秒(15分钟)内至少1个key值改变(则进行数据库保存--持久化) # 300秒(5分钟)内至少10个key值改变(则进行数据库保存--持久化) # 60秒(1分钟)内至少10000个key值改变(则进行数据库保存--持久化)save 900 1save 300 10save 60 10000# 当rdb持久化涌现缺点后,是否依然进行连续进行事情,# yes:不能进行事情,# no:可以连续进行事情,# 可以通过info中的rdb_last_bgsave_status理解RDB持久化是否有缺点stop-writes-on-bgsave-error yes# 利用压缩rdb文件# yes:压缩,但是须要一些cpu的花费# no:不压缩,须要更多的磁盘空间rdbcompression yes# 是否校验rdb文件rdbchecksum yes# rdb文件的名称dbfilename dump.rdb# 数据目录,数据库的写入会在这个目录。
rdb、aof文件也会写在这个目录dir /var/lib/redis# 默认redis利用的是rdb办法持久化,这种办法在许多运用中已经足够用了。
但是redis如果中途宕机,会导致可能有几分钟的数据丢失,根据save来策略进行持久化,Append Only File是另一种持久化办法,可以供应更好的持久化特性。
Redis会把每次写入的数据在吸收后都写入 appendonly.aof 文件,每次启动时Redis都会先把这个文件的数据读入内存里,先忽略RDB文件。
appendonly no # aof文件名appendfilename \公众appendonly.aof\"大众 # aof持久化策略的配置# no表示不实行fsync,由操作系统担保数据同步到磁盘,速率最快。
# always表示每次写入都实行fsync,以担保数据同步到磁盘。
# everysec表示每秒实行一次fsync,可能会导致丢失这1s数据。
appendfsync everysec # 在aof重写或者写入rdb文件的时候,会实行大量IO,此时对付everysec和always的aof模式来说,实行fsync会造成壅塞过永劫光,no-appendfsync-on-rewrite字段设置为默认设置为no。
如果对延迟哀求很高的运用,这个字段可以设置为yes,否则还是设置为no,这样对持久化特性来说这是更安全的选择。
设置为yes表示rewrite期间对新写操作不fsync,暂时存在内存中,等rewrite完成后再写入,默认为no,建议yes。
Linux的默认fsync策略是30秒。
可能丢失30秒数据。
no-appendfsync-on-rewrite no # aof自动重写配置。
当目前aof文件大小超过上一次重写的aof文件大小的百分之多少进行重写,即当aof文件增长到一定大小的时候Redis能够调用bgrewriteaof对日志文件进行重写。
当前AOF文件大小是上次日志重写得到AOF文件大小的二倍(设置为100)时,自动启动新的日志重写过程。
auto-aof-rewrite-percentage 100# 设置许可重写的最小aof文件大小,避免了达到约定百分比但尺寸仍旧很小的情形还要重写auto-aof-rewrite-min-size 64mb # aof文件可能在尾部是不完全的,当redis启动的时候,aof文件的数据被载入内存。
重启可能发生在redis所在的主机操作系统宕机后,尤其在ext4文件系统没有加上data=ordered选项(redis宕机或者非常终止不会造成尾部不完全征象。
)涌现这种征象,可以选择让redis退出,或者导入尽可能多的数据。
如果选择的是yes,当截断的aof文件被导入的时候,会自动发布一个log给客户端然后load。
如果是no,用户必须手动redis-check-aof修复AOF文件才可以。
aof-load-truncated yes

3.主从配置

phpinisetmemory技巧_redis设备文件笔记
(图片来自网络侵删)

# 复制选项,slave复制对应的masterslaveof <masterip> <masterport> # 如果master设置了requirepass,那么slave要连上master,须要有master的密码才行。
masterauth便是用来配置master的密码,这样可以在连上master后进行认证masterauth <master-password> # 当slave同master失落去连接或者复制正在进行,slave的运行办法# 1.如果slave-serve-stale-data设置为yes(默认设置),slave会连续相应客户真个要求。
# 2.如果slave-serve-stale-data设置为no,撤除INFO和SLAVOF命令之外的任何要求都会返回一个缺点”SYNC with master in progress”。
slave-serve-stale-data yes # slave做事器读写配置# 默认情形下是只读的(yes)# 修正成no,可读可写(不建议)slave-read-only yes # 是否利用socket办法复制数据。
目前redis复制供应两种办法,disk和socket。
如果新的slave连上来或者重连的slave无法部分同步,就会实行全量同步,master会天生rdb文件。
有2种办法:disk办法是master创建一个新的进程把rdb文件保存到磁盘,再把磁盘上的rdb文件通报给slave。
socket是master创建一个新的进程,直接把rdb文件以socket的办法发给slave。
disk办法的时候,当一个rdb保存的过程中,多个slave都能共享这个rdb文件。
socket的办法就的一个个slave顺序复制。
在磁盘速率缓慢,网速快的情形下推举用socket办法。
repl-diskless-sync no # diskless复制的延迟韶光,防止设置为0。
一旦复制开始,节点不会再吸收新slave的复制要求直到下一个rdb传输。
以是最好等待一段韶光,等更多的slave连上来。
repl-diskless-sync-delay 5 # slave根据指定的韶光间隔向做事器发送ping要求# 韶光间隔可以通过 repl_ping_slave_period 来设置,默认10秒。
repl-ping-slave-period 10 # 复制连接超时时间。
master和slave都有超时时间的设置。
master检测到slave上次发送的韶光超过repl-timeout,即认为slave离线,打消该slave信息。
slave检测到上次和master交互的韶光超过repl-timeout,则认为master离线。
须要把稳的是repl-timeout须要设置一个比repl-ping-slave-period更大的值,不然会常常检测到超时。
repl-timeout 60 # 是否禁止复制tcp链接的tcp nodelay参数,可通报yes或者no。
默认是no,即利用tcp nodelay。
如果master设置了yes来禁止tcp nodelay设置,在把数据复制给slave的时候,会减少包的数量和更小的网络带宽。
但是这也可能带来数据的延迟。
默认我们推举更小的延迟,但是在数据量传输很大的场景下,建议选择yes。
repl-disable-tcp-nodelay no # 复制缓冲区大小,这是一个环形复制缓冲区,用来保存最新复制的命令。
这样在slave离线的时候,不须要完备复制master的数据,如果可以实行部分同步,只须要把缓冲区的部分数据复制给slave,就能规复正常复制状态。
缓冲区的大小越大,slave离线的韶光可以更长,复制缓冲区只有在有slave连接的时候才分配内存。
没有slave的一段韶光,内存会被开释出来,默认1m。
repl-backlog-size 5mb # master没有slave一段韶光会开释复制缓冲区的内存,repl-backlog-ttl用来设置该韶光长度。
单位为秒。
repl-backlog-ttl 3600 # 当master不可用,Sentinel会根据slave的优先级选举一个master。
最低的优先级的slave,当选master。
而配置成0,永久不会当选举。
slave-priority 100 # redis供应了可以让master停滞写入的办法,如果配置了min-slaves-to-write,康健的slave的个数小于N,mater就禁止写入。
master最少得有多少个康健的slave存活才能实行写命令。
这个配置虽然不能担保N个slave都一定能吸收到master的写操作,但是能避免没有足够康健的slave的时候,master不能写入来避免数据丢失。
设置为0是关闭该功能。
# min-slaves-to-write 3 # 延迟小于min-slaves-max-lag秒的slave才认为是康健的slave。
min-slaves-max-lag 10 # 设置1或另一个设置为0禁用这个特性。
min-slaves-max-lag is set to 10.

4.安全配置

# 配置redis连接密码(默认未启用,建议启用)requirepass foobared # 把危险的命令给修正成其他名称。
比如CONFIG命令可以重命名为一个很难被猜到的命令,这样外部连接不能利用,而做事器内部连接工具还能连续利用。
rename-command CONFIG cmd # 设置成一个空的值,可以禁止一个命令rename-command CONFIG \公众\公众

5.连接配置

# 设置能连上redis的最大客户端连接数量。
默认是10000个客户端连接。
由于redis不区分连接是客户端连接还是内部打开文件或者和slave连接等,以是maxclients最小建议设置到32。
如果超过了maxclients,redis会给新的连接发送’max number of clients reached’,并关闭连接。
maxclients 10000 # redis配置的最大内存容量。
当内存满了,须要合营maxmemory-policy策略进行处理。
把稳slave的输出缓冲区是不打算在maxmemory内的。
所以为了防止主机内存利用完,建议设置的maxmemory须要更小一些。
maxmemory <bytes> # 内存容量超过maxmemory后的处理策略。
# volatile-lru:利用LRU算法移除设置过过期韶光的key。
# volatile-random:随机移除设置过过期韶光的key。
# volatile-ttl:移除即将过期的key,根据最近过期韶光来删除(辅以TTL)# allkeys-lru:利用LRU算法移除任何key。
# allkeys-random:随机移除任何key。
# noeviction:不移除任何key,只是返回一个写缺点。
# 上面的这些驱逐策略,如果redis没有得当的key驱逐,对付写命令,还是会返回缺点。
redis将不再吸收写要求,只吸收get要求。
maxmemory-policy noeviction # lru检测的样本数。
利用lru或者ttl淘汰算法,从须要淘汰的列表中随机选择sample个key,选出闲置韶光最长的key移除。
maxmemory-samples 5 # 如果达到最大韶光限定(毫秒),redis会记个log,然后返回error。
当一个脚本超过了最大时限。
只有SCRIPT KILL和SHUTDOWN NOSAVE可以用。
第一个可以杀没有调write命令的东西。
假如已经调用了write,只能用第二个命令杀。
lua-time-limit 5000

6.集群配置

# 集群开关,默认是不开启集群模式。
cluster-enabled yes # 集群配置文件的名称,每个节点都有一个集群干系的配置文件,持久化保存集群的信息。
这个文件并不须要手动配置,这个配置文件有Redis天生并更新,每个Redis集群节点须要一个单独的配置文件,请确保与实例运行的系统中配置文件名称不冲突# cluster-config-file nodes-a.conf # 节点互连超时的阀值。
集群节点超时毫秒数# cluster-node-timeout 15000 # 在进行故障转移的时候,全部slave都会要求申请为master,但是有些slave可能与master断开连接一段韶光了,导致数据过于迂腐,这样的slave不应该被提升为master。
该参数便是用来判断slave节点与master断线的韶光是否过长。
判断方法是:# 比较slave断开连接的韶光和(node-timeout slave-validity-factor) +repl-ping-slave-period# 如果节点超时时间为三十秒, 并且slave-validity-factor为10,假设默认的repl-ping-slave-period是10秒,即如果超过310秒slave将不会考试测验进行故障转移 cluster-slave-validity-factor 10 # master的slave数量大于该值,slave才能迁移到其他伶仃master上,如这个参数若被设为2,那么只有当一个主节点拥有2 个可事情的从节点时,它的一个从节点会考试测验迁移。
cluster-migration-barrier 1 # 默认情形下,集群全部的slot有节点卖力,集群状态才为ok,才能供应做事。
设置为no,可以在slot没有全部分配的时候供应做事。
不建议打开该配置,这样会造身分区的时候,小分区的master一贯在接管写要求,而造成很永劫光数据不一致。
cluster-require-full-coverage yes

7.慢查询日志

# slog log是用来记录redis运行中实行比较慢的命令耗时。
当命令的实行超过了指定时间,就记录在slow log中,slog log保存在内存中,以是没有IO操作。
# 实行韶光比slowlog-log-slower-than大的要求记录到slowlog里面,单位是微秒,以是1000000便是1秒。
把稳,负数韶光会禁用慢查询日志,而0则会逼迫记录所有命令。
slowlog-log-slower-than 10000 # 慢查询日志长度。
当一个新的命令被写进日志的时候,最老的那个记录会被删掉。
这个长度没有限定。
只要有足够的内存就行。
你可以通过 SLOWLOG RESET 来开释内存。
slowlog-max-len 128# 延迟监控功能是用来监控redis中实行比较缓慢的一些操作,用LATENCY打印redis实例在跑命令时的耗时图表。
只记录大于即是下边设置的值的操作。
0的话,便是关闭监视。
默认延迟监控功能是关闭的,如果你须要打开,也可以通过CONFIG SET命令动态设置latency-monitor-threshold 0

8.事宜关照配置

# 键空间关照使得客户端可以通过订阅频道或模式,来吸收那些以某种办法改动了 Redis 数据集的事宜。
由于开启键空间关照功能须要花费一些 CPU ,以是在默认配置下,该功能处于关闭状态。
# notify-keyspace-events的参数可以是以下字符的任意组合,它指定了做事器该发送哪些类型的关照:##K 键空间关照,所有关照以 __keyspace@__ 为前缀##E 键事宜关照,所有关照以 __keyevent@__ 为前缀##g DEL 、 EXPIRE 、 RENAME 等类型无关的通用命令的关照##$ 字符串命令的关照##l 列表命令的关照##s 凑集命令的关照##h 哈希命令的关照##z 有序凑集命令的关照##x 过期事宜:每当有过期键被删除时发送##e 驱逐(evict)事宜:每当有键由于 maxmemory 政策而被删除时发送##A 参数 g$lshzxe 的别名# 输入的参数中至少要有一个 K 或者 E,否则的话,不管别的的参数是什么,都不会有任何 关照被分发。
notify-keyspace-events \"大众\公众

9.高等配置

# 数据量小于即是hash-max-ziplist-entries的用ziplist,大于hash-max-ziplist-entries用hashhash-max-ziplist-entries 512 # value大小小于即是hash-max-ziplist-value的用ziplist,大于hash-max-ziplist-value用hashhash-max-ziplist-value 64 # -5:最大大小:64 KB<--不建议用于正常事情负载# -4:最大大小:32 KB<--不推举# -3:最大大小:16 KB<--可能不推举# -2:最大大小:8kb<--良好# -1:最大大小:4kb<--良好list-max-ziplist-size -2 # 0:禁用所有列表压缩# 1:深度1表示“在列表中的1个节点之后才开始压缩,# 从头部或尾部# 以是:【head】->node->node->…->node->【tail】# [头部],[尾部]将始终未压缩;内部节点将压缩。
# 2:[头部]->[下一步]->节点->节点->…->节点->[上一步]->[尾部]# 2这里的意思是:没关系缩头部或头部->下一个或尾部->上一个或尾部,# 但是压缩它们之间的所有节点。
# 3:[头部]->[下一步]->[下一步]->节点->节点->…->节点->[上一步]->[上一步]->[尾部]list-compress-depth 0 # 数据量小于即是set-max-intset-entries用iniset,大于set-max-intset-entries用setset-max-intset-entries 512 # 数据量小于即是zset-max-ziplist-entries用ziplist,大于zset-max-ziplist-entries用zsetzset-max-ziplist-entries 128 # value大小小于即是zset-max-ziplist-value用ziplist,大于zset-max-ziplist-value用zsetzset-max-ziplist-value 64 # value大小小于即是hll-sparse-max-bytes利用稀疏数据构造(sparse),大于hll-sparse-max-bytes利用稠密的数据构造(dense)。
一个比16000大的value是险些没用的,建议的value大概为3000。
如果对CPU哀求不高,对空间哀求较高的,建议设置到10000旁边hll-sparse-max-bytes 3000 # 宏不雅观节点的最大流/项目的大小。
在流数据构造是一个基数# 树节点编码在这项大的多。
利用这个配置它是如何可能#大节点配置是单字节和# 最大项目数,这可能包含了在切换到新节点的时候# appending新的流条款。
如果任何以下设置来设置# ignored极限是零,例如,操作系统,它有可能只是一集通过设置限定最大#记录到最大字节0和最大输入到所需的值stream-node-max-bytes 4096stream-node-max-entries 100 # Redis将在每100毫秒时利用1毫秒的CPU韶光来对redis的hash表进行重新hash,可以降落内存的利用。
当你的利用场景中,有非常严格的实时性须要,不能够接管Redis时时时的对要求有2毫秒的延迟的话,把这项配置为no。
如果没有这么严格的实时性哀求,可以设置为yes,以便能够尽可能快的开释内存activerehashing yes # 对客户端输出缓冲进行限定可以强制那些不从做事器读取数据的客户端断开连接,用来逼迫关闭传输缓慢的客户端。
# 对付normal client,第一个0表示取消hardlimit,第二个0和第三个0表示取消soft limit,normal client默认取消限定,由于如果没有寻问,他们是不会吸收数据client-output-buffer-limit normal 0 0 0 # 对付slave client和MONITERclient,如果client-output-buffer一旦超过256mb,又或者超过64mb持续60秒,那么做事器就会立即断开客户端连接client-output-buffer-limit replica 256mb 64mb 60 # 对付pubsub client,如果client-output-buffer一旦超过32mb,又或者超过8mb持续60秒,那么做事器就会立即断开客户端连接client-output-buffer-limit pubsub 32mb 8mb 60 # 这是客户端查询的缓存极限值大小client-query-buffer-limit 1gb # 在redis协议中,批量要求,即表示单个字符串,常日限定为512MB。
但是您可以变动此限定。
# proto-max-bulk-len 512mb # redis实行任务的频率为1s除以hzhz 10 # 当启用动态赫兹时,实际配置的赫兹将用作作为基线,但实际配置的赫兹值的倍数# 在连接更多客户端后根据须要利用。
这样一个闲置的实例将占用很少的CPU韶光,而繁忙的实例将反应更灵敏dynamic-hz yes # 在aof重写的时候,如果打开了aof-rewrite-incremental-fsync开关,系统会每32MB实行一次fsync。
这对付把文件写入磁盘是有帮助的,可以避免过大的延迟峰值aof-rewrite-incremental-fsync yes # 在rdb保存的时候,如果打开了rdb-save-incremental-fsync开关,系统会每32MB实行一次fsync。
这对付把文件写入磁盘是有帮助的,可以避免过大的延迟峰值rdb-save-incremental-fsync yes

10.碎片整理

# 已启用活动碎片整理# activedefrag yes # 启动活动碎片整理的最小碎片摧残浪费蹂躏量# active-defrag-ignore-bytes 100mb # 启动活动碎片整理的最小碎片百分比# active-defrag-threshold-lower 10 # 我们利用最大努力的最大碎片百分比# active-defrag-threshold-upper 100 # 以CPU百分比表示的碎片整理的最小事情量# active-defrag-cycle-min 5 # 在CPU的百分比最大的努力和碎片整理# active-defrag-cycle-max 75 # 将从中处理的set/hash/zset/list字段的最大数目# 主词典扫描# active-defrag-max-scan-fields 1000

标签:

相关文章

介绍白点控制之路,从原理到方法

白点,作为生活中常见的现象,无处不在。对于如何控制白点,许多人却感到困惑。本文将从原理出发,探讨白点的控制方法,并结合实际案例,为...

PHP教程 2025-01-03 阅读1 评论0

介绍直播王者,如何开启你的电竞直播之旅

随着电竞产业的蓬勃发展,越来越多的年轻人投身于电竞直播行业。王者荣耀作为一款备受欢迎的MOBA手游,吸引了大量玩家和观众。如何开启...

PHP教程 2025-01-03 阅读1 评论0