在不影响redis性能的情况下,从服务器中批量删除redis数据
- 业务背景:emmmmm之前在完成功能的时候,由于忘了给定时任务设置参数,从redis中统计完数据后,没有对redis的数据进行清除,导致redis占用服务器的内存越来越高,所以需要手动将今天之前的数据进行清除,而不影响对当天数据的统计,介个时候,就出现了下面的流程,之前也有参考网上的一些做法,就比如用master/slave的方式,还有用Lua脚本,这些也是一些解决方案,但是我并没有用,因为一看,就很高级hhhhhh,臣妾做不到啊!
方式一:
-
进入到redis容器中(PS:我们公司使用的是docker作为应用容器的,也就是把项目部署在docker中,所以redis也固然挂载在docker中)
# docker exec -it redis-name bash
-
进入到redis容器后,开始删除操作,这时,你可以打开再打开一个选项卡,进入到redis的客户端直接查看删除前跟删除后的数据对比,但是谨慎(不要)使用keys * 命令,可以用scan命令,
#进入到redis客户端
docker exec -it redis-name redis-cli
#以下redis客户端
127.0.0.1:6380> scan 1 match name* count 1000具体命令可以参考redis文档:redis命令参考文档
linmm@25weaod23j4l:/# redis-cli scan 1 match name* count 1000 | xargs redis-cli del
以上命令表示,通过管道的方式,进入redis客户端中,模糊匹配到以name为开头的key,对匹配到的key进行删除,但是这样做的弊端就是可能删除不完整,因为scan不一定会把所有匹配到的key都罗列出来。但是直接用keys会造成阻塞,所以就用了这种方式。
方式二:
-
直接在服务器操作,通过linux连接redis,结合redis和linux相关命令实现批量删除。
# redis-cli -p redis服务端口 -h redis的hostname scan 1 match name* count 1000 | xargs redis-cli -p redis服务端口 -h redis的hostname del
以上~
有什么更好的建议欢迎提出来哦