记一次redis key丢失的问题排查
最近测试环境的redis经常性发生某些key丢失的问题,最终的找到的问题让人大吃一惊。
复盘一下步骤:
1、发现问题
不知道从某天开始,后台经常报错,原因是某些key丢失,一开始不在意,以为是小bug,后来越来越频繁。
2、检查代码
看看是不是有误删除的情况,这些key的访问范围很小,压根没有删除的逻辑,也没有设置过期时间,通过ttl命令检查也是如此。
3、实在没辙,开启monitor监控
本以为终极大招肯定能发现问题,陆续抓取了几个出问题时段的全部redis指令序列,没有发现任何可疑的指令,内心奔溃。
4、检查redis.log
终于发现了这样一段
29014:M 25 Apr 00:10:47.906 - DB 0: 4121 keys (4061 volatile) in 8192 slots HT.
29014:M 25 Apr 00:10:47.906 - 100 clients connected (0 slaves), 4476640 bytes in use
29014:M 25 Apr 00:10:48.038 - Accepted xx.xx.xx.xx:57998
29014:M 25 Apr 00:10:48.119 # Failed opening the RDB file backup.db (in server root dir /etc/cron.d) for saving: Permission denied
29014:M 25 Apr 00:10:48.279 # Failed opening the RDB file root (in server root dir /etc/cron.d) for saving: Permission denied
29014:M 25 Apr 00:10:48.358 # Failed opening the RDB file root (in server root dir /etc/cron.d) for saving: Permission denied
29014:M 25 Apr 00:10:48.385 - Client closed connection
29014:M 25 Apr 00:10:48.397 - Accepted xx.xx.xx.xx:52018
29014:M 25 Apr 00:10:52.915 - DB 0: 2 keys (0 volatile) in 4 slots HT.
在00:10:48.119 这个时刻,尝试从/etc/cron.d下面的backup.db恢复数据,然后出错,然后就数据库被清空。
整个过程速度非常快,客户端都没有感觉。
我们内部没有人会在这个时刻去执行这个操作,redis的配置文件里面也不会有类似的配置。
网上搜索了一下,类似的情况说明,这是有人在尝试通过redis来攻击你的服务器。
由于机房设备不足,临时在腾讯云服上搭建了测试环境,没有做过多的安全性设置,redis也没有设置密码。
接下来做了两个设置:
1、redis设置了一个较为复杂的密码;
2、禁用了config指令
接下来几天,不再有类似问题。
折腾了几天,一开始完全没往安全这个方向去考虑,充分说明专业的事情还得专业的人来干,我这个运维临时工是不行的。
记一次redis key丢失的问题排查的更多相关文章
- 如何利用redis key过期事件实现过期提醒
https://blog.csdn.net/zhu_tianwei/article/details/80169900 redis自2.8.0之后版本提供Keyspace Notifications功能 ...
- 关于redis key命名规范的设计
一.实现目标 简洁,高效,可维护 二.键值设计规约 1 . Redis key命名风格 [推荐]Redis key命名需具有可读性以及可管理性,不该使用含义不清的key以及特别长的key名: [强制] ...
- Redis Key 命令
Redis Key 命令 del key1 key2 - keyn 删除键为key1,key2-keyn,空格分隔. persist key 移除给定 key 的生存时间,将这个 key ...
- springboot redis key乱码
原写法: @Autowired private RedisTemplate redisTemplate; 写入redis后,查看key值 127.0.0.1:6379> keys * 1) &q ...
- redis key的过期时间
设置redis key的生存过期时间 Redis 有四个不同的命令可以用于设置键的生存时间(键可以存在多久)或过期时间(键什么时候会被删除) : EXPlRE 命令用于将键key 的生存时间设置为tt ...
- Spring boot实现监听Redis key失效事件实现和其它方式
需求: 处理订单过期自动取消,比如下单30分钟未支付自动更改订单状态 用户绑定隐私号码当订单结束取消绑定等 解决方案1: 可以利用redis自带的key自动过期机制,下单时将订单id写入redis,过 ...
- SpringBoot实现监听redis key失效事件
需求: 处理订单过期自动取消,比如下单30分钟未支付自动更改订单状态 解决方案1: 可以利用redis天然的key自动过期机制,下单时将订单id写入redis,过期时间30分钟,30分钟后检查订单状态 ...
- Redis Key操作
[Redis Key操作] 1.GETSET key value 将给定 key 的值设为 value ,并返回 key 的旧值(old value). 当 key 存在但不是字符串类型时,返回一个错 ...
- 17 redis -key设计原则
书签系统 create table book ( bookid int, title char(20) )engine myisam charset utf8; insert into book va ...
随机推荐
- Android项目使用Eclipse进行单元测试
Android项目如果每次都整个调试的话,要加载UI,会等很长时间.所以单元测试就显得很方便了. 要进行单元测试,首先得修改下AndroidManifest.xml文件.在Instrument标签里点 ...
- libtorch 哪些函数比较常用?
libtorch 加载 pytorch 模块进行预测示例 void mat2tensor(const char * path, torch::Tensor &output) { //读取图片 ...
- MapReduce自定义InputFormat和OutputFormat
一.自定义InputFormat 需求:将多个小文件合并为SequenceFile(存储了多个小文件) 存储格式:文件路径+文件的内容 c:/a.txt I love Beijing c:/b.txt ...
- Android设置透明状态栏和透明导航栏
Android透明状态栏只有在4.4之后有. 在代码中加入下面几行代码即可实现
- 文本情感分类:分词 OR 不分词(3)
为什么要用深度学习模型?除了它更高精度等原因之外,还有一个重要原因,那就是它是目前唯一的能够实现“端到端”的模型.所谓“端到端”,就是能够直接将原始数据和标签输入,然后让模型自己完成一切过程——包括特 ...
- Spark SQL中UDF和UDAF
转载自:https://blog.csdn.net/u012297062/article/details/52227909 UDF: User Defined Function,用户自定义的函数,函数 ...
- notepade++使用
Notepad++也可以实现双视图/双窗口对比显示,目前最新版本(6.32)只能支持双视图显示,而且只能支持左右视图,希望后续版本能得到改进. 我们打开两个需要对比显示的源文件 默认的情况下是分成了两 ...
- JVM之参数分配详解
开篇之前,推荐一个关于JVM很不错的博客:http://www.cnblogs.com/redcreen/archive/2011/05/04/2036387.html 一.堆参数设置 -XX:+Pr ...
- (转)CentOs7.3 搭建 RabbitMQ 3.6 Cluster 集群服务与使用
RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python.Ruby..NET.Java.JMS.C.PHP.ActionScript.XMPP.STO ...
- Python(socket编程——2)
import socket ''' socket.socket(socket_family,socket_type,protocal=0) socket_family 可以是 AF_UNIX 或 AF ...