redis 批量删除key_Redis 设计之不活跃数据迁移备份

该博客讨论了如何处理Redis中的不活跃数据,通过遍历键空间,判断空转时间和类型,筛选出不活跃的string类型数据,然后迁移至MySQL。在迁移过程中,检查数据的修改情况,确保数据一致性,有效释放Redis存储空间。
摘要由CSDN通过智能技术生成

d60084437e85a7d73fa3307d109eb751.png

redis 中的数据是存在内存的,如果一个用户很久没有登录过服务器,那么他的数据就是不活跃数据。
这部分不活跃数据会占用大部分 Redis 的存储空间。
我们可以将这些不活跃数据迁移到磁盘数据库中,如 MYSQL。
获取数据时,先从 Redis 中获取,Redis 中数据不存在时,再从 MYSQL 中获取数据。
迁移的具体实现步骤如下:

  1. 利用scan命令遍历 Redis 的键空间。Scan 命令通过反向二进制迭代器循序渐进的遍历 Redis 的键空间,它的特点是有重复到不会漏掉 key。
  2. 通过object idletime key ...命令批量(一次 scan 的结果)获取 key 的空转时间,通过这个时间来判断是否为不活跃数据。例如我们认为一个星期以前的数据为不活跃数据,空转时常大于一个星期就是不活跃数据。
  3. 通过type key ...命令批量获取 key 的类型并过滤。返回的类型有 string (字符串)、list (列表)、set (集合)、zset (有序集)、hash (哈希表)、stream (流)。我们只迁移是 string 类型的 key(注:为什么不迁移其他类型的 key,可以思考一下)。
  4. 通过ttl key ...命令批量获取 key 的过期时间,判断是否设有过期时间。为了简单处理,我们不处理包含有过期时间的 key。
  5. 获取 key 最新的数据, 并计算 md5sum。将最新的[key,value]保存到 MYSQL 中。再次获取 key 的最新数据,并计算 md5sum。
  6. 对比两次 md5sum。如果相同就删除 Redis 中的数据,key 完成迁移,如果不同(表示 key 被修改,变成了活跃数据)就结束迁移过程。求两次 md5sum 的原因是,将数据保存到 MYSQL 这段时间内,有可能用户刚好访问并修改了数据。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值