redis运维篇下篇

最近在学redis,由于笔者是学运维的,所以推荐学习运维的小伙伴参考,希望对大家有帮助!

redis运维篇上篇:http://t.csdnimg.cn/MfPud

附加redis多用户管理:http://t.csdnimg.cn/DY3yx

目录

十.redis慢日志

十一.redis的key的有效期

十二.redis禁用的危险命令

十三.redis压测工具

十四.redis的两种持久化存储方式

14.1RDB持久化存储

14.2redis的AOF持久化存储

十五.redis的主从复制

十六.redis的哨兵模式


十.redis慢日志

面试题:redis慢,怎末排查
1.查看系统资源的占用情况
2.查看慢日志情况


1.查看慢日志的默认配置
127.0.0.1:6379> config get slow*
1) "slowlog-max-len"
2) "128"						#最多纪录128个
3) "slowlog-log-slower-than"
4) "10000"					#默认超过10毫秒就会记录2.设置慢日志的时间
127.0.0.1:6379> config set slowlog-log-slower-than 1000	#超过1ms会被认定为慢日志
OK
127.0.0.1:6379> config get slow*
1) "slowlog-max-len"
2) "128"
3) "slowlog-log-slower-than"
4) "1000"		#1ms为慢日志3.shell批量写入数据
for i in $(seq -w 100000);do redis-cli -a redispwd set name${i} test${i};redis-cli -a redispwd get name${i};done 2>/dev/null4.产生慢日志
127.0.0.1:6379> keys * 	#当查询时间大于1ms,会产生慢日志
重复keys *操作获取多条慢日志5.查询慢日志
127.0.0.1:6379> slowlog get	#默认获取最近10条慢日志 
127.0.0.1:6379> slowlog get 5	#获取最近5条慢日志
127.0.0.1:6379> slowlog len		#查看慢日志的条数
(integer) 20
127.0.0.1:6379> slowlog reset	#清空慢日志6.Slowlog各字段意思
127.0.0.1:6379> slowlog get1) 1) (integer) 39				#慢日志的id,从0开始2) (integer) 1713758193		#慢日志时间戳,慢日志产生的时间3) (integer) 14426			#慢日志的运行时间4) 1) "keys"					#产生慢日志的命令2) "*"5) "127.0.0.1:46862"6) ""

十一.redis的key的有效期

-1代表key永久生效,-2代表key被删除了
127.0.0.1:6379> set name1  test1
OK
127.0.0.1:6379> get name1
"test1"
127.0.0.1:6379> ttl name1			#key的生命周期
(integer) -1
127.0.0.1:6379> expire name1 20		#设置key的有效期为20s
(integer) 1
127.0.0.1:6379> ttl name1
(integer) 8
127.0.0.1:6379> ttl name1
(integer) -2
此时key被回收了

十二.redis禁用的危险命令

​
>flushall		#会清空redis的所有数据
>flushdb		#清空db中的所有数据
>keys *		#在建过多的时候容易阻塞卡住对禁用命令配置
vim /etc/redis.conf
rename-command FLUSHALL ""
rename-command FLUSHDB ""
rename-command KEYS ""​

十三.redis压测工具

会对redis里的所有命令进行测试
redis-benchmark -a redispwd	#默认的并发50个,一共10万个请求

十四.redis的两种持久化存储方式

14.1RDB持久化存储

