redis 优化

  • 系统优化
    echo "vm.overcommit_memory=1" > /etc/sysctl.conf 

    0, 表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。

    1, 表示内核允许分配所有的物理内存,而不管当前的内存状态如何。

    2, 表示内核允许分配超过所有物理内存和交换空间总和的内存
    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
     

配置文件说明:

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数据进行同步.

转载于:https://www.cnblogs.com/guigujun/p/6137592.html

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

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

相关文章

IC设计常见设计思想

速度与面积互换原则 所谓速度&#xff0c;是指整个工程稳定运行所能够达到的最高时钟频率&#xff0c;它不仅和电路内部各个寄存器的建立时间、保持时间以及外部器件接口的各种时序要求有关&#xff0c;而且还和两个紧邻的寄存器间的逻辑延时&#xff0c;走线延时有关。所谓面…

DM365 u-boot启动分析

http://www.61ic.com/Article/DaVinci/DM644X/201009/27429.html

(十三)Hibernate高级配置

配置数据库连接池 配置C3P0连接池。先导入c3p0包。然后在hibernate.cfg.xml文件中 &#xff0c;使用下面代码配置连接池<property name"hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>可以通过下面的…

eclipse中如何配置tomcat

1.打开eclipse上面的Windows选项&#xff0c;选择Preferences>Server>Runtime Environments>Add 2.选择你电脑中安装的tomcat的版本我的是8所以我选的是Apache Tomcat v8.0 3,Next>Browse选择Tomcat的安装目录&#xff0c;选择jdk 4.Finish>OK tomcat配置完成。…

jsp调试小技巧

console.log($("#toolbar")); 打印对象可知道这个对象的参数信息转载于:https://www.cnblogs.com/chenweida/p/6149342.html

数字IC验证学习(一)

一、数据类型 1、logic logic类型只能有一个驱动。使用wire和reg的地方均可使用logic&#xff0c;但如双向总线等有多个驱动的地方&#xff0c;则不可使用logic。 2、二值逻辑 对于二值逻辑变量与DUT中的四值逻辑变量连接时&#xff0c;如果DUT中产生了X和Z&#xff0c;会被…

SecureCRT 配置文件中 找密码

打开本地电脑如下路径 C:\Users\XXX\AppData\Roaming\VanDyke\Config\Sessions 找到配置文件。 运行命令&#xff1a;python SecureCRTDecrypt.py [配置文件名称] 例如&#xff1a;python SecureCRTDecrypt.py 192.168.1.249.ini ssh root192.168.1.249 # 123456 即可得到密…

刷题比赛

题目描述 给你四个数组A,B,C,D. 给出每个数组的初始值A[1] 1, B[1] 1, C[1] 1, D[1] 1 , A[2] 3, B[2] 3, C[2] 3, D[2] 3; 有以下的递推公式: (1) a[k2]p* a[k1]qa[k]b[k1]c[k1]r k^2t * k1d[k]; (2)b[k2]u* b[k1]vb[k]a[k1]c[k1]w^kd[k]; (3)c[k2]x c[k1]yc[k]a[k1]b[…

自动化测试用例设计原则

自动化测试用例设计原则&#xff1a;每一个用例 都是一个闭合的业务操作。用例之间要保持独立 &#xff0c;不要有操作上的依赖关系&#xff0c;就算有也是测试数据上的依赖。第二个用例 依赖第一个用例产生的数据。转载于:https://www.cnblogs.com/yyjiangnan/p/6149430.html

MII/MDIO接口详解

MII/MDIO接口详解 http://dpinglee.blog.163.com/blog/static/144097753201041131115262/

T24412 Cup#182-3 洞穴之旅

弱连通模板题&#xff0c;不过还是不会。。。 这道题在POJ2762有&#xff0c;这个出题人直接翻译弄过来了。。。 弱连通的定义是&#xff1a;从u能到达v或从v能到达u&#xff0c;则u和v这两个点弱连通。 显然如果是强连通分量就一定是弱连通分量啦&#xff0c;所以可以直接缩点…

PCB相关的基础知识

http://www.elecfans.com/article/89/92/2017/20170425510728.html转载于:https://www.cnblogs.com/jackn-crazy/p/7300228.html

sql server 修改表结构语法大全

1.增加字段 alter table docdsp add dspcode char(200) 2.删除字段 alter table table_name drop column column_name 3.修改字段类型 alter table table_name alter column column_name new_data_type 2.6.1. 增加字段 要增加一个字段&#xff0c;使用这条命令…

Flutter - 生成二维码与识别二维码

#生成二维码 ##首先需要在pubspec.yaml:中添加 qr_flutter: ^1.1.3 其次&#xff0c;引入代码&#xff1a; import package:qr_flutter/qr_flutter.dart; 核心代码如下&#xff1a; child: QrImage(data: "这里是需要生成二维码的数据",size: 100.0,onError: (ex) {p…

任意小数分频设计

对于任意小数分频&#xff0c;如果有PLL的话&#xff0c;直接倍频再分频即可&#xff1b;或常用的方法有双模前置小数分频和脉冲删除小数分频。前一种方法设计较为复杂&#xff0c;因此主要以第二种方式为主设计了一下。 任意小数均可以化为分数&#xff0c;例如要进行5.3分频即…

Bootstrap--圆角图片`圆形图

转载于:https://www.cnblogs.com/qiyiyifan/p/6159823.html

逻辑综合——概述与基本概念

逻辑综合系列主要说明以下问题&#xff1a; 为什么要逻辑综合逻辑综合的基本原理逻辑综合需要提供哪些文件逻辑综合过程中施加约束逻辑综合能产生那些结果 综合是前端设计的重要步骤之一&#xff0c;其过程是将行为描述的电路、RTL级的电路转换到门级&#xff0c;其目的在于&a…

Swoole 源码分析——Server模块之初始化

前言 本节主要介绍 server 模块进行初始化的代码&#xff0c;关于初始化过程中&#xff0c;各个属性的意义&#xff0c;可以参考官方文档&#xff1a; SERVER 配置选项 关于初始化过程中&#xff0c;用于监听的 socket 绑定问题&#xff0c;可以参考&#xff1a; UNP 学习笔记—…