技术分享
🗒️Redis中不活跃数据的迁移的架构设计
00 分钟
2023-6-25
2023-11-23
type
status
date
slug
summary
tags
category
icon
password
😀
前言: 欢迎您来到我的知识海洋~
 
redis 中的数据是存在内存的,如果一个用户很久没有登录过服务器,那么他的数据就是不活跃数据。
这部分不活跃数据会占用大部分 Redis 的存储空间。
我们可以将这些不活跃数据迁移到磁盘数据库中,如 MYSQL。
获取数据时,先从 Redis 中获取,Redis 中数据不存在时,再从 MYSQL 中获取数据。
redis 中的数据是存在内存的,如果一个用户很久没有登录过服务器,那么他的数据就是不活跃数据。
这部分不活跃数据会占用大部分 Redis 的存储空间。
我们可以将这些不活跃数据迁移到磁盘数据库中,如 MYSQL。
获取数据时,先从 Redis 中获取,Redis 中数据不存在时,再从 MYSQL 中获取数据。
迁移的具体实现步骤如下:
  1. 利用scan命令遍历 Redis 的键空间。Scan 命令通过反向二进制迭代器循序渐进的遍历 Redis 的键空间,它的特点是有重复到不会漏掉 key。
  1. 通过object idletime key ...命令批量(一次 scan 的结果)获取 key 的空转时间,通过这个时间来判断是否为不活跃数据。例如我们认为一个月以前的数据为不活跃数据,空转时常大于一个月就是不活跃数据。
  1. 通过type key ...命令批量获取 key 的类型并过滤。返回的类型有 string (字符串)、list (列表)、set (集合)、zset (有序集)、hash (哈希表)、stream (流)。我们只迁移是 string 类型的 key(注:为什么不迁移其他类型的 key,大家可以思考一下)。
  1. 通过ttl key ...命令批量获取 key 的过期时间,判断是否设有过期时间。为了简单处理,我们不处理包含有过期时间的 key。
  1. 获取 key 最新的数据, 并计算 md5sum。将最新的[key,value]保存到 MYSQL 中。再次获取 key 的最新数据,并计算 md5sum。
  1. 对比两次 md5sum。如果相同就删除 Redis 中的数据,key 完成迁移,如果不同(表示 key 被修改,变成了活跃数据)就结束迁移过程。求两次 md5sum 的原因是,将数据保存到 MYSQL 这段时间内,有可能用户刚好访问并修改了数据。
 

💡
欢迎您在底部评论区留言,一起交流~
上一篇
常用网站导航
下一篇
自我时间管理

评论
  • Valine