沃梦达 / 编程技术 / 数据库 / 正文

Redis 迁移 ssdb(一)

Redis 迁移 ssdb(一)由于公司机器不够,为了节约成本,推荐用的缓存从redis换成ssdb,本文记录自己所采用的方法和踩的坑。一、数据整理推荐使用的redis,存放的数据可以分为下面几类:a 用户的缓存,用来过滤近...

Redis 迁移 ssdb(一)

由于公司机器不够,为了节约成本,推荐用的缓存从redis换成ssdb,本文记录自己所采用的方法和踩的坑。

一、数据整理

推荐使用的redis,存放的数据可以分为下面几类:a 用户的缓存,用来过滤近期给用户推过的商品 b 相似商品结果,用来快速得到某种商品的相似商品列表 c 静态数据,用来获取商品的静态信息 d 冷启动数据,热门的商品列表 e 用户行为数据,有些用户行为数据没有放在uc中但是推荐会用到。这些数据有大约45种key前缀,key的数目约有2千多万。必须先要整理,才能做好迁移。

数据整理分为两个方面,a 清理不再使用的数据 b 获取所有现在使用的key和类型

如果团队有良好的习惯,灌入redis的数据都设定了有效期的话,a是可以不做的。但是毕竟会有那些不再使用而有占用空间较多的数据,这就需要把它们清理掉。因为我们的redis集群是和其他团队混用的,所有里面的数据有的是推荐使用的,我们拿出自己需要的数据。

1.1 步骤a的方法

我们有一个列表,记录了之前向redis灌入的数据的类型和前缀,多亏有了它,我才知道哪些key是有用的,大概有多少key前缀。我整理这个列表,就能获得哪些key前缀是我需要的,哪些是不再用的数据的前缀。

1.2 步骤b的方法

redis有个设置,可以在某个时间,将数据全部导出到硬盘上,形成dump结尾的文件。这个文件包括了redis备份的时刻,里面所有的数据信息,包括key的类型、名字、有效期、大小等。我们还需要一个工具来把这些信息从dump文件中提取出来。我用的是这个工具https://github.com/sripathikrishnan/redis-rdb-tools#generate-memory-report

文档很详细,我就不介绍了。

 

二、数据迁移

我们知道了redis中哪些数据是我们需要的,迁移到ssdb的时候还需要以下几点:a redis和ssdb的数据结构类型不同 b ssdb不支持redis的某些特性。

我总结的主要两点不同

a ssdb的结构中除了string类型,其他类型不支持expire函数设定超时时间。redis中是任何类型的key都可以调用expire函数设定超时时间,很方便。但是我们使用的数据大部分是需要一个超时时间,过期之后自动清除的。后来采用这个办法,对于string之外的其他类型的key1,我们给这个key1增加一个附属的key2,其中key2 是Stirng类型,并且值是key的过期时间。然后我们再写一个离线的任务,去获取所有的key2,然后根据时间,删除key1.后来得知ssdb不支持通过key前缀,扫描出所有的key,我们又把key2变成sorted set中一个项。

B ssdb中的sorted set结构,每一项的权重必须是int类型的整数,而redis中是浮点数。如果直接导入到ssdb中那么权重都会变成0. 我们为了解决这个问题,就把所有的权重都乘1000,增大权重。

清楚了上面几点,我们就可以把redis数据迁入ssdb了,我写了个脚步,可以参考。

https://github.com/delltower/redis_to_ssdb

下面还需要检查原来连接redis的代码是否可以使用,另外一篇再说。

本文标题为:Redis 迁移 ssdb(一)

基础教程推荐