java连redis-sentinel连不上,接下来如何排查?
java连redis-sentinel连不上Java连接redis-sentinel连不上redis-sentinel是在k3s上部署的,使用helm部署的用命令行查看一切正常但是使用java连接报错,详细信息如下环境准备因为java的pod里面是没有redis的,所以下载一个redis-cli,然后拷贝的pod里面,再用命令行连接 {代码...} 安装redis到pod中 {代码...} 直接连接主节点...
2 回答3.4k 阅读
参考这篇文章,我来翻译一下:
这是一个方法,它具有原子性:
这也是一个方法,它也具有原子性:
所谓原子性,就是方法里的语句会顺次执行,不会被打断。
但是你把它俩复合起来,它就不再是原子的了:
在这里开了两个线程,一个执行第一个方法,另一个执行第二个方法,第一个方法一上来先获取了向量的尺寸,然后就开始休眠了,趁第一个方法不注意,第二个方法进来删除了向量里最后一个元素,等第一个方法醒过来,再想找最后一个元素找不着了,就抛出错误了,所以复合操作不具有原子性,中间被插入打断了。
解决的方法就是加个锁:
synchronized
就是同步的意思,同步的意思是说这一步迈不完,下一步不能开始,所以这样就保证了整个操作依然是原子级的,不存在被插入的可能。