RDB持久化存储
redis默认开启了RDB快照方式,提供持久化存储的功能1.RDB存储方式的配置
127.0.0.1:6379> config get dir	#查看存储路径的设置
1) "dir"
2) "/data/redis"127.0.0.1:6379> config get dbfilename	#查看RDB存储的文件名,默认为dump.rdb文件
1) "dbfilename"
2) "dump.rdb"[root@bogon ~]# ls /data/redis/
dump.rdb  redis.log  redis.pid127.0.0.1:6379> config get save
1) "save"
2) "3600 1 300 100 60 100003600:3600s  1:1个key的变化      意为每隔1小时会将变化的只存储到文件中后面两组数类似概念:300  100       60  1000002.验证RDB持久化存储关闭RDB持久化存储
127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> set k2 v2
OK
127.0.0.1:6379> set k3 v3
OK
[root@bogon ~]# ls /data/redis/
dump.rdb  redis.log  redis.pid
[root@bogon ~]# systemctl stop redis
[root@bogon ~]# mv /data/redis/dump.rdb /data/redis/dump.rdb.bak
mv: overwrite '/data/redis/dump.rdb.bak'? y
[root@bogon ~]# ls /data/redis/
dump.rdb.bak  redis.log
[root@bogon ~]# systemctl start redis
[root@bogon ~]# redis-cli -a redispwd
127.0.0.1:6379> keys *
(empty array)恢复数据
[root@bogon ~]# systemctl stop redis
[root@bogon ~]# mv /data/redis/dump.rdb.bak /data/redis/dump.rdb
mv: overwrite '/data/redis/dump.rdb'? y
[root@bogon ~]# systemctl start redis
[root@bogon ~]# redis-cli -a redispwd
127.0.0.1:6379> keys *
1) "k3"
2) "k1"
3) "k2"设置关闭RDB
[root@bogon ~]# vim /etc/redis.conf
save ""
#save 3600 1
#save 300 100
#save 60 10000
[root@bogon ~]# systemctl start redis
[root@bogon ~]# systemctl stop redis
[root@bogon ~]# rm -f /data/redis/dump.rdb
[root@bogon ~]# systemctl start redis
[root@bogon ~]# ls /data/redis/
redis.log  redis.pid验证关闭后重新登录数据存在吗
[root@bogon ~]# redis-cli -a redispwd
127.0.0.1:6379> keys *
(empty array)
127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> set k2 v2
OK
127.0.0.1:6379> quit
[root@bogon ~]# systemctl restart redis
[root@bogon ~]# redis-cli -a redispwd
127.0.0.1:6379> keys *
(empty array)

14.2redis的AOF持久化存储

默认关闭
AOF持久化存储是把命令直接写入文件中,文件会不断扩大开启AOF持久化存储127.0.0.1:6379> config get append*		#查看AOF状态,默认关闭
1) "appendonly"
2) "no"
127.0.0.1:6379> config set appendonly yes	#开启AOF存储
OK
127.0.0.1:6379> config rewrite				#写入配置文件
OK[root@bogon ~]#  cat /etc/redis.conf | grep append	#检查写入的AOF信息
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no[root@bogon ~]# ls /data/redis/appendonly.aof 		#查看AOF文件的路径
/data/redis/appendonly.aof[root@bogon ~]# redis-cli -a redispwd		#登录验证
127.0.0.1:6379> keys *
(empty array)
127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> set k2 v2
OK
127.0.0.1:6379> quit
[root@bogon ~]# systemctl restart redis
[root@bogon ~]# redis-cli -a redispwd
127.0.0.1:6379> keys *
1) "k2"
2) "k1"AOF文件的重写
可以减小AOF文件的大小,数据不会减少手动重写
[root@bogon ~]# ll /data/redis/appendonly.aof 		#查看AOF文件大小
-rw-r--r--. 1 root root 173 Apr 23 13:46 /data/redis/appendonly.aof127.0.0.1:6379> bgrewriteaof	#手动重写
Background append only file rewriting started[root@bogon ~]# ll /data/redis/appendonly.aof 		#重写后,数据由173变为111
-rw-r--r--. 1 root root 111 Apr 23 13:55 /data/redis/appendonly.aof自动重写
127.0.0.1:6379> config get *aof*1) "aof-rewrite-incremental-fsync"2) "yes"3) "aof-load-truncated"4) "yes"5) "aof-use-rdb-preamble"6) "yes"7) "aof_rewrite_cpulist"8) ""9) "auto-aof-rewrite-percentage"	#当增量达到100%时,会触发AOF重写
10) "100"
11) "auto-aof-rewrite-min-size"		#当AOF文件达到67M时,会触发AOF重写
12) "67108864"
13) "replicaof"
14) ""

