关于Redis监控及缓存相关问题
关于Redis监控
什么是Redis?
Remote Dictionary Server(Redis) 远程字典服务器是完全开源免费的,用C语言编写的,遵守BSD开源协议,Redis是一个高性能的(key/value)分布式内存数据库,基于内存运行,并支持持久化的NoSQL数据库,它也通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。
Redis特点:
性能极高 – Redis读的速度是11W次/s,写的速度是81K次/s(Redis 的数据是存在内存中,存写速度非常快)
支持持久化,将内存中的数据保存在磁盘中,重启可以再次加载使用。
丰富的数据类型,Redis不仅仅支持简单的key-value类型的数据,同时还提供Strings, Lists, Hashes, Sets 及 Ordered Sets 等数据结构的存储。
支持数据的备份,即master-slave模式的数据备份。
Redis使用场景
查询出的数据保存到Redis中,下次查询的时候直接从Redis中拿到数据。不用和数据库进行交互,减轻数据库压力。
Redis性能指标:Performance
名称 | 描述 |
---|---|
latency | Redis响应一个请求的时间 |
instantaneous_ops_per_sec | 平均每秒处理请求总数 |
hi rate(calculated) | 缓存命中率(计算出来的 |
Redis内存指标: Memory
名称 | 描述 |
---|---|
used_memory | 已使用内存 |
mem_fragmentation_ratio | 内存碎片率 |
evicted_keys | 由于最大内存限制被移除的key的数量 |
blocked_clients | 由于BLPOP,BRPOP,or BRPOPLPUSH而备阻塞的客户端 |
Redis基本活动指标:Basic activity
名称 | 描述 |
---|---|
connected_clients | 客户端连接数 |
conected_laves | slave数量 |
master_last_io_seconds_ago | 最近一次主从交互之后的秒数 |
keyspace | 数据库中的key值总数 |
Redis持久性指标: Persistence
名称 | 描述 |
---|---|
rdb_last_save_time | 最后一次持久化保存磁盘的时间戳 |
rdb_changes_sice_last_save | 自最后一次持久化以来数据库的更改数 |
Redis错误指标:Error
名称 | 描述 |
---|---|
rejected_connections | 由于达到maxclient限制而被拒绝的连接数 |
keyspace_misses | key值查找失败(没有命中)次数 |
master_link_down_since_seconds | 主从断开的持续时间(以秒为单位) |
Redis监控方式
redis-benchmark
redis-stat
redis-faina
redislive
monitor
showlog
redis-cli
性能监控:
redis-cli info | grep ops # 每秒操作数
内存监控:
Redis消耗的资源 # ./redis-cli info | grep used | grep human used_memory_human:2.99M # 内存分配器从操作系统分配的内存总量 used_memory_rss_human:8.04M #操作系统看到的内存占用,top命令看到的内存 used_memory_peak_human:7.77M # redis内存消耗的峰值 used_memory_lua_human:37.00K # lua脚本引擎占用的内存大小 由于BLPOP,BRPOP,or BRPOPLPUSH而备阻塞的客户端 # ./redis-cli info | grep blocked_clients blocked_clients:0 由于最大内存限制被移除的key的数量 # ./redis-cli info | grep evicted_keys evicted_keys:0 # Redis内存碎片率 ./redis-cli info | grep mem_fragmentation_ratio mem_fragmentation_ratio:2.74 Redis已使用内存 # ./redis-cli info | grep used_memory: used_memory:3133624 Redis由于超出最大连接数限制而被拒绝的客户端连接次数,如果这个数字很大,则意味着服务器的最大连接数设置得过低,需要调整maxclients # ./redis-cli info | grep connected_clients connected_clients:1 Redis key值查找失败(没有命中)次数 # ./redis-cli info | grep keyspace keyspace_misses:0 Redis主从断开的持续时间(以秒为单位) # ./redis-cli info | grep rdb_changes_since_last_save rdb_changes_since_last_save:0 复制积压缓冲区如果设置得太小,会导致里面的指令被覆盖掉而找不到偏移量,从而触发全量同步 # ./redis-cli info | grep backlog_size repl_backlog_size:1048576 Redis通过查看sync_partial_err变量的次数来决定是否需要扩大积压缓冲区,它表示主从半同步复制失败的次数 # ./redis-cli info | grep sync_partial_err sync_partial_err:1
1.get:获取慢查询日志
2.len:获取慢查询日志条目数
3.reset:重置慢查询日志
Redis命令交互
slowlog-log-slower-than 1000 # 设置慢查询的时间下线,单位:微秒 slowlog-max-len 100 # 设置慢查询命令对应的日志显示长度,单位:命令数
Redis info命令使用
1.server:服务器运行的环境参数 2.clients:客户端相关信息 3.memory:服务器运行内存统计数据 4.persistence:持久化信息 5.stats:通用统计数据 6.Replication:主从复制相关信息 7.CPU:CPU使用情况 8.cluster:集群信息 9.Keypass:键值对统计数量信息 ##命令格式 #./redis-cli info 按块获取信息 | grep 需要过滤的参数 例 #./redis-cli info stats | grep ops #./redis-cli > info server
Redis性能测试命令
#./redis-benchmark -c 100 -n 5000 #说明:100个连接,5000次请求对应的性能
关于缓存的几个问题
缓存穿透
描述:
故意去请求缓存中不存在的数据,从而去数据库中查,数据库中也没有,所以无法加到缓存,下次还是直接查询数据库,所以高并发的时候就导致数据库崩了。
解决方案:
1)利用互斥锁,缓存失效的时候,先去获得锁,得到锁了,再去请求数据库。没得到锁,则休眠一段时间重试。
2)数据库没查到数据,也往缓存中写入一个空值,但是设置失效时间短一点,防止恶意攻击。
缓存击穿
描述:
缓存击穿是指缓存中没有但数据库中有的数据,缓存的数据刚好过期(失效),这时并发用户特别多,同时读缓存没读到数据,直接在数据库去取数据,引起数据库压力瞬间增大,造成过大压力 ,可能导致数据库崩溃。
解决方案:
1、当多个线程同时去查询数据库的这条数据,那么我们可以在第一个查询数据的请求上使用一个互斥锁来锁住它 ,其他的线程走到这一步拿不到锁就等着,等第一个线程查询到了数据,然后做缓存。后面的线程进来发现已经有缓存了,就直接走缓存
2、可以将爆款的缓存失效时间设置为永久。
缓存雪崩
描述:
缓存雪崩是指缓存中数据大批量到过期时间,而大量查询打到数据库上,引起数据库压力过大甚至down机。和缓存击穿不同的是,缓存击穿指并发查同一条数据,缓存雪崩是不同数据都过期了,很多数据都查不到从而查数据库。
解决方案:
缓存预热就是系统上线后,将相关的缓存数据直接加载到缓存系统。这样就可以避免在用户请求的时候,先查询数据库,然后再将数据缓存的问题。
设置不同的过期时间,让缓存失效的时间点尽量均匀。
设置热点数据永远不过期。
关于Redis监控及缓存相关问题相关推荐
- Redis第一讲:相关的基础知识/数据类型/缓存的过期策略/双写一致性/内存存储和持久化
Redis第一讲:相关的基础知识 摘要:本文是Redis(6.2.1)详解的第一讲,介绍Redis相关的基础知识,内存存储和持久化,Redis作缓存使用时的注意要点,常见的数据类型,缓存的过期策略,R ...
- 我为什么用ES做Redis监控,不用Prometheus或Zabbix?
本文根据李猛老师在[deeplus直播第220期]线上分享演讲内容整理而成. 李猛 数据技术专家 Elastic-Stack产品深度用户,ES认证工程师,对Elastic-Stack开发.架构.运维有 ...
- 细说Redis监控和告警
https://blog.csdn.net/qq_27623337/article/details/53206685 对于任何应用服务和组件,都需要一套完善可靠谱监控方案. 尤其redis这类敏感的纯 ...
- [转]细说Redis监控和告警
原文 https://zhuoroger.github.io/2016/08/20/redis-monitor-and-alarm/? 对于任何应用服务和组件,都需要一套完善可靠谱监控方案. 尤其r ...
- Redis学习、缓存、持久化、哨兵模式
个人博客欢迎访问 总结不易,如果对你有帮助,请点赞关注支持一下 微信搜索程序dunk,关注公众号,获取博客源码 我写代码是为了更好的表达自我,这是艺术创作,而不单单是为了把事情搞定. -Antirez ...
- Redis监控汇总一
Redis监控汇总一 一.概述 对于任何运行在生产环境的软件,监控都是必不可少的一个环节. 我们在分析各种工具之前,先来看下redis都有哪些指标需要关注和监控. Redis监控的用途有两种,一种是类 ...
- Redis监控和告警
对于任何应用服务和组件,都需要一套完善可靠谱监控方案. 尤其redis这类敏感的纯内存.高并发和低延时的服务,一套完善的监控告警方案,是精细化运营的前提. 本文分几节,细说Redis的监控和告警: 1 ...
- Redis监控步骤get!Google精髓的四大法则直接掌握
Redis也是对外服务,所以Google四个黄金指标同样适用,还从延迟.流量.错误.饱和度分析Redis关键指标. 1 延迟 选择Redis是想得到更快响应速度和更高吞吐量,所以延迟数据对使用Redi ...
- 人生最好的php,mysql,linux,redis,docker等相关技术经典面试题,新手收藏学习,持续更新中。。。
php面试题 1.写出你能想到的所有HTTP返回状态值,并说明用途(比如:返回404表示找不到页面) # 200:服务器请求成功 # 301:永久重定向,旧网页已被新网页永久替代 # 302:表示临时 ...
最新文章
- 一个链接orcal的标准链接方法
- elasticsearch查询及logstash简介
- Matlab 工具箱
- [暑假集训Day4T3]曲线
- python思想读后感_《Deep Learning with Python》读后感精选
- oracle00333,Oracle数据库REDO损坏ora-00333修复手札
- Bootstrap 按钮状态提示
- php中奖概率算法,可用于刮刮卡,大转盘等抽奖算法
- 【Elastischearch】7.6 版本 update 后 refresh 慢,性能问题导致稳定性问题
- MySQL做毕设_PHP+MYSQL在线小说阅读网的设计与实现
- SAE实践——用SVN命令行同步/提交代码
- 单个正态总体均值的区间估计_数理统计第20讲(单一正态总体区间估计)
- linux相关的东东 来自dbanotes
- 用什么擦地最干净脑筋急转弯_100个脑筋急转弯,很多人困在了第8题,赶快考考孩子吧...
- 手机app 与pc 软件测试区别,1,web测试,Android测试,Ios测试的共同点与
- 快捷方式 ABP——切换MySQL数据库
- .net企业实战视频就业培训
- 拼多多活动主图尺寸多少?企立方来告诉你!
- C++打开文件的方式
- IEEE Transactions on Intelligent Transportation Systems投稿经验分享
热门文章
- 软件开发过程(实习体会)
- pcie总线与cpci总线_一种基于CPCI与CPCIE总线的多功能背板_2010205852433_说明书_专利查询_专利网_钻瓜专利网...
- 通过依赖注入feign接口启动项目时报Error creating bean with name ‘xxxcontroller‘错误
- java阿里云直播推流拉流工具类
- [计算机网络]交换机VLAN的作用和原理
- Windows卷影复制
- Unity 动态修改URP自带材质参数
- Java 调用 扫描仪的技术该如何选择?
- 为什么你的微信群设置不了管理员?
- SQL语句增删改查/高级查询