Bootstrap

Redis进阶:Redis生产环境启动方案,以及通过客户端远程连接服务

目录

redis的生产环境启动方案

1. 配置文件的优化

2. 启动脚本的编写

3. 启动Redis服务器

客户端远程连接redis服务

附录:生产环境Redis常用配置参数

总结


图片

更多关于Redis相关技术点,敬请关注公众号:CTO Plus后续的发文,有问题欢迎后台留言交流。

图片

如果我们仅仅是用于一般的学习,做一些实验的话,就随便用redis-server启动一下redis就可以。但在将Redis用于生产环境之前,需要确保Redis服务器能够稳定运行,并能够满足高可用性和高性能的要求,要把redis作为一个系统的daemon进程去运行,每次系统启动redis进程一起启动。

本文我将介绍一种常用的Redis生产环境启动方案,帮助你在生产环境中成功部署和启动Redis服务器。最后就是介绍下,使用客户端远程连接redis服务。

redis的生产环境启动方案

1. 配置文件的优化

首先,需要对Redis的配置文件进行优化。根据实际需求,可以调整以下配置项:

  • bind:将其设置为服务器的IP地址,以允许远程访问。

  • port:根据实际情况选择一个未被占用的端口号。

  • requirepass:设置一个强密码,以增加服务器的安全性。

  • daemonize:将其设置为yes,以使Redis服务器以守护进程的方式在后台运行。

  • logfile:将其设置为一个合适的文件路径,以便记录Redis服务器的日志信息。

  • maxmemory:根据服务器的内存情况,设置一个合理的最大内存值。

  • maxclients:根据预期的并发连接数,设置一个合适的最大客户端数量。

  • timeout:根据网络环境,设置一个合理的超时时间。

其他配置项可以参考文末的《附录:生产环境Redis常用配置参数》,也可以参考公众号CTO Plus前面的文章《Redis进阶:精通Redis,你必须掌握配置文件的配置项和使用技巧》。

2. 启动脚本的编写

为了方便管理和启动Redis服务器,可以编写一个启动脚本。启动脚本可以包含以下内容:

  1. 检查Redis服务器是否已经启动,如果已经启动,则提示服务器已经在运行。

  2. 检查Redis服务器的配置文件是否存在,如果不存在,则提示配置文件不存在。

  3. 启动Redis服务器,并将日志输出到指定的日志文件。

  4. 检查Redis服务器的进程是否正常运行,如果进程异常退出,则尝试重新启动Redis服务器。

通过编写启动脚本,可以简化Redis服务器的启动和管理过程,提高生产环境中的可用性和可维护性。

redis utils目录下,有个redis_init_script脚本,将redis_init_script脚本拷贝到linux的/etc/init.d目录中,将redis_init_script重命名为redis_6379,6379是我们希望这个redis实例监听的端口号。

修改redis_6379脚本的第6行的REDISPORT,设置为相同的端口号(默认就是6379)。

创建两个目录:/etc/redis(存放redis的配置文件),/var/redis/6379(存放redis的持久化文件)。

mkdir -p /etc/redismkdir -p /var/redis/6379

修改redis配置文件(默认在根目录下redis.conf),拷贝到/etc/redis目录中,修改名称为6379.conf


 

修改redis.conf中的部分配置为生产环境,配置参数如下:

  • daemonize yes     让redis以daemon进程运行

  • pidfile         /var/run/redis_6379.pid  设置redis的pid文件位置

  • port 6379            设置redis的监听端口号

  • dir  /var/redis/6379    设置持久化文件的存储位置

 

其他配置项,可以参考前面的文章:《Redis进阶:配置文件的配置项和使用详解》

启动redis,执行以下指令:

/etc/init.d

chmod 777 redis_6379

./redis_6379 start

确认redis进程是否启动,ps -ef | grep redis

让redis跟随系统启动自动启动

在redis_6379脚本中,最上面,加入两行注释

# chkconfig: 2345 90 10

# description: Redis is a persistent key-value database

图片

                     

修改

图片

设置脚本开机启动:chkconfig redis_6379 on

更多关于Redis相关技术点,敬请关注公众号:CTO Plus后续的发文,有问题欢迎后台留言交流。

图片

3. 启动Redis服务器

在生产环境中,可以使用以下步骤来启动Redis服务器:

1. 将Redis的配置文件优化并保存。

2. 使用启动脚本启动Redis服务器,可以通过执行以下命令来启动Redis服务器:

./redis-server /path/to/redis.conf

其中,/path/to/redis.conf是配置文件的路径。

3. 检查Redis服务器的日志文件,确保服务器已经成功启动,并且没有出现错误或异常。

4. 监控和维护Redis服务器

