同一台服务器部署不同应用或者同一应用部署不同环境,需要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用户启动,使用非默认端口

参考资料https://www.cnblogs.com/shoshana-kong/p/14040198.html

redis安装、多实例和配置、及服务器性能优化的更多相关文章

  1. LNMP redis 安装、PHPredis扩展配置、服务器自启动、redis认证密码

    背景: LNMP 环境(centos7) 一. 安装redis 1.下载,解压,编译 $ cd /usr/local$ wget http://download.redis.io/releases/r ...

  2. SQL Server 2008 数据库镜像部署实例之三 配置见证服务器

    SQL Server 2008 数据库镜像部署实例之三 配置见证服务器 前面已经完成了镜像数据库的配置,并进行那个了故障转移测试.接下来将部署见证服务器,实现自动故障转移. 一.关于见证服务器 1.若 ...

  3. 安全开发运维必备,如何进行Nginx代理Web服务器性能优化与安全加固配置,看这篇指南就够了

    本章目录 1.引言 1.1 目的 1.2 目标范围 1.3 读者对象 2.参考说明 2.1 帮助参考 2.2 参数说明 3.3 模块说明 3.服务优化 3.1 系统内核 3.2 编译优化 3.3 性能 ...

  4. Nginx服务器性能优化与安全配置实践指南

    转载自:https://www.bilibili.com/read/cv16151784?spm_id_from=333.999.0.0 1.引言 1.1 目的 为了更好的指导部署与测试艺术升系统ng ...

  5. Tomcat 服务器性能优化

    简介 考虑一下这种场景,你开发了一个应用,它有十分优秀的布局设计,最新的特性以及其它的优秀特点.但是在性能这方面欠缺,不管这个应用如何都会遭到客户拒绝.客户总是期望它们的应用应该有更好的性能.如果你在 ...

  6. Tomcat服务器性能优化

    在这篇文章里分以下的七个步骤,按照这些步骤走,Tomcat服务器的性能就能改善哦. 增加JVM堆(heap) 解决内存泄漏问题 线程池(thread pool)的设置 压缩 调节数据库性能 Tomca ...

  7. Tomcat 生产服务器性能优化

    虑一下这种场景,你开发了一个应用,它有十分优秀的布局设计,最新的特性以及其它的优秀特点.但是在性能这方面欠缺,不管这个应用如何都会遭到客户拒绝.客户总是期望它们的应用应该有更好的性能.如果你在产品中使 ...

  8. IIS网站服务器性能优化指南(转载)

    原文网址:http://www.phontol.com/20090507_419416_1.html       Windows Server自带的互联网信息服务器(Internet Informat ...

  9. IIS网站服务器性能优化攻略

    Windows Server自带的互联网信息服务器(Internet Information Server,IIS)是架设网站服务器的常用工具,它是一个既简单而又麻烦的东西,新手都可以使用IIS架设一 ...

  10. ASP.NET MVC之如何看待内置配置来提高性能优化(四)

    前言 前几篇我们比较基础的讲了下MVC中的知识,这一节我们穿插点知识,讲讲MVC中我们可以提高性能的办法. Razor视图引擎优化(优化一) 我们知道默认情况下配置MVC去解析一个视图会首先约定通过查 ...

随机推荐

  1. 迁移到 Eclipse: Eclipse 对 IntelliJ IDEAA 评估开发指南

    为何考虑 Eclipse 以及它与 IntelliJ IDEA 有什么不同 Eclipse 是一个免费的.正日益流行起来的 Java 集成开发环境,最新版本的 Eclipse 中提供了很多特性,这些特 ...

  2. KnowledgeManagement

    知识管理建议 总则 总参 从无知到有知 资料收集的习惯 发表是最好的记忆 Wiki 使用 建议: Blog 写作 Discuss 搜索技巧 回复:Yibie的知识管理流程与工具选择 一.个人知识管理的 ...

  3. MySQL管理工具之Beekeeper Studio

    简介 Beekeeper Studio 是一个跨平台的 SQL 编辑器和数据库管理客户端,可以在 Linux.Mac.Windows 上使用. Beekeeper Studio 社区版是免费开源的,支 ...

  4. pikachu平台XXE漏洞通关教程详解

    声明! 如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人无关,切勿触碰法律底线,否则后果自负!!!! 文章来自个人csdn博客,地址:ht ...

  5. fastapi 实现HTTP访问

    1.概述 在使用python 时,我如何发布一个接口给外部访问, python 有 FASTAPI 和 uvicorn 实现,fastapi 是定义 api接口,uvicorn 运行服务器. 2.安装 ...

  6. 如何为在线客服系统的 Web Api 后台主程序添加 Bootstrap 启动页面

    背景 我在业余时间开发了一款自己的独立产品:升讯威在线客服与营销系统.这个系统的核心后台主程序,在最早期是完全没有页面,经常有朋友部署之后,一访问是 404,以为没有部署成功.我一看这肯定不行啊,可后 ...

  7. RabbitMQ, Windows Server 上服务总线的替代品

    RabbitMQ, Windows Server 上服务总线的替代品 https://www.robfox.io/2017/04/17/rabbitmq-alternative-service-bus ...

  8. JAVA-通过大疆TSDK的API直接获取红外图片温度信息

    一.前言 看过很多关于大疆红外图片用TSDK取温的方式,但是网上能搜到的大部分教程都是通过官方下载文件smple编译出来的程序来取温,如果这样做,虽然确实也能够实现目的,但不得不说,不但会降低运行速度 ...

  9. jenkins集群 - HTMLreport测试报告

    一.安装 HTML Publisher plugin 插件 插件下载地址 二.配置构建后步骤 三.编辑报告执行脚本 四.安装 Startup Trigger 和 Groovy 插件 1.安装原因: J ...

  10. Mysql数据库连接失败SSLException: Unsupported record version Unknown-0.0

    问题描述:mysql版本:5.7.27jdk版本:1.8.0_201 tomcat日志中报错,显示连接数据库失败,报错信息如下: The last packet successfully receiv ...