//cache.add (key ,value); 如果service1 分布式部署,又同时操作了一个数据库记录,要对某个字段做更新,而这个字段的值,又依赖于之前的值,如何保证数据的正确性? public void sevice1(){ if(cache.add(key,value)){ //可以添加进去,证明是首次调用。 }else{ //不可以添加进去,证明是服务已经被调用了。 } 这样就避免了在分布式环境中的服务调用。 } 其实数据库本身就有行级锁,可以做到这一点。 并发锁 解决的问题,是一个对象在多个线程之间共享了,并且多个线程在操作对象,修改状态。 分布式锁解决的问题 是多实例部署服务的时候,避免同一个服务被调用的时候出现问题。 (问题举例:服务的逻辑 获取微信token,设置缓存, 如果两个客户端分别调用了两台服务器的同一个服务,这个时候同时检查缓存中没有, 同时请求微信服务器,获取token,同时设置缓存,我们知道前一个获取到的token是 无效的,因为后一个会重置它,这样,如果缓存设置的时候,把错误的token设置进去, 就一直会有问题了。这个时候需要的是分布式锁。 )
memcache 缓存 分布式锁原理
最新推荐文章于 2024-07-31 11:52:58 发布