迁Aliyun Redis遇到的坑分析
这篇文章主要介绍"迁Aliyun Redis遇到的坑分析",在日常操作中,相信很多人在迁Aliyun Redis遇到的坑分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"迁Aliyun Redis遇到的坑分析"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
背景:
从自建 redis(CacheCloud)到迁移到 aliyun redis
1. 踩"坑"一
问题:
平常小伙伴们在项目中可能用到redis key expire nofity的场景(比如:处理延时任务等),但是发现迁移后 key 过期通知总是比未迁移之前的时间慢一个数量级(基本上分钟级别,社区版基本上秒级别),及时在很少的 key 情况也是一样的;之前也和 aliyun support 小伙伴沟通过,给出反馈都一个星期多了~
定位:
了解过 redis 的过期策略以及淘汰策略的小伙伴,应该都知道针对惰性删除测试,是遍历整个 db,随机选取 20 个 key(默认),淘汰;但是,aliyun redis(使用的是 4.x 版本)的默认 db 数是 256(社区版的是 16)
解决:
调整项目 redis db 数为16
2. 踩"坑"二
问题:
迁移后的 redis,在域名(aliyun redis 针对社区版的主从,哨兵,集群模式等暴露出一个域名)指向 ip 发生变化的时候,客户端通过域名访问的时候,依然解析指向的是老的 ip,导致连接不上 redis~
定位:
查看 JedisConnectionFactory 的源码可以发现(以集群为例),在初始化 afterPropertiesSet 时,已经将域名解析成对应的 ip 缓存起来了,故之后域名切换 ip 后,依然访问的是之前的 ip
private JedisCluster createCluster() { JedisCluster cluster = createCluster(this.clusterConfig, getPoolConfig()); JedisClusterConnection.JedisClusterTopologyProvider topologyProvider = new JedisClusterConnection.JedisClusterTopologyProvider(cluster); this.clusterCommandExecutor = new ClusterCommandExecutor(topologyProvider, new JedisClusterConnection.JedisClusterNodeResourceProvider(cluster, topologyProvider), EXCEPTION_TRANSLATION); return cluster; }
解决:
切换域名 ip 后重启服务
到此,关于"迁Aliyun Redis遇到的坑分析"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!