memcached 实现读锁

memcached锁,网上大多就介绍乐观锁(cas)[1.2.4以上版本,telnet连接上memcache使用status可以查看版本号]。核心就是每次写入数据的时候使用 cas($cas_token,$key,$value);

 

今天介绍实现一种读锁的方法,原理是给每条数据增加一个KEY(数据锁)。在读这条数据前先加锁,先用memcache::add($key_lock,$value,$time);

如果写入成功,再去读取业务数据。(此时如果另一个客户端来加锁[memcache::add($key_lock,$value,$time)]就会失败),当业务数据读取完的时候,删除$key_lock(解开锁);

 

转载于:https://www.cnblogs.com/naci/p/3641202.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 分布式锁的实现方式有基于数据库、基于缓存、基于Zookeeper等。在Java中,可以使用Redis实现基于缓存的分布式锁,也可以使用Zookeeper实现基于Zookeeper的分布式锁。具体实现可以参考相关的开源库或者自己实现。 ### 回答2: 分布式锁是用于保护共享资源在分布式系统中同步访问的一种机制。常见的分布式锁实现方式包括: 1. 基于数据库的实现方式:可以通过数据库的唯一键或乐观锁来实现分布式锁。Java中可以使用JDBC连接数据库,通过更新数据库中的一行数据来获取和释放锁。 2. 基于缓存的实现方式:利用分布式缓存如Redis或Memcached实现分布式锁。可以利用缓存的原子性操作,如SETNX(set if not exists)指令来获取锁,使用DEL命令释放锁。 3. 基于ZooKeeper的实现方式:ZooKeeper是一个高性能的分布式协调服务,可以实现分布式锁。Java中可以使用Zookeeper提供的API来创建临时顺序节点,通过判断节点顺序来获取和释放锁。 4. 基于Redisson的实现方式:Redisson是一个用于Java的分布式锁和分布式服务框架。它提供了基于Redis的分布式锁实现,可以直接在Java代码中使用Redisson的锁对象来实现分布式锁。 在Java中,可以使用如下方式实现分布式锁: 1. 基于数据库的实现方式,使用JDBC连接数据库,通过更新数据库记录来获取和释放锁。 2. 基于缓存的实现方式,可以使用Jedis等Redis客户端连接Redis,通过SETNX命令获取锁,DEL命令释放锁。 3. 基于ZooKeeper的实现方式,使用Zookeeper提供的API,创建临时顺序节点实现分布式锁的获取和释放。 4. 使用Redisson框架,利用其提供的分布式锁对象实现分布式锁。可以使用Redisson的RLock对象来获取和释放锁。 以上是常见的分布式锁的实现方式及Java中的实现方法,可以根据具体的需求选择合适的方式来实现分布式锁。 ### 回答3: 分布式锁是一种用于保证分布式系统中数据一致性和并发控制的技术。常见的分布式锁实现方式包括基于数据库、基于缓存和基于队列等。 1. 基于数据库的实现方式:可以通过数据库的事务特性和唯一索引来实现分布式锁。具体实现方法是在数据库中创建一张表,使用唯一索引来确保同一时刻只有一个线程能够获得锁。Java代码中可以通过数据库的锁机制(如行锁或悲观锁)来保证并发控制。 2. 基于缓存的实现方式:使用分布式缓存如Redis或Memcached实现分布式锁。具体实现方法是在缓存中设置一个特定的键值对作为锁标识,并设置过期时间,只有获取锁的线程能够对该键进行操作。Java代码中可以使用缓存客户端的原子性操作来实现。 3. 基于队列的实现方式:使用消息中间件如ActiveMQ或RabbitMQ来实现分布式锁。具体实现方法是将需要保证一致性的操作封装为一个消息,只有获取锁的线程能够消费该消息进行操作。Java代码中可以使用消息中间件提供的幂等性来实现。 无论采用哪种方式实现分布式锁,都需要注意处理各种异常情况,避免死锁和脏读等问题。另外,为了保证锁的可靠性和高效性,还需要考虑锁的重入性、超时设置和锁的释放等方面的问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值