十五.redis的主从复制

redis单台服务器缺点:1.容易数据丢失2.缓解单台服务器的读写压力主从复制概念:保持主从服务器的数据一致性主服务器可用来写入和读取,从服务器仅用来读取,通过读写分离,降低写服务器的压力本实验基于主服务器安装启动的前提下进行
主服务器端的配置:
[root@bogon ~]# systemctl stop firewalld	#关闭防火墙
[root@bogon ~]#setenforce 0	关闭selinux
[root@bogon ~]# vim /etc/redis.conf
bind 0.0.0.0
protected-mode yes
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize yes[root@bogon ~]# scp -r /usr/local/bin/redis-* root@192.168.145.150:/usr/local/bin/	#将主服务器redis的启动文件同步到从服务器
[root@bogon ~]# scp -r /etc/redis.conf root@192.168.145.150:/etc/					#将主服务器的主配置文件同步到从服务器
[root@bogon ~]# redis-cli -a redispwd
127.0.0.1:6379> info	#查看主从关系
# Replication
role:master
connected_slaves:1
slave0:ip=192.168.145.150,port=6379,state=online,offset=686,lag=1
master_failover_state:no-failover从服务器端的配置:
[root@bogon ~]# systemctl stop firewalld	#关闭防火墙
[root@bogon ~]#setenforce 0	关闭selinux
[root@bogon ~]# redis-cli -v
redis-cli 6.2.1[root@bogon ~]# vim /etc/redis.conf 
bind 0.0.0.0
protected-mode yes
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize yes
slaveof 192.168.145.149 6379	#添加主服务器的ip及端口
masterauth "redispwd"		#添加主服务器的密码[root@bogon ~]# mkdir -p /data/redis
[root@bogon ~]# redis-server /etc/redis.conf		#启动从redis
[root@bogon redis]# redis-cli -a redispwd			#登录从redis
127.0.0.1:6379> keys *							#查看主redis的数据是否同步到从redis
1) "k1"
2) "k2"127.0.0.1:6379> info		#查看主从关系
# Replication
role:slave
master_host:192.168.145.149
master_port:6379添加数据验证主从同步主服务器端的配置:
127.0.0.1:6379> set k3 v3
OK
127.0.0.1:6379> set k4 v4
OK从服务器端的配置:
127.0.0.1:6379> keys *
1) "k4"
2) "k1"
3) "k3"
4) "k2"
发现k3,k4成功同步过来了

十六.redis的哨兵模式

注意:本实验搭建时,需要考虑以前的实验环境,另外3个端配置时同步进行

