• 主页
  • 读书笔记
  • 备案号:滇ICP备19009238号
所有文章 其他站点 关于我

  • 主页
  • 读书笔记
  • 备案号:滇ICP备19009238号

Redis性能参数优化

2022-02-24

Redis性能参数优化

优化方式

  • 系统优化

    • echo “vm.overcommit_memory=1” > /etc/sysctl.conf 0
      表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。 表示内核允许分配所有的物理内存,而不管当前的内存状态如何。 表示内核允许分配超过所有物理内存和交换空间总和的内存。

    • echo never > /sys/kernel/mm/transparent_hugepage/enabled
      禁用 NUMA 优化机制提高性能

    • echo 1024 >/proc/sys/net/core/somaxconn
      修改限制接收新 TCP 连接侦听队列的大小,默认 128

  • 文件句柄优化

    修改 linux 系统参数
    vim /etc/security/limits.conf 添加
    soft  nofile  65535
    hard nofile  65535

  • 内存优化

    采用 jemalloc 内存分配器,降低内存碎片率

  • 配置优化

    maxmemory 7g
    maxmemory-policy allkeys-lru
    maxclients 0

配置文件说明

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
daemonize yes
# 是否以后台进程运行,默认为 no, 如果需要以后台进程运行则改为 yes
pidfile /var/run/redis.pid
# 如果以后台进程运行的话,就需要指定 pid, 你可以在此自定义 redis.pid 文件的位置.
port 6379
# 接受连接的端口号,如果端口是 0 则 redis 将不会监听 TCP socket 连接
maxmemory 7g
# 最大可使用内存.
# 警告:如果你想把 Redis 视为一个真正的 DB 的话,那不要设置 <maxmemory>, 只有你只想把 Redis 作为 cache 或者有状态的 server('state' server) 时才需要设置.
maxmemory-policy allkeys-lru
# 内存清理策略:如果达到了 maxmemory, 你可以采取如下动作:
# volatile-lru -> (默认策略)使用 LRU 算法来删除过期的 set
# allkeys-lru -> 删除任何遵循 LRU 算法的 key
# volatile-random -> 随机地删除过期 set 中的 key
# allkeys->random -> 随机地删除一个 key
# volatile-ttl -> 删除最近即将过期的 key(the nearest expire time (minor TTL))
# noeviction -> 根本不过期,写操作直接报错
maxmemory-samples 2
# 对于处理 redis 内存来说,LRU 和 minor TTL 算法不是精确的,而是近似的(估计的)算法。所以我们会检查某些样本 #来达到内存检查的目的。默认的样本数是 3.
maxclients 0
# 设置最大连接数。默认没有限制,'0' 意味着不限制.
tcp-backlog 511
# 在高并发的环境中,为避免慢客户端的连接问题,需要设置一个高速后台日志.
timeout 0
# 连接超时时间,单位秒.0 是不超时.
tcp-keepalive 0
# 在 Linux 上,指定值(秒)用于发送 ACKs 的时间。注意关闭连接需要双倍的时间。默认为 0.
loglevel notice
# 日志级别,默认是 verbose(详细).
logfile "./6379/6379.log"
# 指定 log 文件的名字,默认是 stdout.stdout 会让 redis 把日志输出到标准输出。但是如果使用 stdout 而又以后台进程的方式运行 redis, 则日志会输出到 /dev/null.
databases 16
# 设置 数据库数目。默认的数据库是 DB 0. 可以通过 SELECT <dbid> 来选择一个数据库,dbid 是 [0,'databases'-1] 的数字.
#save 900 1
#save 300 10
#save 60 10000
# 以上面的例子来说明:
# 过了 900 秒并且有 1 个 key 发生了改变 就会触发 save 动作
# 过了 300 秒并且有 10 个 key 发生了改变 就会触发 save 动作
# 过了 60 秒并且至少有 10000 个 key 发生了改变 也会触发 save 动作
# 注意:如果你不想让 redis 自动保存数据,那就把下面的配置注释掉!
stop-writes-on-bgsave-error yes
# 后台存储错误停止写.
rdbcompression yes
# 存储至本地数据库时(持久化到 rdb 文件)是否压缩数据,默认为 yes
rdbchecksum yes
#RDB 文件的是否直接偶像 chcksum.
dbfilename dump.rdb
# 保存 dump 数据的文件名.
dir ./6379
# 数据存放目录.
slave-serve-stale-data yes
# 当 slave 丢失与 master 的连接时,或者 slave 仍然在于 master 进行数据同步时(还没有与 master 保持一致),slave 可以有两种方式来响应客户端请求:
# 如果 slave-serve-stale-data 设置成 'yes' (the default) slave 会仍然响应客户端请求,此时可能会有问题.
# 如果 slave-serve-stale data 设置成 'no'slave 会返回 "SYNC with master in progress" 这样的错误信息。但 INFO 和 SLAVEOF 命令除外.
slave-read-only yes
# 配置 slave 实例是否接受写。写 slave 对存储短暂数据(在同 master 数据同步后可以很容易地被删除)是有用的,但未配置的情况下,客户端写可能会发送问题。从 Redis2.6 后,默认 slave 为 read-only.
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
#"yes",Redis 将使用一个较小的数字 TCP 数据包和更少的带宽将数据发送到 slave , 但是这可能导致数据发送到 slave 端会有延迟,如果是 Linux kernel 的默认配置,会达到 40 毫秒.
#"no", 则发送数据到 slave 端的延迟会降低,但将使用更多的带宽用于复制.
slave-priority 100
#slave 的优先级是一个整数展示在 Redis 的 Info 输出中。如果 master 不再正常工作了,哨兵将用它来选择一个 slave 提升为 master.
# 优先级数字小的 salve 会优先考虑提升为 master, 所以例如有三个 slave 优先级分别为 10,100,25, 哨兵将挑选优先级最小数字为 10 的 slave.
#0 作为一个特殊的优先级,标识这个 slave 不能作为 master, 所以一个优先级为 0 的 slave 永远不会被哨兵挑选提升为 master.
# 默认优先级为 100.
appendonly no
# 默认情况下,Redis 是异步的把数据导出到磁盘上。这种模式在很多应用里已经足够好,但 Redis 进程出问题或断电时可能造成一段时间的写操作丢失 (这取决于配置的 save 指令).
#AOF 是一种提供了更可靠的替代持久化模式,例如使用默认的数据写入文件策略(参见后面的配置)
# 在遇到像服务器断电或单写情况下 Redis 自身进程出问题但操作系统仍正常运行等突发事件时,Redis 能只丢失 1 秒的写操作.
#AOF 和 RDB 持久化能同时启动并且不会有问题.
# 如果 AOF 开启,那么在启动时 Redis 将加载 AOF 文件,它更能保证数据的可靠性.
appendfilename "appendonly.aof"
# 纯累加文件名字(默认:"appendonly.aof")
appendfsync everysec
# 调用 fsync () 函数通知操作系统立刻向硬盘写数据.
#no: 不 fsync, 只是通知 OS 可以 flush 数据了,具体是否 flush 取决于 OS. 性能更好.
#always: 每次写入 append only 日志文件后都会 fsync. 性能差,但很安全.
#everysec: 没间隔 1 秒进行一次 fsync, 折中.
no-appendfsync-on-rewrite no
# 如果把这个设置成 "yes" 带来了延迟问题,就保持 "no", 这是保存持久数据的最安全的方式.
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
# 自动重写 AOF 文件
# 如果 AOF 日志文件增大到指定百分比,Redis 能够通过 BGREWRITEAOF 自动重写 AOF 日志文件.
# 工作原理:Redis 记住上次重写时 AOF 文件的大小(如果重启后还没有写操作,就直接用启动时的 AOF 大小)
# 这个基准大小和当前大小做比较。如果当前大小超过指定比例,就会触发重写操作。你还需要指定被重写日志的最小尺寸,这样避免了达到指定百分比但尺寸仍然很小的情况还要重写.
# 指定百分比为 0 会禁用 AOF 自动重写特性.
lua-time-limit 5000
#Lua 脚本的最大执行时间,毫秒为单位
# 如果达到了最大的执行时间,Redis 将要记录在达到最大允许时间之后一个脚本仍然在执行,并且将开始对查询进行错误响应.
# 当一个长时间运行的脚本超过了最大执行时间,只有 SCRIPT KILL 和 SHUTDOWN NOSAVE 两个命令可用。第一个可以用于停止一个还没有调用写命名的脚本。第二个是关闭服务器唯一方式,当写命令已经通过脚本开始执行,并且用户不想等到脚本的自然 终止.
# 设置成 0 或者负值表示不限制执行时间并且没有任何警告
slowlog-log-slower-than 10000
# 上面的时间单位是微秒,所以 1000000 就是 1 秒。注意,负数时间会禁用慢查询日志,而 0 则会强制记录所有命令.
slowlog-max-len 128
# 这个长度没有限制。只是要主要会消耗内存。你可以通过 SLOWLOG RESET 来回收内存.
latency-monitor-threshold 0
notify-keyspace-events ""
# 事件通知,默认空字符串意思是禁用通知.
# 当事件发生时,Redis 可以通知 Pub/Sub 客户端.
# 可以在下表中选择 Redis 要通知的事件类型。事件类型由单个字符来标识:
# K Keyspace 事件,以 _keyspace@<db>_ 的前缀方式发布
# E Keyevent 事件,以 _keysevent@<db>_ 的前缀方式发布
# g 通用事件(不指定类型), 像 DEL, EXPIRE, RENAME, …
# $ String 命令
# s Set 命令
# h Hash 命令
# z 有序集合命令
# x 过期事件(每次 key 过期时生成)
# e 清除事件(当 key 在内存被清除时生成)
# A g$lshzxe 的别称,因此 ”AKE” 意味着所有的事件
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
# 当 hash 中包含超过指定元素个数并且最大的元素没有超过临界时,
#hash 将以一种特殊的编码方式(大大减少内存使用)来存储,这里可以设置这两个临界值
#Redis Hash 对应 Value 内部实际就是一个 HashMap , 实际这里会有 2 种不同实现,
# 这个 Hash 的成员比较少时 Redis 为了节省内存会采用类似一维数组的方式来紧凑存储,而不会采用真正的 HashMap 结构,对应的 valueredisObject 的 encoding 为 zipmap,
# 当成员数量增大时会自动转成真正的 HashMap, 此时 encoding 为 ht .
list-max-ziplist-entries 512
list-max-ziplist-value 64
# 和 Hash 一样,多个小的 list 以特定的方式编码来节省空间.
#list 数据类型节点值大小小于多少字节会采用紧凑存储格式.
set-max-intset-entries 512
#set 数据类型内部数据如果全部是数值型,且包含多少节点以下会采用紧凑格式存储.
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
# 和 hashe 和 list 一样,排序的 set 在指定的长度内以指定编码方式存储以节省空间
#zsort 数据类型节点值大小小于多少字节会采用紧凑存储格式.
hll-sparse-max-bytes 3000
activerehashing yes
#redis 将在每 100 毫秒时使用 1 毫秒的 CPU 时间来对 redis 的 hash 表进行重新 hash, 可以降低内存的使用。当你的使用场景中,有非常严格的实时性需 要,不能够接受 Redis 时不时的对请求有 2 毫秒的延迟的话,把这项配置为 no. 如果没有这么严格的实时性要求,可以设置为 yes, 以便能够尽可能快的释放内存.
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
#Redis 调用内部函数来执行许多后台任务,如关闭客户端超时的连接,清除过期的 Key , 等等.
# 不是所有的任务都以相同的频率执行,但 Redis 依照指定的 “hz” 值来执行检查任务.
# 默认情况下,"hz" 的被设定为 10 .
# 提高该值将在 Redis 空闲时使用更多的 CPU 时,但同时当有多个 key 同时到期会使 Redis 的反应更灵敏,以及超时可以更精确地处理.
# 范围是 1 到 500 之间,但是值超过 100 通常不是一个好主意.
# 大多数用户应该使用 10 这个预设值,只有在非常低的延迟的情况下有必要提高最大到 100 .
hz 10
aof-rewrite-incremental-fsync yes
# 当一个子节点重写 AOF 文件时,如果启用上面的选项,则文件每生成 32M 数据进行同步.
  • Redis
