场景描述:
前不久,我在服务器上面装了一个 redis ,然后往里面存了一些数据,过一段时间去查看,发现我之前存的数据被删掉了,起初以为是数据过期了,redis 自动把这些删掉的,之后我又存入了一些永不过期的数据进去,可是过了一段时间之后去查看,这些数据还是被删掉了,对于一个刚入门不久的菜鸟而言,是一脸的懵逼,遇到问题就想办法去解决呗~,随后又重学了一遍 redis 的数据删除和淘汰策略,好像跟永不过期的数据也没啥关系,一筹莫展,直到翻到了 记一次redis key丢失的问题排查 这篇博客才恍然大悟
以下我就还原了一下事情的始末
问题描述:
比如:此时我 redis 上有这几个 key
然后使用 ttl [keyName]
指令查看 key 的有效时长
可以看到我这个 serialId
的 key 有效时长是 -1 ,也就是永不过期
正常情况下这种 key 是不会被删除掉的
我不知道何故,我的数据每隔一段时间就会被清除,比如过了几个小时后再去查看我 redis 中的数据
serialId 和 serialNumberId 都平凡无故的不见了
这时我才注意到,为什么我的 reids 上有 backup1
、 backup2
、 backup3
、 backup4
这几个 key ,我也没插入过这几个 key 啊,查看这几个 key 对应的值再结合之前提到的博客才知道,有人连接上了我的 redis ,然后在我 redis 上存入了一些命令,只要这些命令一执行,就会清掉我 redis 中所有的数据。
T.T 唉 ~ 虽然很难想象到会发生这种事情,但也算是个教训,因为 redis 是刚刚放到服务器上面的,也没设置密码什么的,就让不怀好意的人钻了空子,由此可见网络安全是多么的重要
解决方案:
遂即我就设置了 reids 的密码,我是使用命名的方式设置 redis 密码的
设置命令:config set requirepass [密码]
查看密码:config get requirepass
注意:这种方式设置密码并不会同步到配置文件中,重启 redis 就会失效,想重启 redis 也能设置密码可以修改 redis 的配置文件,参考连接:redis如何设置密码
删除这几个存放命令的 key
这样要想进你的 redis 就必须要密码校验了
登陆命令:auth [密码]
现在我 redis 上的数据就没有动不动被清除了
总结:
由此可见网络安全是多么的重要,不过也得多亏别人,让我又复习了一遍 redis 的删除和淘汰策略
以上文章内容有什么不合理的地方,或者可以改进的地方希望能被指出