在Redis服务器成功启动后,需要进行监控和维护工作,以确保服务器的稳定性和性能。可以使用Redis自带的命令行工具redis-cli来监控和管理Redis服务器,例如查看服务器状态、执行命令、查看日志等。

此外,还可以使用第三方监控工具,如Redis监控面板、Redis哨兵等,来实时监控Redis服务器的状态、性能和可用性,并及时采取相应的措施来解决问题。

更多关于Redis相关技术点,敬请关注公众号:CTO Plus后续的发文,有问题欢迎后台留言交流。

图片

客户端远程连接redis服务

redis-cli -h host -p port -a password

指定服务地址以及端口进行连接

图片

Redis 通过监听一个 TCP 端口或者 Unix socket 的方式来接收来自客户端的连接,当一个连接建立后,Redis 内部会进行以下一些操作:

首先,客户端 socket 会被设置为非阻塞模式,因为 Redis 在网络事件处理上采用的是非阻塞多路复用模型。

然后为这个socket设置 TCP_NODELAY 属性,禁用 Nagle 算法。

然后创建一个可读的文件事件用于监听这个客户端 socket 的数据发送。

在 Redis2.4 中,最大连接数是被直接硬编码在代码里面的,而在2.6版本中这个值变成可配置的。

maxclients 的默认值是 10000,你也可以在 redis.conf 中对这个值进行修改。

显示客户端最大连接数

图片

可以在启动服务时设置最大连接数为100000

图片

再次查询

图片

客户端命令

命令

描述

CLIENT LIST

返回连接到 redis 服务的客户端列表

CLIENT SETNAME

设置当前连接的名称

CLIENT GETNAME

获取通过 CLIENT SETNAME 命令设置的服务名称

CLIENT PAUSE

挂起客户端连接,指定挂起的时间以毫秒计

CLIENT KILL

关闭客户端

图片

附录:生产环境Redis常用配置参数

1. Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程

daemonize no

2. 当Redis以守护进程方式运行时,Redis默认会把pid写入/var/run/redis.pid文件,可以通过pidfile指定

pidfile /var/run/redis.pid

3. 指定Redis监听端口,默认端口为6379

port 6379

4. 绑定的主机地址

bind 127.0.0.1

5.当客户端闲置多长时间后关闭连接,如果指定为0,表示关闭该功能

timeout 300

6. 指定日志记录级别,Redis总共支持四个级别:debug、verbose、notice、warning,默认为verbose

loglevel verbose

7. 日志记录方式,默认为标准输出,如果配置Redis为守护进程方式运行,而这里又配置为日志记录方式为标准输出,则日志将会发送给/dev/null

logfile stdout

8. 设置数据库的数量,默认数据库为0,可以使用SELECT <dbid>命令在连接上指定数据库id

databases 16

9. 指定在多长时间内,有多少次更新操作,就将数据同步到数据文件,可以多个条件配合

save <seconds> <changes>

Redis默认配置文件中提供了三个条件:

save 900 1

save 300 10

save 60 10000

分别表示900秒(15分钟)内有1个更改,300秒(5分钟)内有10个更改以及60秒内有10000个更改。

10. 指定存储至本地数据库时是否压缩数据,默认为yes,Redis采用LZF压缩,如果为了节省CPU时间,可以关闭该选项,但会导致数据库文件变的巨大

rdbcompression yes

11. 指定本地数据库文件名,默认值为dump.rdb

dbfilename dump.rdb

12. 指定本地数据库存放目录

dir ./

13. 设置当本机为slav服务时,设置master服务的IP地址及端口,在Redis启动时,它会自动从master进行数据同步

slaveof <masterip> <masterport>

14. 当master服务设置了密码保护时,slav服务连接master的密码

masterauth <master-password>

15. 设置Redis连接密码,如果配置了连接密码,客户端在连接Redis时需要通过AUTH <password>命令提供密码,默认关闭

requirepass foobared

16. 设置同一时间最大客户端连接数,默认无限制,Redis可以同时打开的客户端连接数为Redis进程可以打开的最大文件描述符数,如果设置 maxclients 0,表示不作限制。当客户端连接数到达限制时,Redis会关闭新的连接并向客户端返回max number of clients reached错误信息

maxclients 128

17. 指定Redis最大内存限制,Redis在启动时会把数据加载到内存中,达到最大内存后,Redis会先尝试清除已到期或即将到期的Key,当此方法处理 后,仍然到达最大内存设置,将无法再进行写入操作,但仍然可以进行读取操作。Redis新的vm机制,会把Key存放内存,Value会存放在swap区

maxmemory <bytes>

18. 指定是否在每次更新操作后进行日志记录,Redis在默认情况下是异步的把数据写入磁盘,如果不开启,可能会在断电时导致一段时间内的数据丢失。因为 redis本身同步数据文件是按上面save条件来同步的,所以有的数据会在一段时间内只存在于内存中。默认为no

