redis的一些注意点:从单机版到集群版

2 篇文章 0 订阅
博客讲述了在面临Redis单机版性能瓶颈时,如何从单机迁移到集群版的过程。遇到的问题包括数据导入、版本兼容性、连接配置等,并最终通过降级Redis版本和修复代码实现性能提升。在阿里云中,比较了5.0和6.0集群版的差异,并详细描述了迁移过程中使用的工具和解决方案。
摘要由CSDN通过智能技术生成

redis的一些注意点:从单机版到集群版

之前有个项目,人流比较大。然后压测上不去,看监控,发现redis的cpu满了。当时提出一个说法,redis的单线程导致cpu只会用到一核,这样的话,如果连接数太多,没开启aof,导致rdb太多次。大key/value,keys耗时操作。内存太少,导致内存满了以后一直在驱逐无用内存都容易导致cpu打满,然后导致体现在前端的话就是很卡。现在就是要优化访问速度。

当时提出的方案是主从架构,加哨兵。但是这个架构不是只能保证高可用性吗,对性能没提升的。

然后就打算搭redis集群。但是我们没有搭redis集群的经验,那只能去阿里云买了。

然后发现阿里云有两个版本的集群,一种是redis5.0集群版,他的架构其实是通过代理,然后分发到各个分片上,这样的话,对外表现其实还是一个redis,但是内部实现其实扩容了。一个是redis6.0版社区版,他的架构可能是跟redis的自己集群一致的,虽然连接上还是一个节点,但是后续可能是通过这个节点可以获取其他的节点信息。

当时方案是,将生产的数据导入到阿里云5.0,阿里云的导入数据,只能通过他的工具来导入,然后我们测试了下,我们生产的数据是6.0的,然后导入不支持。

然后方案我们切换为阿里云6.0,然后发现连接连不上,然后排错来排错去。1.是白名单的问题。2.是vpc的问题,不同网段是连不上的。3.代码的问题。

阿里云redis6.0的集群连接,跟redis的普通连接一样,要带上一个参数-c,redis-cli -c -h 地址 -p 端口。而我们的普通的代码连接redispool这样的都是不带c的。自然操作不了。然后我修改了代码,改成jediscluster(这个还不和jedis适配,工具类都要大改),redisson的版本还要高一点,不然报错。然后连接和启动的时候,成功连上了,但是集群版不支持keys操作。改代码是不可能了,时间不够。

怎么办呢,然后发现我们有个服务是也用的阿里云的redis集群版,但是代码是没问题的啊,keys也能用啊。然后一看,发现了阿里云的6.0和5.0的架构区别。

那现在方案是我们生产6.0导入到本地5.0,然后本地5.0导入到阿里云5.0,然后测试。

redis6.0降级到本地5.0的话,当时是打算直接rdb直接放入然后启动,然后发现好像代码连接有问题,部分数据结构(zset)读取有问题,其他没问题。(可能是r代码的原因,redisson客户端升级了,导致key的序列化不同了,导致拿不到数据)。

然后怀疑到redis的RDB文件不是向下兼容的,所以不能直接使用RDB文件进行迁移,然后就找工具。找到了rdbtools

https://www.cnblogs.com/gaojinshun/p/15497214.html

然后测试了还是拿不到。

然后又找了,redisdump

https://www.cnblogs.com/yanjieli/p/13085481.html

都不行,都要怀疑人生了,然后发现。emmm,代码的pom依赖没还原,导致redisson的客户端版本不一致 估摸是不同版本的客户端key的序列化不同,不能混用。

后来就还原版本,就没问题了。压测了下,发现确实瓶颈不在redis了,压测的时候cpu打满,redis的cpu才25。现在瓶颈估计是tomcat或者nginx了。

qps1000到4000,能用了。

现在思路就是找个时间,停服。将生产的数据导入到本地5.0,然后导入阿里云5.0。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值