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去解析一个视图会首先约定通过查 ...
随机推荐
- 迁移到 Eclipse: Eclipse 对 IntelliJ IDEAA 评估开发指南
为何考虑 Eclipse 以及它与 IntelliJ IDEA 有什么不同 Eclipse 是一个免费的.正日益流行起来的 Java 集成开发环境,最新版本的 Eclipse 中提供了很多特性,这些特 ...
- KnowledgeManagement
知识管理建议 总则 总参 从无知到有知 资料收集的习惯 发表是最好的记忆 Wiki 使用 建议: Blog 写作 Discuss 搜索技巧 回复:Yibie的知识管理流程与工具选择 一.个人知识管理的 ...
- MySQL管理工具之Beekeeper Studio
简介 Beekeeper Studio 是一个跨平台的 SQL 编辑器和数据库管理客户端,可以在 Linux.Mac.Windows 上使用. Beekeeper Studio 社区版是免费开源的,支 ...
- pikachu平台XXE漏洞通关教程详解
声明! 如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人无关,切勿触碰法律底线,否则后果自负!!!! 文章来自个人csdn博客,地址:ht ...
- fastapi 实现HTTP访问
1.概述 在使用python 时,我如何发布一个接口给外部访问, python 有 FASTAPI 和 uvicorn 实现,fastapi 是定义 api接口,uvicorn 运行服务器. 2.安装 ...
- 如何为在线客服系统的 Web Api 后台主程序添加 Bootstrap 启动页面
背景 我在业余时间开发了一款自己的独立产品:升讯威在线客服与营销系统.这个系统的核心后台主程序,在最早期是完全没有页面,经常有朋友部署之后,一访问是 404,以为没有部署成功.我一看这肯定不行啊,可后 ...
- RabbitMQ, Windows Server 上服务总线的替代品
RabbitMQ, Windows Server 上服务总线的替代品 https://www.robfox.io/2017/04/17/rabbitmq-alternative-service-bus ...
- JAVA-通过大疆TSDK的API直接获取红外图片温度信息
一.前言 看过很多关于大疆红外图片用TSDK取温的方式,但是网上能搜到的大部分教程都是通过官方下载文件smple编译出来的程序来取温,如果这样做,虽然确实也能够实现目的,但不得不说,不但会降低运行速度 ...
- jenkins集群 - HTMLreport测试报告
一.安装 HTML Publisher plugin 插件 插件下载地址 二.配置构建后步骤 三.编辑报告执行脚本 四.安装 Startup Trigger 和 Groovy 插件 1.安装原因: J ...
- Mysql数据库连接失败SSLException: Unsupported record version Unknown-0.0
问题描述:mysql版本:5.7.27jdk版本:1.8.0_201 tomcat日志中报错,显示连接数据库失败,报错信息如下: The last packet successfully receiv ...