redis安装、多实例和配置、及服务器性能优化
同一台服务器部署不同应用或者同一应用部署不同环境,需要redis服务多开防止数据冲突问题。
一、安装redis
需要安装gcc编译工具 yum install gcc -y
源码安装默认Redis程序安装在/usr/local/redis目录下;配置文件:/usr/local/redis/redis.conf,该配置文件中配置的端口为默认端口:6379;
Redis的启动命令路径:/usr/local/bin/redis-server。以下为二进制安装
tar zxvf redis-5.0.5.tar.gz -C /u01/redis
mv /u01/redis/redis-5.0.5 /u01/redis/redis_6379
cd /u01/redis/redis_6379
make
#jemalloc/jemalloc.h没有文件报错用
make MALLOC=libc
更改redis改配置文件
vim /u01/redis/redis_6379/redis.conf
#打开redis后台启动
将daemonize no 改成daemonize yes
#开启密码验证,这个密码对应application.yml第三部分中redis模块password字段
requirepass mypassword
内存优化,增大TCP队列
vi /etc/sysctl.conf
vm.overcommit_memory = 1
net.core.somaxconn = 2048
sysctl -p
增加系统进程文件数
vi /etc/security/limits.conf
* soft noproc 10240
* hard noproc 10240
* soft nofile 65535
* hard nofile 65535
ulimit -a #查看是否生效
启动redis
/u01/redis/redis_6379/src/redis-server /u01/redis/redis_6379/redis.conf
三、redis多实例
1、复制新的redis 文件夹,改变配置名称
cp -r /u01/redis/redis_6379/ /u01/redis/redis_6380/
2、修改配置文件里面的参数
vi /u01/redis/redis_6380/redis.conf
- port 端口号
- pidfile PID文件路径
- logfile 日志文件路径
- dbfilename 转储文件路径
2、启动新的redis 并放开端口
/u01/redis/redis_6380/src/redis-server /u01/redis/redis_6380/redis.conf
#查看端口是否启动
ss -ntlp|grep 6380
四、redis配置文件详解
# Redis 配置文件
# 默认情况下,redis不是在后台模式运行的,如果需要在后台进程运行,把该项的值更改为yes,默认为no
daemonize no
#redis服务以后台进程运行的时候,Redis默认会把pid写入/var/run/redis.pid文件组
pidfile /var/run/redis.pid
# 指定redis监听端口,默认为6379
port 6379
# 指定redis只接收来自于该IP地址的请求,如果不进行设置,默认将处理所有请求,我们是在生产环境下,所以这是必备项
bind 10.160.29.5
# 设置客户端连接时的超时时间,单位为秒。当客户端在这段时间内没有发出任何指令,那么关闭该连接
timeout 2
# 指定日志记录级别
# Redis总共支持四个级别:debug、verbose、notice、warning,默认为verbose
# debug 记录很多信息,用于开发和测试
# varbose 很多精简的有用信息,不像debug会记录那么多
# notice 普通的verbose,常用于生产环境
# warning 只有非常重要或者严重的信息会记录到日志
loglevel verbose
# 可用数据库数,默认值为16,默认数据库存储在DB 0号ID库中,无特殊需求,建议仅设置一个数据库 databases 1
databases 16
# 把数据库存到磁盘上:
# 下面的例子将会进行把数据写入磁盘的操作:
# 900秒(15分钟)之后,且至少有1个key(次)变更
# 300秒(5分钟)之后,且至少有10个key(次)变更
# 60秒之后,且至少有10000个key(次)变更
# 注意:如果不需要写磁盘,则把所有 "save" 设置注释掉,即实现全内存服务器。
save 900 1
save 300 10
save 60 10000
# 数据库的文件名及存放路径
dbfilename rdbfile.rdb
# 工作目录
# 本地数据库会写到这个目录下,文件名就是上面的 "dbfilename" 的值。
dir /usr/local/rdbfile
# 主从同步。通过 slaveof 配置来实现Redis实例的备份。
# 当本机为从服务时,设置主服务的IP及端口,在Redis启动时,它会自动从主服务进行数据同步
slaveof
#当本机为从服务时,设置主服务的连接密码
# masterauth
# 当一个slave失去和master的连接,或者同步正在进行中,slave的行为有两种可能:
# 1) 如果 slave-serve-stale-data 设置为 "yes" (默认值),slave会继续响应客户端请求,可能是正常数据,也可能是还没获得值的空数据。
# 2) 如果 slave-serve-stale-data 设置为 "no",slave会回复"正在从master同步(SYNC with master in progress)"来处理各种请求,除了 INFO 和 SLAVEOF 命令。
slave-serve-stale-data yes
# slave根据指定的时间间隔向服务器发送ping请求。
# 时间间隔可以通过 repl_ping_slave_period 来设置。
# 默认10秒
repl-ping-slave-period 5
# 设置最大同时连接客户端数量,0表示没有限制,一旦达到这个限制,Redis会关闭所有新连接并发送错误达到最大用户数上限。
maxclients 1024
# 设置最大内存,达到最大内存设置后,Redis会先尝试清除已到期或即将到期的Key,当此方法处理后,任到达最大内存设置,将无法再进行写入操作。
maxmemory 10240000000分配10G内存
# 内存策略:如果达到内存限制了,Redis如何删除key。你可以在下面五个策略里面选:
# volatile-lru -> 根据LRU算法生成的过期时间来删除。
# allkeys-lru -> 根据LRU算法删除任何key。
# volatile-random -> 根据过期设置来随机删除key。
# allkeys->random -> 无差别随机删。
# volatile-ttl -> 根据最近过期时间来删除(辅以TTL)
# noeviction -> 谁也不删,直接在写操作时返回错误。
maxmemory-policy noeviction
# 开启累加模式,因为redis本身同步数据文件是按上面save条件来同步的,所以有的数据会在一段时间内只存在于内存中,这种情况下,当Redis宕机的时候,最新的数据就丢了。
#如果不希望丢掉任何一条数据的话就该用纯累加模式:一旦开启这个模式,Redis会把每次写入的数据在接收后都写入 appendonly.aof 文件。
appendonly yes
# 设置纯累加文件名字及保存路径,默认:"appendonly.aof"
appendfilename appendonly.aof
# Redis慢查询日志可以记录超过指定时间的查询。运行时间不包括各种I/O时间。
slowlog-log-slower-than 10000
四、redis 服务器性能优化
1、系统内存OOM优化
vm.overcommit_memory