作用:实现主从自动切换,实现redis的高可用哨兵高可用模式搭建
为防止哨兵的单点故障,将哨兵高可用的形式,多个哨兵监控redis的状态,哨兵个数一般设置为奇数个注意:一般哨兵的部署不要和redis在同一台,防止机器挂掉后,哨兵不起作用了规划:
192.168.145.149	主redis   哨兵1
192.168.145.151	从1redis  哨兵2
192.168.145.152	从2redis  哨兵3本实验基于以上的主从复制实验环境192.168.145.149(主redis)配置:
vim /etc/redis.conf
masterauth "redispwd"	#当主服务器宕机恢复时,会沦为从服务器的身份,向新的主服务器添加向主服务器同步数据时的验证密码
[root@bogon ~]# systemctl restart redis哨兵配置:3个端均配置
[root@bogon ~]# vim /etc/sentinel.conf
bind 0.0.0.0
daemonize yes
port 26379
dir "/tmp"
logfile "sentinel.log"
sentinel monitor testmaster 192.168.145.149 6379 2
sentinel auth-pass testmaster redispwd
sentinel down-after-milliseconds testmaster 5000
sentinel failover-timeout testmaster 18000启动哨兵:
[root@bogon ~]# /usr/local/bin/redis-sentinel /etc/sentinel.conf 
[root@bogon ~]# ps -ef | grep senti
root      147598       1  0 05:49 ?        00:00:00 /usr/local/bin/redis-sentinel 0.0.0.0:26379 [sentinel]
root      147604  146592  0 05:49 pts/0    00:00:00 grep --color=auto senti验证哨兵实现的redis高可用:
停止redis服务:
[root@bogon ~]# systemctl stop redis	#停止主redis恢复主数据库,查看其角色:
[root@bogon ~]# systemctl start redis
[root@bogon ~]# redis-cli -a redispwd	
127.0.0.1:6379> info 	#发现变成了151的从数据库
# Replication
role:slave
master_host:192.168.145.151
master_port:6379验证哨兵的高可用性:
[root@bogon ~]# ps -ef | grep sen	#停掉一个哨兵
root        2117       1  0 15:27 ?        00:00:06 /usr/local/bin/redis-sentinel 0.0.0.0:26379 [sentinel]
root        2289    1743  0 15:48 pts/0    00:00:00 grep --color=auto sen
[root@bogon ~]# kill -9 2117192.168.145.151(从1redis)配置
[root@bogon ~]# redis-cli -a redispwd	#登录redis查看目前的身份
127.0.0.1:6379> info 
# Replication
role:slave
master_host:192.168.145.149
master_port:6379
master_link_status:up哨兵配置:3个端均配置
[root@bogon ~]# vim /etc/sentinel.conf
bind 0.0.0.0
daemonize yes
port 26379
dir "/tmp"
logfile "sentinel.log"
sentinel monitor testmaster 192.168.145.149 6379 2
sentinel auth-pass testmaster redispwd
sentinel down-after-milliseconds testmaster 5000
sentinel failover-timeout testmaster 18000启动哨兵:
[root@bogon ~]# /usr/local/bin/redis-sentinel /etc/sentinel.conf 
[root@bogon ~]# ps -ef | grep senti
root      147598       1  0 05:49 ?        00:00:00 /usr/local/bin/redis-sentinel 0.0.0.0:26379 [sentinel]
root      147604  146592  0 05:49 pts/0    00:00:00 grep --color=auto senti停掉主库后登录redis查看关系:
[root@bogon ~]# redis-cli -a redispwd	
127.0.0.1:6379> info	#发现由从库关系升级为主库关系
# Replication
role:master
connected_slaves:1恢复主数据库后,查看其角色:
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.145.149,port=6379,state=online,offset=102969,lag=1
slave1:ip=192.168.145.152,port=6379,state=online,offset=102969,lag=1验证哨兵的高可用性:
[root@bogon ~]# ps -ef | grep redis		#将redis服务关闭
root        2018       1  0 15:10 ?        00:00:10 redis-server 0.0.0.0:6379
root        2155       1  0 15:28 ?        00:00:11 /usr/local/bin/redis-sentinel 0.0.0.0:26379 [sentinel]
root        2320    1816  0 16:07 pts/0    00:00:00 grep --color=auto redis
[root@bogon ~]# kill -9 2018192.168.145.152(从2redis)配置
[root@bogon ~]# redis-cli -a redispwd	#登录redis查看目前的身份
127.0.0.1:6379> info 
# Replication
role:slave
master_host:192.168.145.149
master_port:6379
master_link_status:up哨兵配置:3个端均配置
[root@bogon ~]# vim /etc/sentinel.conf
bind 0.0.0.0
daemonize yes
port 26379
dir "/tmp"
logfile "sentinel.log"
sentinel monitor testmaster 192.168.145.149 6379 2
sentinel auth-pass testmaster redispwd
sentinel down-after-milliseconds testmaster 5000
sentinel failover-timeout testmaster 18000启动哨兵:
[root@bogon ~]# /usr/local/bin/redis-sentinel /etc/sentinel.conf 
[root@bogon ~]# ps -ef | grep senti
root      147598       1  0 05:49 ?        00:00:00 /usr/local/bin/redis-sentinel 0.0.0.0:26379 [sentinel]
root      147604  146592  0 05:49 pts/0    00:00:00 grep --color=auto senti停掉主库后登录redis查看关系:
[root@bogon ~]# redis-cli -a redispwd	
127.0.0.1:6379> info	#发现152依然为从库
# Replication
role:slave
master_host:192.168.145.149
master_port:6379恢复主数据库后,查看其角色:
# Replication
role:slave		#发现152依然为从库
master_host:192.168.145.152
master_port:6379
master_link_status:up验证哨兵的高可用性:
127.0.0.1:6379> info 	#发现从2起到的哨兵作用
# Replication
role:master
connected_slaves:1
slave0:ip=192.168.145.142,port=6379,state=online,offset=431243,lag=1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/5386.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

