Redis运行优化

栏目: 数据库 · 发布时间: 5年前

内容简介:摘要:redis在运行的过程中如果使用不合适的配置会使其占用内存越来越大,在此我给出我自己的一些优化策略供大家参考,如果你看到我的文章有更好的方法和策略希望也能分享给我,我们一起交流,感激不尽!Redis的RDB持久化实现是folk一个子进程,然后让子进程将内存镜像dump到RDB文件中。理论上来说是需要跟父进程一样的内存空间,但是由于linux很早就支持的copy-on-write技术,所以实际上并不需要这么多的物理内存的。(vm.overcommit_memory=1表示内核允许分配所有的物理内存,而不

摘要:redis在运行的过程中如果使用不合适的配置会使其占用内存越来越大,在此我给出我自己的一些优化策略供大家参考,如果你看到我的文章有更好的方法和策略希望也能分享给我,我们一起交流,感激不尽!

代码层级

  • 去除代码里的scan操作
  • 给每个key加过期时间
  • 存储结构用hash

redis策略

  • 绑定本机ip部署 redis 防止远程连接
  • maxmemory-policy allkeys-lru :从数据集中(包括设置过期时间以及未设置过期时间的数据集中),选择最近最久未使用的数据释放
  • maxmemory 12GB 根据实际调整大小

系统限制

  • 内核参数 sysctl.conf
    vm.overcommit_memory=1
    

Redis的RDB持久化实现是folk一个子进程,然后让子进程将内存镜像dump到RDB文件中。理论上来说是需要跟父进程一样的内存空间,但是由于 linux 很早就支持的copy-on-write技术,所以实际上并不需要这么多的物理内存的。(vm.overcommit_memory=1表示内核允许分配所有的物理内存,而不管当前的内存状态如何。)

  • 关闭透明大页功能
    echo never > /sys/kernel/mm/transparent_hugepage/enabled
    

(操作系统后台有一个叫做khugepaged的进程,它会一直扫描所有进程占用的内存,在可能的情况下会把4kpage交换为Huge Pages,在这个过程中,对于操作的内存的各种分配活动都需要各种内存锁,直接影响程序的内存访问性能,并且,这个过程对于应用是透明的,在应用层面不可控制,对于专门为4k page优化的程序来说,可能会造成随机的性能下降现象。)

冷备方式

redis提供两种方式,他们是 RDB和AOF

RDB
AOF

RDB

优点:

节省磁盘空间、恢复速度快,就是一个镜像,适合大规模的数据恢复;

对数据完整性和一致性要求不高

缺点:

在备份周期在一定间隔时间做一次备份,所以如果Redis意外down掉的话,就会丢失最后一次快照后的所有修改。虽然Redis在fork时使用了写时拷贝技术,但是如果数据庞大时还是会占用cpu性能。

优化策略(改redis的配置):

  • AOF 与 RDB ,使用RDB方式

    打开命令

# 指定本地数据库文件名,一般采用默认的 dump.rdb
dbfilename dump.rdb
# save <指定时间间隔> <执行指定次数更新操作>,满足条件就将内存中的数据同步到硬盘中。官方出厂配置默认是 900秒内有1个更改,300秒内有10个更改以及60秒内有10000个更改,则将内存中的数据快照写入磁盘。
若不想用RDB方案,可以把 save "" 的注释打开,下面三个注释。
# save ""
save 900 1
save 300 10
save 60 10000
# 指定本地数据库存放目录,一般也用默认配置
dir ./
# 配置存储至本地数据库时是否压缩数据,默认为yes。
# Redis采用LZF压缩方式,但占用了一点CPU的时间。若关闭该选项,但会导致数据库文件变的巨大。建议开启。
rdbcompression yes
  • 关闭aof: appendonly no

    (appendfsync everysec:每一秒写入aof文件,并完成磁盘同步。

    appendfsync no 不即时同步,由操作系统控制何时刷写到磁盘上,这种模式速度最快,减少io,数据安全性下降,但是会产生僵尸进程

    appendfsync always:每个命令都写入aof文件,并完成磁盘同步)

  • 为什么不使用AOF?

    AOF 是redis的一种持久化方式,用来记录所有的写操作,但是随着时间增加,aof文件会越来越大,所以需要进行重写,将内存中的数据重新以命令的方式写入aof文件。

    在重写的过程中,由于redis还会有新的写入,为了避免数据丢失,会开辟一块内存用于存放重写期间产生的写入操作,等到重写完毕后会将这块内存中的操作再追加到aof文件中。

从原理中可以了解到,如果在重写过程中redis的写入很频繁或写入量很大,就会导致占用大量额外的内存来缓存写操作,导致内存爆涨。

命令行方式关闭:

redis-03:6379> config get appendonly
1) "appendonly"
2) "yes"
redis-03:6379> config set appendonly no
OK

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Web表单设计

Web表单设计

[美] Luke Wroblewski / 卢颐、高韵蓓 / 清华大学出版社 / 2010-6 / 49.00元

精心设计的表单,能让用户感到心情舒畅,愉快地注册、付款和进行内容创建和管理,这是促成网上商业成功的秘密武器。本书通过独到、深邃的见解,丰富、真实的实例,道出了表单设计的真谛。新手设计师通过阅读本书,可广泛接触到优秀表单设计的所有构成要素。经验丰富的资深设计师,可深入地了解以前没有注意到的问题及解决方案。 本书专为表单设计或开发人员准备,但同时也适合可用性工程师、网站开发人员、产品经理、视觉设......一起来看看 《Web表单设计》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码