Redis会占用非常大内存,所以通常需要关闭系统的OOM,方法为将“/proc/sys/vm/overcommit_memory”的值设置为1(通常不建议设置为2)
也可以使用命令sysctl设置,如:sysctl vm.overcommit_memory=1,但注意一定要同时修改文件/etc/sysctl.conf,执行“sysctl -p”,以便得系统重启后仍然生效。
可选值:0、1、2。
0: 表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。 1: 表示内核允许分配所有的物理内存,而不管当前的内存状态如何。
2: 表示内核允许分配超过所有物理内存和交换空间总和的内存
# cat /proc/sys/vm/overcommit_memory
0 # echo vm.overcommit_memory = 1 >> /etc/sysctl.conf # sysctl -p
2、关闭透明大页(THP)

透明大页(THP)管理和标准/传统大页(HP)管理都是操作系统为了减少页表转换消耗的资源而发布的新特性。这二者的区别在于大页的分配机制,标准大页管理是预分配的方式,而透明大页管理则是动态分配的方式。
echo never > /sys/kernel/mm/transparent_hugepage/enabled
为使机器重启后THP配置依然生效,可以在/etc/rc.local 中追加 echo never>/sys/kernel/mm/transparent_hugepage/enabled
echo 'echo never>/sys/kernel/mm/transparent_hugepage/enabled' >> /etc/rc.local
chmod +x /etc/rc.d/rc.local
3.优化内存
设置maxmemory
设置Redis使用的最大物理内存,即Redis在占用maxmemory大小的内存之后就开始拒绝后续的写入请求,该参数可以确保Redis因为使用 了大量内存严重影响速度或者发生OOM(out-of-memory,发现内存不足时,它会选择杀死一些进程(用户态进程,不是内核线程),以便释放内存)。此外, 可以使用info命令查看Redis占用的内存及其它信息。
查看内存占用命令:info memory
主要关注used_memory(数据占用内存大小) 和 used_memory_rss(操作系统算出来redis进程占用内存大小),内存碎片率mem_fragmentation_ratio =used_memory_rss / used_memory
如果>1,说明有内存碎片,如果<1,说明有内存被操作系统弄到硬盘swap区去了。
设置最大内存命令
config set maxmemory 4294967296
config配置文件中添加 <bytes>
maxmemory 4294967296
内存回收策略
- volatile-lru 从已设置过期时间的数据集(server .db[i].expires)中挑选最近最少使用的数据淘汰。
- allkeys-lru 从数据集(server .db[i].dict)中挑选最近最少使用的数据淘汰
- volatile-lfu 从设置了过期时间的数据集(server .db[i].expires)中选择某段时间之内使用频次最小的键值对清除掉
- allkeys-lfu 从所有的数据集(server .db[i].dict)中选择某段时间之内使用频次最少的键值对清除
- volatile-ttl 从已设置过期时间的数据集(server .db[i].expires)中挑选将要过期的数据淘汰
- volatile-random 从已设置过期时间的数据集(server .db[i].expires)中任意选择数据淘汰
- allkeys-random 从数据集(server .db[i].dict)中任意选择数据淘汰
- no-enviction 当内存达到限制的时候,不淘汰任何数据,不可写入任何数据集,所有引起申请内存的命令会报错。
allkeys-lru :如果我们的应用对缓存的访问符合幂律分布,也就是存在相对热点数据,或者我们不太清楚我们应用的缓存访问分布状况,我们可以选择 allkeys-lru策略。
allkeys-random :如果我们的应用对于缓存key的访问概率相等,则可以使用这个策略。
volatile-ttl:这种策略使得我们可以向Redis提示哪些key更适合被eviction。
volatile-lru和volatile-random:适合将一个Redis实例既应用于缓存和又应用于持久化存储的时候,然而我们也可以通过使用两个Redis实例来达到相同的效果,值得一提的是将key设置过期时间实际上会消耗更多的内存
建议使用allkeys-lru策略从而更有效率的使用内存
设置淘汰策略命令
config set maxmemory-policy noeviction
config配置文件中添加
maxmemory-policy allkeys-lru
4、增大TCP队列的值
此参数是指:已完成三次握手的TCP连接队列,默认值511,但是Linux系统内核参数socket最大连接的值默认是128,对应文件/proc/sys/net/core/somaxconn,当系统并发量大且客户端连接缓慢时,应该将两个值进行参考设置。
建议将/proc/sys/net/core/somaxconn的值设置为2048, 如果重启生效,需要在/etc/sysctl.conf中设置: net.core.somaxconn = 2048 执行sysctl -p生效
[root@redis01 ~]# cat /proc/sys/net/core/somaxconn
128 [root@redis01 ~]# echo "net.core.somaxconn = 2048" >> /etc/sysctl.conf
[root@redis01 ~]# sysctl -p
vm.overcommit_memory = 1
net.core.somaxconn = 2048
5、增大linux最大打开文件数
[root@redis01 ~]# cat /etc/security/limits.conf * soft noproc 10240
* hard noproc 10240
* soft nofile 65535
* hard nofile 65535
需要重启生效
[root@redis01 ~]# ulimit -n
6、设置密码requirepass和masterauth
requirepass用于客户端连接时的认证,masterauth用于slave向master请求复制数据时的认证。
注意事项:
(1)密码要复杂
(2)masterauth 不能忘记,且通过明文传输
7、将危险命令使用rename-command设置为空或别名
注意事项:
(1)此配置不支持config set动态进行。
(2)config命令本身不建议设置成别名。
8、使用非root用户启动,使用非默认端口
redis安装、多实例和配置、及服务器性能优化的更多相关文章
- LNMP redis 安装、PHPredis扩展配置、服务器自启动、redis认证密码
背景: LNMP 环境(centos7) 一. 安装redis 1.下载,解压,编译 $ cd /usr/local$ wget http://download.redis.io/releases/r ...
- SQL Server 2008 数据库镜像部署实例之三 配置见证服务器
SQL Server 2008 数据库镜像部署实例之三 配置见证服务器 前面已经完成了镜像数据库的配置,并进行那个了故障转移测试.接下来将部署见证服务器,实现自动故障转移. 一.关于见证服务器 1.若 ...
- 安全开发运维必备,如何进行Nginx代理Web服务器性能优化与安全加固配置,看这篇指南就够了
本章目录 1.引言 1.1 目的 1.2 目标范围 1.3 读者对象 2.参考说明 2.1 帮助参考 2.2 参数说明 3.3 模块说明 3.服务优化 3.1 系统内核 3.2 编译优化 3.3 性能 ...
- Nginx服务器性能优化与安全配置实践指南
转载自:https://www.bilibili.com/read/cv16151784?spm_id_from=333.999.0.0 1.引言 1.1 目的 为了更好的指导部署与测试艺术升系统ng ...
- Tomcat 服务器性能优化
简介 考虑一下这种场景,你开发了一个应用,它有十分优秀的布局设计,最新的特性以及其它的优秀特点.但是在性能这方面欠缺,不管这个应用如何都会遭到客户拒绝.客户总是期望它们的应用应该有更好的性能.如果你在 ...
- Tomcat服务器性能优化
在这篇文章里分以下的七个步骤,按照这些步骤走,Tomcat服务器的性能就能改善哦. 增加JVM堆(heap) 解决内存泄漏问题 线程池(thread pool)的设置 压缩 调节数据库性能 Tomca ...
- Tomcat 生产服务器性能优化
虑一下这种场景,你开发了一个应用,它有十分优秀的布局设计,最新的特性以及其它的优秀特点.但是在性能这方面欠缺,不管这个应用如何都会遭到客户拒绝.客户总是期望它们的应用应该有更好的性能.如果你在产品中使 ...
- IIS网站服务器性能优化指南(转载)
原文网址:http://www.phontol.com/20090507_419416_1.html Windows Server自带的互联网信息服务器(Internet Informat ...
- IIS网站服务器性能优化攻略
Windows Server自带的互联网信息服务器(Internet Information Server,IIS)是架设网站服务器的常用工具,它是一个既简单而又麻烦的东西,新手都可以使用IIS架设一 ...
- ASP.NET MVC之如何看待内置配置来提高性能优化(四)
前言 前几篇我们比较基础的讲了下MVC中的知识,这一节我们穿插点知识,讲讲MVC中我们可以提高性能的办法. Razor视图引擎优化(优化一) 我们知道默认情况下配置MVC去解析一个视图会首先约定通过查 ...
随机推荐
- Java Study For Five Day( 面向对象一)
面向对象 1.面向对象的概念 2.理解面向对象 *面向对象其实是相对面向过程而言的,面向对象和面向过程都是一种思想,它们所强调的内容不一样. *面向对象:强调的是功能的行为,将功能进行了封装成了对象, ...
- python虚拟环境管理之Pipenv
GitHub:pypa/pipenv: Python Development Workflow for Humans. (github.com) 介绍: pipenv就是把pip和virtualenv ...
- Elasticsearch之权限验证(Basic)
目前使用的Es版本为7.5版本, 在7.X版本中已经可以免费的使用x-pack进行用户验证了 1. 修改elasticsearch主节点配置文件: action.destructive_require ...
- 使用Nginx搭建流媒体服务器
目录 什么是流媒体服务器 Nginx如何实现流媒体服务器 为Nginx安装nginx-http-flv-module 概述 流程 操作步骤 配置流媒体服务器 使用OBS推流 使用VLC拉RTMP 使用 ...
- fastadmin-自定义
1.样式重置 渲染完毕后再展示 [v-cloak]{ display: none; } <div id="app" v-cloak></div> 去除内置的 ...
- 【C++】关于 Visual Studio 的使用技巧(保姆级教程)
目录 fliter 视图 输出文件位置设置 查看预处理结果 将目标文件转换为可读的汇编 自定义程序入口 调试时查看变量在内存中的具体值 查看代码的反汇编 fliter 视图 visual studio ...
- 前端每日一知之css隐藏页面元素
脑图在线链接 本文内容依据[js每日一题]公众号精彩文章总结而来
- django admin 后台管理 新手学习步骤记录 (2)
学习使用django admin后台管理. 参考.Django基础之Admin后台数据管理_django admin_马航行的博客-CSDN博客
- AlainConfig
核心配置对象. 一个配置对象 AlainConfig, 它有一个默认的 一个配置服务:AlainConfigService https://github.com/ng-alain/delon/blob ...
- 渗透测试-前端加密分析之RSA加密登录(密钥来源服务器)
本文是高级前端加解密与验签实战的第6篇文章,本系列文章实验靶场为Yakit里自带的Vulinbox靶场,本文讲述的是绕过RSA加密来爆破登录. 分析 这里的代码跟上文的类似,但是加密的公钥是通过请求服 ...