事件缘由:
公司redis升级为带密码访问后,同事反馈使用redisson加锁一两秒,当时使用的版本是3.16.0
有些同事的3.11.6版本没有类似的问题出现,临时降到3.11.6版本
调研结果:
3.14.1版本开始,redisson引入了wait命令
这个wait命令将阻塞当前客户端,直到当前Session连接(主节点上)所有的写命令都被传送到指定数据量的slave节点。
如果到达超时(以毫秒为单位),则即使尚未完全传送到达指定数量的salve节点,该命令也会返回(成功传送到的节点的个数)。
运维redis升级改为带密码访问,只是在主节点配置了requirepass,并没有在从节点配置masterauth
requirepass和masterauth是不一样的,requirepass是配置在主节点的,masterauth是配置在从节点的,两边配置要一样从节点才能和主节点连接上进行主从复制。
requirepass作用:对登录权限做限制,redis每个节点的requirepass可以是独立、不同的
masterauth作用:主要是针对master对应的slave节点设置的,在slave节点数据同步的时候用到。
结论分析:
所以其实不是redisson高版本有问题,是我们在redis升级为带密码访问的时候只配置了requirepass,然后redisson的3.11.6版本没问题,但是3.16.0版本有问题,是因为redisson的3.14.1版本开始引入了wait命令,写命令传送到slave节点的时候因为没有配置masterauth所以失败直至达到超时时间返回,所以整体感觉下来就是耗时增加了,但是加锁还是正常的。