dvwa kali SQL注入

high: 1.txt的来源 1.txt的内容 手动添加: id1&SubmitSubmit 执行: sqlmap -r /root/1.txt -p id --second-url "http://192.168.159.128:20000/vulnerabilities/sqli_blind/" --batch medium: 换链接,换cook…

HDFS存取策略联系

书上关于这部分分了三个点: 1.数据存放 2.数据读取 3.数据复制 但数据存放和数据复制都是数据写操作过程中的,“存放”体现一种思想,“复制”体现过程,整个数据写操作过程如下: 1.分块:当客户端写入一个…

【JS篇之】异常

前言:在代码编写过程中,最常遇到的就是程序异常。其实异常并非坏事,它可以让开发人员及时发现、定位到错误,提醒我们做正确的事情,甚至在某些时候,我们还会手动抛出异常。 1.异常的分类 在JS中&#xff0…

2021 OWASP Top 10-零基础案例学习

文章目录 A01:2021 – 权限控制失效情境 #1: SQL 注入攻击风险风险与后果解决方案情境 #2: 未经授权的访问控制漏洞风险与后果解决方案 A02:2021 – 加密机制失效情境 #1: 自动解密的信用卡卡号与SQL注入情境 #2: 弱SSL/TLS使用与会话劫持情境 #3: 不安全的密码存储与彩虹表攻击…

http实现post请求时本地没问题,线上报413错误、nginx配置免费https、nginx反向代理

MENU 错误原因解决其他方式关于nginx的文章 错误原因 前端发送请求以后后端没有收到请求 而客户端却报了413错误 是请求实体过大的异常 如果请求夹带着文件就可能造成请求实体过大 那这里是什么原因造成的呢 在基础的后端开发中 都会用到nginx反向代理 默认大小为1M 超过1M都会…

LinkedList与链表

文章目录 ArrayList的缺陷链表链表的概念及结构链表的实现 LinkedList的使用什么是LinkedListLinkedList具体使用 ArrayList和LinkedList的区别 ArrayList的缺陷 通过源码知道,ArrayList底层使用数组来存储元素 由于其底层是一段连续空间,当在ArrayList任…

Windows 11 系统安装时如何跳过联网和逃避微软账号登录

问题描述 Windows 11 是从 22H2 版本之后开始强制联网何登录微软账号的。 这就带来两个问题: 1、如果我的电脑没有网络或者网卡驱动有问题,那就无法继续安装系统了。 2、如果我有强怕症,就是不想登录微软账号,害怕个人信息泄露…

SpringEL表达式编译模式SpelCompilerMode详解

https://docs.spring.io/spring-framework/reference/core/expressions.html 在构建SpringEL表达式解析器时候,发现可以传递个SpelCompilerMode参数,这个值不传的话默认是OFF // SpelParserConfiguration config new SpelParserConfiguration(); Spel…

