好饭不怕晚,扒一下 Redis 的配置文件

da338f01b7b3085b876a8065af98531c.gif

作者 | 阿Q

来源 | 阿Q说代码

在往期的文章中我们已经对Redis的概念和基本命令进行了讲解,今天我们来看下它的配置文件,Redis的配置文件在我们的开发和实际应用中起着非常重要的作用。

我们可以在安装目录下找到redis.conf配置文件,通过vim命令进行查看,为了防止配置文件进行更改,大家在使用前一定要备份一下!

本文Redis的版本为5.0.7

UNITS

1k => 1000 bytes
1kb => 1024 bytes
1m => 1000000 bytes
1mb => 1024*1024 bytes
1g => 1000000000 bytes
1gb => 1024*1024*1024 bytes

❝单位不区分大小写,只支持bytes

INCLUDES

structs2配置文件类似,可以通过includes包含。redis.conf可以作为总闸,包含其他。

include /path/to/local.conf
include /path/to/other.conf

MODULES

loadmodule /path/to/my_module.so
loadmodule /path/to/other_module.so

Redis可以通过loadmodule选项在启动时加载模块,若服务端无法加载模块,服务端会停止。可以通过多个loadmodule选项加载多个模块。

NETWORK

  • 「bind 127.0.0.1」:默认情况下,如果未指定“bind”配置指令,Redis将侦听服务器上所有可用网络接口的连接。

可以使用“bind”配置指令,后跟一个或多个IP地址,只侦听一个或多个选定接口。「例如:」bind 192.168.1.100 10.0.0.1

当设置多个bind地址后,Redis内部会维护多个Socket,每个Socket用于一个network interface

  • 「protected-mode yes」:此选项默认开启。

Redis服务端未使用bind选项显式指定要监听的network interface,并且未设置密码,Redis服务端只会接受来自127.0.0.1::1的客户端以及Unix域的Socket进行连接。

  • 「port 6379」:用于设置Redis监听的TCP端口,默认为6379,设置为0表示不监听TCP端口

  • 「timeout 0」:空闲多少秒之后关闭连接,“0”表示不关闭

  • 「tcp-keepalive 300」:单位为秒,如果为0,则不会进行keepalive检测,建议设置成60

  • 「tcp-backlog 511」:设置tcpbacklogbacklog其实是一个连接队列。

backlog队列总和 = 未完成三次握手队列 + 已经完成三次握手队列

在高并发环境下需要一个高backlog值来避免慢客户端连接问题。

「注意」Linux内核会将这个值减小到/proc/sys/net/core/somaxconn的值,所以需要确认增大somaxconntcp_max_syn_backlog两个值来达到想要的效果。

GENERAL

daemonize

Redis采用的是单进程多线程的模式,daemonize是用来指定redis是否要用守护线程的方式启动。默认情况下,Redis不作为守护进程运行。如果需要,请使用“是”。

#daemonize no 
//当前界面将进入redis的命令行界面,
exit强制退出或者关闭连接工具(putty,
xshell等)都会导致redis进程退出。daemonize yes     
//代表开启守护进程模式。在该模式下,
redis 会在后台运行,并将进程 pid 号写入
至 redis.conf 选项 pidfile 设置的文件中,
此时 redis 将一直运行,除非手动kill该进程。

supervised no

当你通过upstart或者systemd运行Redis时,Redis可以和你的supervision tree进行交互,可选的选项为:

  • no 无交互(默认)

  • upstart 通过向Redis发送SIGSTOP信号来通知upstart

  • systemd 通过向$NOTIFY_SOCKET写入READY=1来通知systemd

  • auto 通过是否设置了UPSTART_JOB或者NOTIFY_SOCKET环境变量来决定选项为 upstart或者systemd

pidfile

pidfile /var/run/redis_6379.pid //进程pid文件

loglevel notice

指定服务器日志级别:从上到下依次减少

  • debug:大量信息,对开发/测试有用

  • verbose:许多很少有用的信息,但不像调试级别那样混乱

  • notice:适度冗长,可能是生产中需要的内容

  • warning:只记录非常重要/关键的消息

logfile

logfile ""

日志的名字,如果为空,redis给控制台标准输出,如果配置为守护进程方式运行,且设置了logfilestdout,则日志将会发送给/dev/null

database

databases 16

系统默认的库16个,默认使用0库

syslog

  • syslog-enabled no:是否把日志输出到syslog中,系统日志默认是关着

  • syslog-ident redis:指定syslog里的日志标志设备以redis开头

  • syslog-facility local0:指定syslog设备,值可以是USERLOCAL0-LOCAL7,默认使用local0

Security (安全)

requirepass 12345!@#

