一,创建redis的数据和日志目录:
[root@yjweb data]# cd redis6379 [root@yjweb redis6379]# mkdir data [root@yjweb redis6379]# mkdir log
说明:刘宏缔的架构森林是一个专注架构的博客,地址:https://www.cnblogs.com/architectforest
对应的源码可以访问这里获取: https://github.com/liuhongdi/
说明:作者:刘宏缔 邮箱: 371125307@qq.com
二,redis运行环境的linux配置
1,设置系统中每个端口的监听队列的最大的长度
[root@yjweb log]# sysctl -a | grep somaxconn net.core.somaxconn = 128
我们修改为大于redis中的TCP backlog值
说明:redis中的TCP backlog值默认是511
tcp-backlog 511
[root@yjweb log]# vi /etc/sysctl.conf
增加一行:
net.core.somaxconn = 1024
使配置起作用:
[root@yjweb log]# sysctl -p
说明:
sysctl命令用来显示和配置内核运行时参数 -a:显示所有的配置参数 -p:从/etc/sysctl.conf加载配置
参见:
[root@yjweb log]# man sysctl
2,配置overcommit_memory
说明:内核参数overcommit_memory
它是 内存分配策略
有三个值可用:0、1、2。
0, 表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。 1, 表示内核允许分配所有的物理内存,而不管当前的内存状态如何。 2, 表示内核允许分配超过所有物理内存和交换空间总和的内存
这里面,2这种策略不够安全,
0有可能发生申请失败的情况
redis建议我们采用1的策略
编辑内核参数配置文件
[root@yjweb log]# vi /etc/sysctl.conf
增加一行:
vm.overcommit_memory=1
使配置起作用:
[root@yjweb log]# sysctl -p
检查是否生效
[root@yjweb log]# sysctl -a | grep overcommit_memory vm.overcommit_memory = 1
说明;此处注意给redis分配的内存大小
maxmemory的值不要超过物理内存的四分之三,
否则有可能引发系统内存不足
3,关闭Transparent Huge Pages(THP)
[root@localhost ~]# cat /sys/kernel/mm/transparent_hugepage/enabled [always] madvise never
说明:透明大页内存管理会影响数据的访问速度,可以关闭
关闭方法:
[root@yjweb log]# echo never > /sys/kernel/mm/transparent_hugepage/enabled [root@yjweb log]# cat /sys/kernel/mm/transparent_hugepage/enabled always madvise [never]
成功了,为了保证开机重启后还能自动写入配置,
参见这一篇:
centos8下启用rc-local服务 地址:https://www.cnblogs.com/architectforest/p/12467474.html
二,修改配置文件redis.conf
[root@yjweb conf]# vi /usr/local/soft/redis5/conf/redis.conf
内容:
1,指定监听的本地ip
bind 10.51.136.133
说明:如果bind 127.0.0.1 则只能从本机访问。
请确认是否只从本机访问redis,
否则建议设置为可以从网络访问的地址
2,保护模式:
protected-mode yes
说明:
protected-mode 会在没有设置 bind 和 密码时起作用,
建议protected-mode设置为yes
3,指定端口号
port 6379
说明:
如果在同一台机器上运行多个redis实例,各个实例的端口要区分开
4,指定密码:
requirepass demopassword
说明:安全起见,此处应该指定一个有复杂度的密码
5,指定以daemon方式运行
daemonize yes
6,loglevel : 保持值为notice即可:
loglevel notice
说明:
# This can be one of: # debug (a lot of information, useful for development/testing) # verbose (many rarely useful info, but not a mess like the debug level) # notice (moderately verbose, what you want in production probably) # warning (only very important / critical messages are logged)
7,logfile 指定日志文件路径
logfile "/data/redis6379/log/redis.log"
使用上面创建的路径
8,指定数据文件的路径
dir /data/redis6379/data/
说明:此处的值只能是一个目录
9,使用的最大内存容量
maxmemory 128MB
10,最大并发连接数
maxclients 10000
不建议修改,注意这个值应该在ulimit -n 返回的值以内
ulimit -n 显示的是linux系统里单用户打开文件描述符的最大值
11,slowlog的时长:
# The following time is expressed in microseconds, so 1000000 is equivalent # to one second. Note that a negative number disables the slow log, while # a value of zero forces the logging of every command. slowlog-log-slower-than 10000
说明:这个值的单位是微秒,
默认值10000即10毫秒
注意不要设置为0,因为它会记录所有命令
12,slowlog的最大记录数
# There is no limit to this length. Just be aware that it will consume memory. # You can reclaim memory used by the slow log with SLOWLOG RESET. slowlog-max-len 512
说明:默认值是128,
我们适当加大,这个值也可以从命令行中动态配置
例子:
127.0.0.1:6379> config set slowlog-max-len 1024 OK
说明:如何把动态配置的参数写入到配置文件当中?
127.0.0.1:6379> config rewrite OK
修改完成后重启:
[root@yjweb conf]# systemctl stop redis [root@yjweb conf]# systemctl start redis
四,如何查看redis的慢查询日志?
1,当前的慢查询日志共多少条?
10.51.136.133:6379> slowlog len (integer) 128
2,显示两条慢查询日志
10.51.136.133:6379> slowlog get 3 1) 1) (integer) 709 2) (integer) 1545732832 3) (integer) 13846 4) 1) "HGETALL" 2) "promotion_goods_detail"
说明:
第一个值:#日志的唯一标识符
第二个值:#命令执行是的UNIX时间戳
第三个值:#命令执行的时长,单位微妙
第四个值:#执行的命令及命令参数
3,清除所有的slowlog
127.0.0.1:6379> slowlog reset
五,查看redis的版本
[root@yjweb ~]$ /usr/local/soft/redis5/bin/redis-server --version Redis server v=5.0.7 sha=00000000:0 malloc=libc bits=64 build=7abb9ee9ee0ce29b
六,查看centos的版本
[root@yjweb ~]$ cat /etc/redhat-release CentOS Linux release 8.0.1905 (Core)