具体场景:
现在偶尔会出现一个问题:执行第 2 步操作时,有时候校验 ticket 会不通过
排查一下: redis 主从偏移有点大,造成主从数据不一样,校验接口走从库时查询不到 ticket 所以校验失败,大概是网络原因?
想到的一个解决方案是,校验接口强制走主库,但是哨兵模式下主库是不固定,有啥办法强制走主库吗( Java 语言的 SDK )?
或者有更好的解决方案?
1
gdcbhtd 2023-11-14 13:30:10 +08:00
伪代码:
JedisSentinelPool pool = new JedisSentinelPool("mymaster", sentinels, config); Jedis jedis = pool.getResource(); // 获取当前主库的地址和端口 HostAndPort currentMaster = pool.getCurrentHostMaster(); // 确保读操作只在主库上执行 jedis.slaveofNoOne(); String ticket = jedis.get("ticket"); jedis.close(); pool.close(); |
2
wenhuacode 2023-11-14 14:15:34 +08:00
那这样搭建主从的意义不就没了, 解决偏移量的问题?
|
3
kikione 2023-11-14 14:27:32 +08:00
是可以读主库的,加一个时间戳标记,1 分钟以内的就读主库。
|
4
zhongpingjing OP |
5
zhongpingjing OP @wenhuacode 偏移量的问题有啥解决方法,我没有思路,请教一下
|
6
qwwe01 2023-11-14 23:00:16 +08:00
如果不想只读主库,有以下建议:
1.排查为何存在数据同步延迟太大的问题,如果解决了能否 100%解决问题 2.如果为了 redis 高可用方案,可以使用 redis cluster 分散服务压力 |