appendonly no

19. 指定更新日志文件名,默认为appendonly.aof

appendfilename appendonly.aof

20. 指定更新日志条件,共有3个可选值:

no:表示等操作系统进行数据缓存同步到磁盘(快)

always:表示每次更新操作后手动调用fsync()将数据写到磁盘(慢,安全)

everysec:表示每秒同步一次(折衷,默认值)

appendfsync everysec

21. 指定是否启用虚拟内存机制,默认值为no,简单的介绍一下,VM机制将数据分页存放,由Redis将访问量较少的页即冷数据swap到磁盘上,访问多的页面由磁盘自动换出到内存中(在后面的文章我会仔细分析Redis的VM机制)

vm-enabled no

22. 虚拟内存文件路径,默认值为/tmp/redis.swap,不可多个Redis实例共享

vm-swap-file /tmp/redis.swap

23. 将所有大于vm-max-memory的数据存入虚拟内存,无论vm-max-memory设置多小,所有索引数据都是内存存储的(Redis的索引数据 就是keys),也就是说,当vm-max-memory设置为0的时候,其实是所有value都存在于磁盘。默认值为0

vm-max-memory 0

更多关于Redis相关技术点,敬请关注公众号:CTO Plus后续的发文,有问题欢迎后台留言交流。

图片

24. Redis swap文件分成了很多的page,一个对象可以保存在多个page上面,但一个page上不能被多个对象共享,vm-page-size是要根据存储的 数据大小来设定的,作者建议如果存储很多小对象,page大小最好设置为32或者64bytes;如果存储很大大对象,则可以使用更大的page,如果不 确定,就使用默认值

vm-page-size 32

25. 设置swap文件中的page数量,由于页表(一种表示页面空闲或使用的bitmap)是在放在内存中的,,在磁盘上每8个pages将消耗1byte的内存。

vm-pages 134217728

26. 设置访问swap文件的线程数,最好不要超过机器的核数,如果设置为0,那么所有对swap文件的操作都是串行的,可能会造成比较长时间的延迟。默认值为4

vm-max-threads 4

27. 设置在向客户端应答时,是否把较小的包合并为一个包发送,默认为开启

glueoutputbuf yes

28. 指定在超过一定的数量或者最大的元素超过某一临界值时,采用一种特殊的哈希算法

hash-max-zipmap-entries 64

hash-max-zipmap-value 512

29. 指定是否激活重置哈希,默认为开启(后面在介绍Redis的哈希算法时具体介绍)

activerehashing yes

30. 指定包含其它的配置文件,可以在同一主机上多个Redis实例之间使用同一份配置文件,而同时各个实例又拥有自己的特定配置文件

include /path/to/local.conf

以上是Redis配置文件的一些常用配置项的解释,通过合理地配置这些选项,可以满足不同场景下的需求。在实际使用中,可以根据具体的情况进行配置。

总结

通过优化配置文件、编写启动脚本、监控和维护Redis服务器,可以确保Redis在生产环境中稳定运行,并能够满足高可用性和高性能的要求。本文介绍了一种常用的Redis生产环境启动方案,帮助你成功部署和启动Redis服务器。在实际应用中,还需要根据具体需求和场景进行调整和优化,以确保Redis服务器的稳定性和可靠性。

更多精彩,关注我公号,一起学习、成长

图片

CTO Plus

一个有深度和广度的技术圈,技术总结、分享与交流,我们一起学习。 涉及网络安全、C/C++、Python、Go、大前端、云原生、SRE、SDL、DevSecOps、数据库、中间件、FPGA、架构设计等大厂技术。 每天早上8点10分准时发文。

306篇原创内容

公众号

Redis进阶推荐阅读:

  • Redis进阶:Redis入门指南-概念、特点、应用场景以及Windows/Linux下的安装和使用

  • Redis进阶:使用Redis命令行界面进行数据库连接和基本操作

  • Redis进阶:配置文件的配置项和使用详解

  • Redis进阶:redis生产环境启动方案,以及通过客户端远程连接服务

  • Redis进阶:存储和访问基本数据结构-字符串,以及应用场景

  • Redis进阶:存储和访问基本数据结构-哈希(hash),以及应用场景

  • Redis进阶:存储和访问基本数据结构-列表,以及应用场景

  • Redis进阶:存储和访问基本数据结构-集合,以及应用场景

  • Redis进阶:存储和访问基本数据结构-有序集合,以及应用场景

  • Redis进阶:Redis的19个高级特性总结清单介绍

  • 非关系型数据库:MongoDB、redis、memcached之间的关系以及对比

  • Redis进阶:使用缓存的17大误区经验总结

  • Redis进阶:命令使用总结

原文:Redis进阶:Redis生产环境启动方案,以及通过客户端远程连接服务

 

;