设置redis连接密码,如果配置了连接密码,客户端在连接redis时需要通过Auth <password>命令提供密码,默认关闭。

如果设置完密码,ping就失败了,提示“NoAuth Authentication required”,加上auth + 密码就通了。

「要求必须auth + password 在任何命令之前」

Redis一般做的是缓存,不是安全,而且系统会认为Linux是在安全的环境下。

CLIENTS

maxclients 10000:最大连接数

设置redis同时可以与多少个客户端进行连接。默认情况下为10000个客户端。

当你无法设置进程文件句柄限制时,redis会设置为当前的文件句柄限制值减去32,因为redis会为自身内部处理逻辑留一些句柄出来。

如果达到了此限制,redis则会拒绝新的连接请求,并且向这些连接请求方发出「max number of clients reached」以作回应。

MEMORY MANAGEMENT

设置redis可以使用的内存量。一旦到达内存使用上限,redis将会试图移除内部数据,移除规则可以通过maxmemory-policy来指定。

如果redis无法根据移除规则来移除内存中的数据,或者设置了「不允许移除」,那么redis则会针对那些需要申请内存的指令返回错误信息,比如SETLPUSH等。但是对于无内存申请的指令,仍然会正常响应,比如GET等。

如果你的redis是主redis(说明你的redis有从redis),那么在设置内存使用上限时,需要在系统中留出一些内存空间给同步队列缓存,只有在你设置的是“不移除”的情况下,才不用考虑这个因素。

最大缓存

#maxmemory <bytes>
maxmemory 128MB

设置maxmemory和相对应的回收策略算法,设置最好为物理内存的「3/4」,或者比例更小,因为redis复制数据等其他服务时,也是需要缓存的。以防缓存数据过大致使redis崩溃,造成系统出错不可用。

牺牲一部分缓存数据,保存整体系统可用性。redis新的内存机制,会把key放在内存,value存放在swap区。

此配置需要和「maxmemory-policy」配合使用,当redis中内存数据达到maxmemory时,触发「清除策略」。在「内存不足」时,任何write操作(比如setlpush等)都会触发「清除策略」的执行。

实际环境

建议redis的所有物理机器的硬件配置保持一致(内存一致),同时确保master/replica「maxmemory policy」配置一致。

内存满时

如果还接收到set命令,redis将先尝试剔除设置过expire信息的key,而不管该key的过期时间有没有到达。

在删除时,将按照过期时间进行删除,最早将要被过期的key将最先被删除。如果带有expire信息的key都删光了,内存还不够用,那么将返回错误。这样,redis将不再接收写请求,只接收get请求。

maxmemory的设置比较适合于把redis当作于类似memcached的缓存来使用。

最大缓存策略