RabbitMQ性能参数优化
MySQL性能参数优化
  1. 1. 优化方式
  2. 2. 配置文件说明
© 2023 曳戈泰尔
Hexo Theme Yilia by Litten
  • 所有文章
  • 其他站点
  • 关于我

tag:

  • SHA256
  • AI换脸
  • VITS
  • APM
  • Anaconda
  • AnsibleAWX
  • ArrayList
  • Bean
  • BigDecimal
  • Blender three.js
  • API开放接口
  • xmlRPC
  • Ice
  • MySQL
  • BeanUtils
  • Tomcat
  • Caffeine
  • gradle
  • Docker
  • jdk
  • maven
  • JDK
  • localtime
  • Minio
  • PostgreSQL
  • RT_Linux
  • kafka
  • geany
  • CentOS
  • Elasticsearch
  • Node
  • FastDFS
  • Nginx
  • CompletableFutures
  • CompletableFuture
  • CountDownLatch
  • queue
  • Conflux
  • DefaultIdentifierGenerator
  • gdb
  • Deepin
  • Deferred
  • 自动化部署
  • Nacos
  • Redis
  • RocketMQ
  • docker-compose
  • docker日志
  • Docker部署
  • Drools
  • Vue
  • 持有者作为调用者
  • Error
  • ES
  • 签名上链
  • FISCO
  • Prometheus-Grafana-nodeExporter
  • FISCO开放平台
  • 解析input
  • ForkJoinPool
  • GateWay
  • Git
  • GeoServer
  • GitLab
  • Gradle
  • Spring
  • Gitlab
  • HTTP
  • Hexo GitHub-Pages
  • HttpUtil
  • IDEA
  • Gson
  • 热部署
  • HttpClientUtil
  • 搜索
  • Stream
  • foreach
  • Graphics2D
  • Synchronized
  • 循环
  • Integer
  • base64
  • JAVA
  • Excel
  • openID
  • NowTime
  • MD5
  • 字节流
  • 手机号
  • 支付宝
  • Object
  • 行政区划
  • 序列化
  • telnet
  • 枚举
  • 限流
  • 配置文件
  • 规则执行器
  • cmd
  • netty websocket
  • JAVE2
  • 线程池
  • 分治
  • JMH
  • JVM
  • Jenkins
  • Java调用AI输入输出
  • JWT
  • Kindle
  • Knif4j
  • jar
  • UDP
  • SonarQube
  • 部署
  • Ansible
  • IP
  • socket
  • List排序
  • MQ
  • MapStruct
  • Maven
  • MyBatis-Plus
  • MyBatis
  • 跳板机
  • event
  • trigger
  • 全文索引
  • 扣费 线程安全
  • MybatisPlus
  • LambdaQueryWrapper
  • Navicat
  • Explain
  • 私人助理
  • nacos
  • Nexus
  • WebSocket
  • OSS
  • OkHttpClient
  • OA
  • PicGo
  • 可视化监控
  • Optional
  • SpringBoot
  • 关键词
  • TSV
  • 性能指标
  • json
  • Pycharm
  • 文件夹遍历
  • TCP
  • Qt
  • QueryWrapper
  • Quartz
  • RSA
  • RabbitMQ
  • RateLimiter
  • Redisson
  • 阻塞等待锁
  • ZSET
  • incr
  • 频率限制
  • SAE
  • RESTful API
  • SCP
  • RuoYi
  • SM3
  • SKU
  • SQL
  • SQL前n天
  • SSL
  • Shell脚本自动化
  • Sleuth
  • Socket
  • PageHelper
  • Solidity
  • gateway
  • Batch
  • Spring Boot
  • build.gradle
  • Schedule
  • 循环重试
  • Undertow
  • 多筛选
  • IPFS
  • Jasypt
  • logback
  • 加解密
  • 幂等性
  • Result
  • log
  • Mail
  • 滑块
  • Druid
  • knife4j
  • 注入
  • Full Lite
  • 权限
  • 跨域访问
  • starter
  • 防刷
  • XSS
  • Event
  • 多数据库
  • Scheduled
  • yml
  • Async
  • AOP
  • CurrentUser
  • AutoGenerator
  • netty
  • Openfeign
  • Sentinel
  • Shiro
  • Swagger
  • XMLRPC
  • captcha
  • OAuth
  • 文件上传
  • 验证码登录
  • Response
  • Exception
  • 文件下载
  • 自定义注解
  • Thread
  • 观察者
  • 音视频
  • dll
  • StopWatch
  • String
  • Transactional
  • ThreadLocal
  • TLS
  • 挂载
  • VMware
  • VPN
  • VSAT
  • VScode
  • VS
  • Valid
  • 二维码
  • three.js
  • ECDSA
  • Tornado
  • WorkBench
  • VxWorks
  • select
  • taskSpawn
  • WPS
  • WeBase
  • JavaScript
  • COOKIE
  • 消息推送
  • 开启启动
  • VxWorks WorkBench
  • XStream
  • ab
  • appId appKey
  • printStackTrace
  • gitlab
  • excel2word
  • git
  • 经纬度
  • isNull isEmpty isBlank
  • mybatisplus
  • SSH
  • nohup日志
  • phpstudy
  • npm
  • 图片
  • nginx
  • url
  • xml
  • 去背景
  • 提取学号
  • 一键登录
  • xxl-job
  • 并发
  • 接口
  • 一致性HASH
  • 责任链
  • 两层请求体
  • 二次支付
  • 个人支付
  • 设计模式
  • 代理
  • MERGE
  • 保存MultipartFile
  • PDF
  • 链间数据迁移
  • session
  • 鉴权
  • 证书生成
  • 单例
  • 压测
  • shell
  • 发布Jar
  • sms
  • 升级代理合约
  • 支付
  • 图片转PDF
  • 拍平JSON
  • SSO
  • property
  • 内容安全
  • 循环分页
  • crontab
  • 日志清理
  • 实名
  • 绩效
  • 读书笔记
  • 歌词识别
  • component初始化
  • 抽奖
  • 数据脱敏
  • 验证码
  • 网络攻防
  • 慢排查
  • Native支付
  • 裁剪字符串
  • WebView
  • 文本折叠
  • 上拉加载数据
  • 弹窗输入框
  • 图片裁剪
  • banner
  • 局部刷新
  • 弹窗
  • StorageSync
  • 标签id值
  • openId
  • 角标
  • globalData
  • url传值
  • Feign
  • 懒加载
  • 订阅消息
  • 设备交接
  • 提取txt 提取word
  • 回调
  • 支付超时
  • Assert
  • 乐观锁
  • 服务器
  • 监控
  • 运维
  • 方案
  • Enum
  • 测试
  • 校招
  • 死锁
  • 兑换码
  • 订单
  • 余额扣减
  • sku gson
  • 电商
  • 短信验证码
  • 伏羲PDF
  • 秒杀
  • 后台
  • 不可破解key
  • 排查
  • 线程安全 Map List
  • 上下电
  • CRUD拆分的宽表
  • ip2region
  • 行政
  • 文件校验FileSize
  • ParameterMap
  • EventBus
  • 微信手机号
  • 购买掉单
  • resources
  • 音频时长
  • IDCardUtils
  • Ghelper
  • Forest
  • 邀请
  • 过滤器 拦截器
  • 通信
  • Retry
  • 人脸融合
  • 时间差
  • 短信
  • 集合
  • 长安链

    缺失模块。
    1、请确保node版本大于6.2
    2、在博客根目录(注意不是yilia根目录)执行以下命令:
    npm i hexo-generator-json-content --save

    3、在根目录_config.yml里添加配置:

      jsonContent:
        meta: false
        pages: false
        posts:
          title: true
          date: true
          path: true
          text: false
          raw: false
          content: false
          slug: false
          updated: false
          comments: false
          link: false
          permalink: false
          excerpt: false
          categories: false
          tags: true
    

  • 区块链
  • GPT
  • gitee1
  • gitee2
  • github
  • Other
徘徊在原子与字节的边缘

将更好的自己呈现给世界



修心至要,事上磨练

一蓑衣,一壶酒,一曲长歌,一剑天涯

见自己,见天地,见众生