Site updated: 2022-10-17 16:04:26
This commit is contained in:
128
atom.xml
128
atom.xml
@ -22,72 +22,80 @@
|
||||
<link rel="alternate" href="https://blog.jingxiyuan.cn/2022/10/17/redis%E4%B8%BB%E4%BB%8E%E5%9F%BA%E7%A1%80%E9%85%8D%E7%BD%AE%E8%AE%B0%E5%BD%95/"/>
|
||||
<content type="html"><h4 id="主服务"><a class="anchor" href="#主服务">#</a> 主服务</h4>
|
||||
<h6 id="基础配置"><a class="anchor" href="#基础配置">#</a> 基础配置</h6>
|
||||
<p>port 6379</p>
|
||||
<p>requirepass 123456(密码,建议不设置)</p>
|
||||
<p>vm-enabled no (虚拟内存,内存够的情况下可以不使用)</p>
|
||||
<p>maxmemory 1GB(告诉 Redis 当使用了多少物理内存后就开始拒绝后续的写入)<br />
|
||||
bind 127.0.0.1 (注释掉,否则不能外部连接)</p>
|
||||
<p>rdbchecksum no(持久化数据检查)</p>
|
||||
<p>list-max-ziplist-size 1024(ziplist 的最大容量,正数为自己指定的大小。负数 - 1 到 - 5 为对应的值 4 到 64Kb)</p>
|
||||
<p>list-compress-depth 20(quicklist 的两端多少个 node 不压缩,0 为全部不压缩)</p>
|
||||
<p>sysctl vm.overcommit_memory=1 (立即生效)</p>
|
||||
<p>修改 /etc/sysctl.conf 添加 vm.overcommit_memory=1(表示内核允许分配所有的物理内存,而不管当前的内存状态如何。Redis 的 RDB 持久化实现是 folk 一个子进程,然后让子进程将内存镜像 dump 到 RDB 文件中。理论上来说是需要跟父进程一样的内存空间,但是由于 linux 很早就支持的 copy-on-write 技术,所以实际上并不需要这么多的物理内存的。)</p>
|
||||
<pre><code class="language-conf">port 6379
|
||||
requirepass 123456(密码,建议不设置)
|
||||
vm-enabled no (虚拟内存,内存够的情况下可以不使用)
|
||||
maxmemory 1GB(告诉Redis当使用了多少物理内存后就开始拒绝后续的写入)
|
||||
bind 127.0.0.1 (注释掉,否则不能外部连接)
|
||||
rdbchecksum no(持久化数据检查)
|
||||
list-max-ziplist-size 1024(ziplist的最大容量,正数为自己指定的大小。负数-1到-5为对应的值4到64Kb)
|
||||
list-compress-depth 20(quicklist的两端多少个node不压缩,0为全部不压缩)
|
||||
</code></pre>
|
||||
<pre><code class="language-bash">sysctl vm.overcommit_memory=1 (立即生效)
|
||||
修改/etc/sysctl.conf添加vm.overcommit_memory=1(表示内核允许分配所有的物理内存,而不管当前的内存状态如何。Redis的RDB持久化实现是folk一个子进程,然后让子进程将内存镜像dump到RDB文件中。理论上来说是需要跟父进程一样的内存空间,但是由于linux很早就支持的copy-on-write技术,所以实际上并不需要这么多的物理内存的。)
|
||||
</code></pre>
|
||||
<h6 id="禁用透明大页影响性能"><a class="anchor" href="#禁用透明大页影响性能">#</a> 禁用透明大页(影响性能)</h6>
|
||||
<p>需要 sudo su 切换到 root 身份(sudo 没用)</p>
|
||||
<p>echo never &gt; /sys/kernel/mm/transparent_hugepage/enabled</p>
|
||||
<p>修改 /etc/init.d/redis-server,加入 /bin/echo never &gt; /sys/kernel/mm/transparent_hugepage/enabled</p>
|
||||
<pre><code class="language-bash">需要sudo su 切换到root身份(sudo 没用)
|
||||
echo never &gt; /sys/kernel/mm/transparent_hugepage/enabled
|
||||
修改/etc/init.d/redis-server,加入/bin/echo never &gt; /sys/kernel/mm/transparent_hugepage/enabled
|
||||
</code></pre>
|
||||
<h6 id="修复tcp警告"><a class="anchor" href="#修复tcp警告">#</a> 修复 TCP 警告</h6>
|
||||
<p>sysctl net.core.somaxconn=1024(立即生效)</p>
|
||||
<p>修改 /etc/sysctl.conf 添加 net.core.somaxconn=1024</p>
|
||||
<p>客户端的输出缓冲区的限制,因为某种原因客户端从服务器读取数据的速度不够快,可用于强制断开连接(一个常见的原因是一个发布 / 订阅客户端消费消息的速度无法赶上生产它们的速度)。</p>
|
||||
<p>可以三种不同客户端的方式进行设置:<br />
|
||||
normal -&gt; 正常客户端<br />
|
||||
slave -&gt; slave 和 MONITOR 客户端<br />
|
||||
pubsub -&gt; 至少订阅了一个 pubsub channel 或 pattern 的客户端<br />
|
||||
每个 client-output-buffer-limit 语法 :</p>
|
||||
<p>client-output-buffer-limit &lt;class&gt;&lt;hard limit&gt; &lt;soft limit&gt; &lt;soft seconds&gt;<br />
|
||||
一旦达到硬限制客户端会立即断开,或者达到软限制并保持达成的指定秒数(连续)。</p>
|
||||
<p>例如,如果硬限制为 32 兆字节和软限制为 16 兆字节 /10 秒,客户端将会立即断开。如果输出缓冲区的大小达到 32 兆字节,客户端达到 16 兆字节和连续超过了限制 10 秒,也将断开连接。默认 normal 客户端不做限制,因为他们在一个请求后未要求时(以推的方式)不接收数据,<br />
|
||||
只有异步客户端可能会出现请求数据的速度比它可以读取的速度快的场景。</p>
|
||||
<pre><code class="language-conf">sysctl net.core.somaxconn=1024(立即生效)
|
||||
修改/etc/sysctl.conf添加net.core.somaxconn=1024
|
||||
客户端的输出缓冲区的限制,因为某种原因客户端从服务器读取数据的速度不够快,可用于强制断开连接(一个常见的原因是一个发布 / 订阅客户端消费消息的速度无法赶上生产它们的速度)。
|
||||
可以三种不同客户端的方式进行设置:
|
||||
normal -&gt; 正常客户端
|
||||
slave -&gt; slave 和 MONITOR 客户端
|
||||
pubsub -&gt; 至少订阅了一个 pubsub channel 或 pattern 的客户端
|
||||
|
||||
每个 client-output-buffer-limit 语法 :
|
||||
client-output-buffer-limit &lt;class&gt;&lt;hard limit&gt; &lt;soft limit&gt; &lt;soft seconds&gt;
|
||||
一旦达到硬限制客户端会立即断开,或者达到软限制并保持达成的指定秒数(连续)。
|
||||
例如,如果硬限制为 32 兆字节和软限制为 16 兆字节 /10 秒,客户端将会立即断开。如果输出缓冲区的大小达到 32 兆字节,客户端达到 16 兆字节和连续超过了限制 10 秒,也将断开连接。默认 normal 客户端不做限制,因为他们在一个请求后未要求时(以推的方式)不接收数据,
|
||||
只有异步客户端可能会出现请求数据的速度比它可以读取的速度快的场景。
|
||||
</code></pre>
|
||||
<h6 id="把硬限制和软限制都设置为-0-来禁用该特性"><a class="anchor" href="#把硬限制和软限制都设置为-0-来禁用该特性">#</a> 把硬限制和软限制都设置为 0 来禁用该特性</h6>
|
||||
<p>client-output-buffer-limit normal 0 0 0</p>
|
||||
<p>client-output-buffer-limit slave 5gb 512mb 60</p>
|
||||
<p>client-output-buffer-limit pubsub 32mb 8mb 60</p>
|
||||
<pre><code class="language-conf">client-output-buffer-limit normal 0 0 0
|
||||
client-output-buffer-limit slave 5gb 512mb 60
|
||||
client-output-buffer-limit pubsub 32mb 8mb 60
|
||||
</code></pre>
|
||||
<h6 id="持久化配置"><a class="anchor" href="#持久化配置">#</a> 持久化配置</h6>
|
||||
<p>--- 关闭 RDB 持久化 ---</p>
|
||||
<p>save &quot;&quot;</p>
|
||||
<p>默认配置如下:</p>
|
||||
<p>save 900 1 #900 秒内有 1 次更新就持久化</p>
|
||||
<p>save 300 10 #300 秒内有 10 次更新就持久化</p>
|
||||
<p>save 60 10000 #60 秒内有 10000 次更新就持久化</p>
|
||||
<p>--- 关闭 RDB 持久化 ---</p>
|
||||
<p>主从同步支持两种策略,即 disk 和 socket 方式。</p>
|
||||
<p>新的 slave 端和重连的 salve 端不允许去继续同步进程,这被称之为 “完全同步”。</p>
|
||||
<p>一个 RDB 文件从 master 端传到 slave 端,分为两种情况:</p>
|
||||
<p>1、支持 disk:master 端将 RDB file 写到 disk,稍后再传送到 slave 端;</p>
|
||||
<p>2、无磁盘 diskless:master 端直接将 RDB file 传到 slave socket,不需要与 disk 进行交互。<br />
|
||||
无磁盘 diskless 方式适合磁盘读写速度慢但网络带宽非常高的环境。</p>
|
||||
<p>repl-diskless-sync no 默认不使用 diskless 同步方式</p>
|
||||
<p>repl-diskless-sync-delay 30 无磁盘 diskless 方式在进行数据传递之前会有一个时间的延迟,以便 slave 端能够进行到待传送的目标队列中,这个时间默认是 5 秒</p>
|
||||
<p>repl-ping-slave-period 60 slave 端向 server 端发送 pings 的时间区间设置,默认为 10 秒</p>
|
||||
<p>repl-timeout 3600 设置超时时间</p>
|
||||
<p>repl-disable-tcp-nodelay no 是否启用 TCP_NODELAY,如果启用则会使用少量的 TCP 包和带宽去进行数据传输到 slave 端,当然速度会比较慢;如果不启用则传输速度比较快,但是会占用比较多的带宽。</p>
|
||||
<p>repl-backlog-size 1mb 设置 backlog 的大小,backlog 是一个缓冲区,在 slave 端失连时存放要同步到 slave 的数据,因此当一个 slave 要重连时,经常是不需要完全同步的,执行局部同步就足够了。<br />
|
||||
backlog 设置的越大,slave 可以失连的时间就越长。</p>
|
||||
<p>repl-backlog-ttl 3600 如果一段时间后没有 slave 连接到 master,则 backlog size 的内存将会被释放。如果值为 0 则表示永远不释放这部份内存。</p>
|
||||
<p>slave-priority 100 slave 端的优先级设置,值是一个整数,数字越小表示优先级越高。当 master 故障时将会按照优先级来选择 slave 端进行恢复,如果值设置为 0,则表示该 slave 永远不会被选择。</p>
|
||||
<p>min-slaves-to-write 3</p>
|
||||
<p>min-slaves-max-lag 10 设置当一个 master 端的可用 slave 少于 N 个,延迟时间大于 M 秒时,不接收写操作。</p>
|
||||
<pre><code class="language-conf">---关闭RDB持久化---
|
||||
save &quot;&quot;
|
||||
默认配置如下:
|
||||
save 900 1 #900秒内有1次更新就持久化
|
||||
save 300 10 #300秒内有10次更新就持久化
|
||||
save 60 10000 #60秒内有10000次更新就持久化
|
||||
---关闭RDB持久化---
|
||||
|
||||
主从同步支持两种策略,即disk和socket方式。
|
||||
新的slave端和重连的salve端不允许去继续同步进程,这被称之为“完全同步”。
|
||||
一个RDB文件从master端传到slave端,分为两种情况:
|
||||
1、支持disk:master端将RDB file写到disk,稍后再传送到slave端;
|
||||
2、无磁盘diskless:master端直接将RDB file传到slave socket,不需要与disk进行交互。无磁盘diskless方式适合磁盘读写速度慢但网络带宽非常高的环境。
|
||||
repl-diskless-sync no 默认不使用diskless同步方式
|
||||
repl-diskless-sync-delay 30 无磁盘diskless方式在进行数据传递之前会有一个时间的延迟,以便slave端能够进行到待传送的目标队列中,这个时间默认是5秒
|
||||
repl-ping-slave-period 60 slave端向server端发送pings的时间区间设置,默认为10秒
|
||||
repl-timeout 3600 设置超时时间
|
||||
repl-disable-tcp-nodelay no 是否启用TCP_NODELAY,如果启用则会使用少量的TCP包和带宽去进行数据传输到slave端,当然速度会比较慢;如果不启用则传输速度比较快,但是会占用比较多的带宽。
|
||||
repl-backlog-size 1mb 设置backlog的大小,backlog是一个缓冲区,在slave端失连时存放要同步到slave的数据,因此当一个slave要重连时,经常是不需要完全同步的,执行局部同步就足够了。
|
||||
backlog设置的越大,slave可以失连的时间就越长。
|
||||
repl-backlog-ttl 3600 如果一段时间后没有slave连接到master,则backlog size的内存将会被释放。如果值为0则表示永远不释放这部份内存。
|
||||
slave-priority 100 slave端的优先级设置,值是一个整数,数字越小表示优先级越高。当master故障时将会按照优先级来选择slave端进行恢复,如果值设置为0,则表示该slave永远不会被选择。
|
||||
min-slaves-to-write 3
|
||||
min-slaves-max-lag 10 设置当一个master端的可用slave少于N个,延迟时间大于M秒时,不接收写操作。
|
||||
</code></pre>
|
||||
<h4 id="从服务"><a class="anchor" href="#从服务">#</a> 从服务</h4>
|
||||
<p>基本配置同主服务一致</p>
|
||||
<p>slaveof 127.0.0.1 6379(主 redis 的 ip 和端口)</p>
|
||||
<p>masterauth 123456 (主 redis 的密码)</p>
|
||||
<p>可以通过 slaveof no one 命令将 Slaver 升级为 Maste</p>
|
||||
<p>bgsave (持久化命令,在 redis-cli 中执行,默认创建 dump.rdb 文件,路径为 /var/lib/redis/dump.rdb。可通过 find /-name dump.rd 查找)</p>
|
||||
<p>masterauth 123456 (主 redis 的密码)</p>
|
||||
<pre><code class="language-conf">基本配置同主服务一致
|
||||
slaveof 127.0.0.1 6379(主redis的ip和端口)
|
||||
masterauth 123456 (主redis的密码)
|
||||
可以通过slaveof no one命令将Slaver升级为Maste
|
||||
bgsave (持久化命令,在redis-cli中执行,默认创建dump.rdb文件,路径为 /var/lib/redis/dump.rdb。可通过find / -name dump.rd查找)
|
||||
</code></pre>
|
||||
<h4 id="redis命令"><a class="anchor" href="#redis命令">#</a> redis 命令</h4>
|
||||
<p>批量删除 key<br />
|
||||
redis-cli -n 6 scan 0 match *2020-06-12 count 10000 | xargs redis-cli -n 6 del</p>
|
||||
<pre><code class="language-bash">批量删除key
|
||||
redis-cli -n 6 scan 0 match *2020-06-12 count 10000 | xargs redis-cli -n 6 del
|
||||
</code></pre>
|
||||
</content>
|
||||
<updated>2022-10-17T06:07:35.000Z</updated>
|
||||
</entry>
|
||||
|
Reference in New Issue
Block a user