uniApp+Vue3+vite+Element UI或者Element Plus开发学习,使用vite构建管理项目,HBuilderX做为开发者工具

我们通常给小程序或者app开发后台时,不可避免的要用到可视化的数据管理后台,而vue和Element是我们目前比较主流的开发管理后台的主流搭配。所以今天石头哥就带大家来一起学习下vue3和Element plus的开发。 准备工作 1,下载HBuilderX 开发者…

Portworx安装和使用

Portworx安装和使用 Portworx介绍 Portworx是一家美国存储初创公司,它研发了业界第一个容器定义存储系统Portworx。Portworx提供了全新的、统一的Scale out存储栈,其核心架构是共享的、松耦合的、分布式、基于元数据的块存储层(卷、块设备、全局共享卷…

【webrtc】MessageHandler 8: 基于线程的消息处理:处理音频输入输出断开

m98代码,看起来m114 去掉了MessageHandler :音频的录制和播放 都使用了on message,但只是用来通知并处理流的断开的。AAudioRecorder AAudioRecorder 处理流断开 OnErrorCallback :有可能 错误回调是别处来的,是其他线程, 但是这个错误的处理要再自己的线程执行: 音频播…

Go中为什么不建议用锁?

Go语言中是不建议用锁,而是用通道Channel来代替(不要通过共享内存来通信,而通过通信来共享内存),当然锁也是可以用,锁是防止同一时刻多个goroutine操作同一个资源; GO语言中,要传递某个数据给另一个gorout…

JavaScript原型链深度剖析

目录 前言 一、原型链 1.原型链的主要组成 原型(Prototype) 构造函数(Constructor) 实例(Instance) 2.原型链的工作原理 前言 在JavaScript的世界中,原型链(Prototype Chain&…

R语言的学习——day1

将数据框中某一列数据改成行名 代码 结果

第四十八节 Java 8 Nashorn JavaScript

Nashorn 一个 javascript 引擎。 从JDK 1.8开始,Nashorn取代Rhino(JDK 1.6, JDK1.7)成为Java的嵌入式JavaScript引擎。Nashorn完全支持ECMAScript 5.1规范以及一些扩展。它使用基于JSR 292的新语言特性,其中包含在JDK 7中引入的 invokedynamic&#xff…

.net core ef 连表查询

Information和TypeInfo连表查询 类似: select st.Title1,si.* from [Star_Information] si left join Star_TypeInfo st on si.typeId2st.id 先在EfCoreDbContext.cs配置 protected override void OnModelCreating(ModelBuilder builder){base.OnModelCreating(b…

基于SSM的文物管理系统(含源码+sql+视频导入教程+文档+PPT)

👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 基于SSM的文物管理系统拥有俩种角色 管理员:个人信息管理、用户管理、分类管理、文物信息管理、文物外借管理、文物维修管理、留言板管理等 用户:登录注册、分类…

[华为OD] C卷 服务器cpu交换 现有两组服务器QA和B,每组有多个算力不同的CPU 100

题目: 现有两组服务器QA和B,每组有多个算力不同的CPU,其中A[i]是A组第i个CPU的运算能 力,B[i]是B组第i个CPU的运算能力。一组服务器的总算力是各CPU的算力之和。 为了让两组服务器的算力相等,允许从每组各选出一个CPU进行一次交换。 求两…

Linux 权限的简单讲解

1、前言 当我们分别使用 touch、mkdir 命令创建一名为 test1 的文件和名为 test2 的目录,发现其中有些参数不一样,本文就来给大家来剖析一下。 2、 参数讲解 我们可以通过切片分为下面几个区域,本文就只简单讲解文件类型、权限、所属用户、所…

github中fasttext库README官文文档翻译

参考链接:fastText/python/README.md at main facebookresearch/fastText (github.com) fastText模块介绍 fastText 是一个用于高效学习单词表述和句子分类的库。在本文档中,我们将介绍如何在 python 中使用 fastText。 环境要求 fastText 可在现代 …