「maxmemory-policy」:

  • volatile-lru:使用LRU(最近最少使用)算法移除key,只对设置了过期时间的键

  • allkeys-lru:使用LRU算法移除key(所有key

  • volatile-lfu:对过期键使用 LFU(最不经常使用)近似算法

  • allkeys-lfu:对所有键使用 LFU 近似算法

  • volatile-random:在过期集合中移除随机的key,只对设置了过期时间的键

  • allkeys-random:移除随机的key

  • volatile-ttl:移除那些TTL值最小的key,即那些最近要过期的key

  • noeviction:不进行移除。针对写操作,只是返回错误信息(默认)(去公司观察维度,不应该选择这个)

LRU算法、LFU算法或者TTL算法都是不是很精确算法,而是个近似算法。

「使用策略规则:」

  1. 如果数据呈现幂律分布,也就是一部分数据访问频率高,一部分数据访问频率低,则使用allkeys-lru

  2. 如果数据呈现平等分布,也就是所有的数据访问频率都相同,则使用allkeys-random

样本数量

设置样本数量,上边提到的算法都并非是精确的算法,而是估算值,所以你可以设置样本的大小。

maxmemory-samples 5

默认值是 5,也就是说Redis随机挑出5个键,然后选出一个最符合条件的。对LRU来说5是比较合适的。10已经很接近于真正的LRU,但会消耗更多的CPU。3会更快但没有那么精确。

副本忽略最大内存

replica-ignore-maxmemory yes

Redis 5开始,默认情况下,replica节点会忽略maxmemory设置(除非在发生failover后,此节点被提升为master节点)。

这意味着只有master才会执行过期删除策略,并且master在删除键之后会对replica发送DEL命令。

这个行为保证了masterreplicas的一致性,并且这通常也是你需要的,但是若你的replica节点是可写的,或者你希望replica节点有不同的内存配置,并且你确保所有到replica写操作都幂等的,那么你可以修改这个默认的行为 (请确保你明白你在做什么)。

「注意」默认情况下replica节点不会执行过期策略,它有可能使用了超过maxmemory设定的值的内存。因此你需要监控replicas节点所在的机器并且确保在master节点到达配置的maxmemory大小时,replicas节点不会超过物理内存的大小。

今天我们就先说到这了,有不懂的内容欢迎大家在留言区留言~

45e90dba460a4dbacbc7021f82d2b00a.gif

f39bb67bdc4570ef58396d4b75374db1.png

往期推荐

Android 13 第一个开发者版本来了,网友直呼:Android 12 还没玩透!

CSDN企业数字化之路 ——「低代码」发展研讨会北京站现场实录大放送

使用这个库,让你的服务操作 Redis 速度飞起

将 k8s 制作成 3D 射击游戏,好玩到停不下来

0971e4853434ba8f3cd81485a915d483.gif

点分享

544285c41c6d84a593327ca2d96e2b64.gif

点收藏

5f10c372894b07650cbe58237300413a.gif

点点赞

c358608d98a2cbeecc8fb45f714c00c6.gif

点在看

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/512306.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ICBU可控文本生成技术详解

简介&#xff1a; 文本生成&#xff08;Text Generation&#xff09;是自然语言处理&#xff08;Natural Language Processing&#xff0c;NLP&#xff09;领域的一项重要且具有挑战的任务。顾名思义&#xff0c;文本生成任务的目的是生成近似于自然语言的文本序列&#xff0c;…

云拨测助力节卡机器人 全面优化海外网站性能

简介&#xff1a; 【案例分享云拨测】借助云拨测&#xff0c;节卡机器人有效挖掘性能瓶颈&#xff0c;经过优化&#xff0c;提升网站打开速度 50% 以上&#xff0c;提高了运营推广活动的 ROI&#xff0c;帮助节卡为全球用户提供更加优质的服务&#xff01; 作者&#xff5c;白…

分享一个巨好用的 HTTP 命令行宝藏工具

作者 | Eason来源 | 程序员巴士HTTPie是一个命令行 HTTP 客户端。它的目标是使 CLI 与 Web 服务的交互尽可能人性化。HTTPie 设计用于测试、调试以及通常与 API 和 HTTP 服务器交互。http 和 https 的命令允许创建和发送任意 HTTP 请求。HTTPie 整体采用简单自然的语法&#xf…

mysql远程备份工具_innobackupex实现MySQL远程备份

一、了解innobackupex1、mysqldumpmysql逻辑备份工具&#xff0c;作用于服务器本地&#xff0c;不需要额外安装插件可以单表备份&#xff0c;备份为sql文件形式、方便&#xff0c;在多个场景通用可通过shell命令实现定时备份&#xff0c;但备份时如果用户有操作&#xff0c;容易…

技术干货 | Native 页面下如何实现导航栏的定制化开发?

简介&#xff1a; 通过不同实际场景的描述&#xff0c;供大家参考完成 Native 页面的定制化开发。 很多 mPaaS Coder 在接入 H5 容器后都会对容器的导航栏进行深度定制&#xff0c;本文旨在通过不同实际场景的描述&#xff0c;供大家参考完成 Native 页面的定制化开发。 欢迎关…

深入理解云计算OpenAPI体系

简介&#xff1a; 就云计算的API来看&#xff0c;当前并没有类似POSIX这样的API标准&#xff0c;基本上各大厂商各自为政。当然&#xff0c;有一些业界主流标准例如OAS获得多数云厂商的支持&#xff0c;但云厂商本身的API却往往由于历史原因、技术路线原因百花齐放&#xff0c;…

Gartner:2025年有效细分市场中过半企业的 IT 支出将转向云

来源 | CSDN云计算 根据Gartner的最新预测&#xff0c;2025年有效细分市场中的企业在公有云计算领域的IT支出将超过传统IT服务支出。 Gartner的“云迁移”研究只包括可以迁移到云的企业IT市场&#xff0c;即应用软件、基础设施软件、业务流程服务和系统基础设施市场。2025年在这…

阿里云容器服务全面升级为 ACK Anywhere,让云的边界拓展至企业需要的每个场景

简介&#xff1a; 2021 年 9 月 26 日上海阿里云计算峰会上&#xff0c;阿里巴巴研究员、阿里云云原生应用平台负责人丁宇宣布&#xff0c;阿里云容器服务全面升级为 ACK Anywhere&#xff0c;让企业在任何需要云的地方&#xff0c;都能获得一致的容器基础设施能力。 此次升级的…

Redis 突然变慢了如何排查并解决?

作者 | 码哥字节来源 | 码哥字节Redis 通常是我们业务系统中一个重要的组件&#xff0c;比如&#xff1a;缓存、账号登录信息、排行榜等。一旦 Redis 请求延迟增加&#xff0c;可能就会导致业务系统“雪崩”。最近遇到了一个bug&#xff0c;经过查找发现 Redis 报 Could not ge…

成本直降50% | 阿里云发布云原生网关,开启下一代网关新进程

简介&#xff1a; 融合流量网关与微服务网关的下一代网关—云原生网关来啦&#xff01;优势满满&#xff01; 流量网关和微服务网关必须分开构建吗&#xff1f; 在容器技术和 K8s 主导的云原生时代&#xff0c;这个命题正浮现出新的答案。 更经济&#xff1a;将流量网关与微…

MongoDB 5.0新特性概览

简介&#xff1a; MongoDB 5.0标志着一个新的发布周期的到来&#xff0c;以更快地交付新特性给到用户。版本化API与在线重新分片相结合&#xff0c;使用户不必担心未来的数据库升级以及业务变化问题&#xff1b;本地原生时间序列数据平台也使MongoDB能支持更广泛的工作负载和业…

深入前端研发效能治理:数据化运营思路及其实践

简介&#xff1a; 数据中台前端研发无不让人厚重真实地感受到“唯一不变的是变化”。拿集团的数据资产服务平台来说&#xff0c;业务上经过两年的发展&#xff0c;已由单一的数据管理和使用平台发展成了集团具有一定规模和影响力的全域数据要素交易所&#xff0c;而从前端技术侧…

啥情况?为什么我的 Service 无法注入进来?

作者 | 敖丙来源 | 敖丙今天同事火急火燎的走了过来&#xff0c;说&#xff1a;快帮我看看这个错误&#xff0c;啥情况啊&#xff1f;我一看报错&#xff1a;Field xxxService in com.xx.xx.service.impl.XxXServiceImpl required a bean of type com.xx.xx.service.XxxService…

oracle sga pga mysql_oracle实例内存(SGA和PGA)调整-xin

一、名词解释(1)SGA&#xff1a;System Global Area是Oracle Instance的基本组成部分&#xff0c;在实例启动时分配;系统全局域SGA主要由三部分构成&#xff1a;共享池、数据缓冲区、日志缓冲区。(2)共享池&#xff1a;Shared Pool用于缓存最近被执行的SQL语句和最近被使用的数…

IoT Studio可视化搭建平台编辑历史功能的思考与探索

简介&#xff1a; 在前端可视化搭建领域中“重做”和“撤销”这两个功能已经是标配中的标配&#xff0c;毕竟只要有用户行为的地方就可能会有出错&#xff0c;这两个功能无疑就是为用户提供了“后悔药”。目前有各种各样的可视化搭建平台&#xff0c;本文介绍IoT Studio可视化搭…

云计算架构设计6大原则,你遵循了吗?| 赠书

作者 | 吕昭波 2006年&#xff0c;第一个云计算&#xff08;Cloud Computing&#xff09;产品诞生&#xff0c;云计算的概念也被提出&#xff0c;现在云计算几乎已经渗入所有的行业和应用场景中。我们不一定能直接感受到云计算对日常生活、工作、学习的影响&#xff0c;但作为I…

python写自动化工具_微软最强 Python 自动化工具开源了!不用写一行代码!

1. 前言最近&#xff0c;微软开源了一款非常强大的 Python 自动化依赖库&#xff1a;playwright-python它支持主流的浏览器&#xff0c;包含&#xff1a;Chrome、Firefox、Safari、Microsoft Edge 等&#xff0c;同时支持以无头模式、有头模式运行playwright-python 提供了同步…

复杂推理模型从服务器移植到Web浏览器的理论和实战

简介&#xff1a; 随着机器学习的应用面越来越广&#xff0c;能在浏览器中跑模型推理的Javascript框架引擎也越来越多了。在项目中&#xff0c;前端同学可能会找到一些跑在服务端的python算法模型&#xff0c;很想将其直接集成到自己的代码中&#xff0c;以Javascript语言在浏览…

国家网络安全宣传周:勒索病毒利如刀,上网备好技能包

简介&#xff1a; 近年来&#xff0c;勒索病毒携带着日趋成熟的手段革新和愈发隐蔽、复杂的“进化”能力&#xff0c;开启了“重装上阵”的疯狂模式&#xff0c;“出镜率”大有提高。由于大型政企机构的网络资产价值高&#xff0c;就成了勒索病毒的头号“猎物”。 政企机构信息…

漫画:什么是“低代码”开发平台?

作者 | 小灰来源 | 程序员小灰什么是低代码&#xff1f;其实&#xff0c;这并不是最近才出现的新概念。自从计算机诞生以来&#xff0c;人们就一直在想方设法提升计算机程序编写的效率。从最初的机器语言&#xff0c;发展到现在的C、Java、Python等高级语言&#xff1b;从完全独…