利用memcached实现并发时候,设置缓存锁

利用了memcached中 add()方法。

memcached:add($key) 成功时返回 TRUE, 或者在失败时返回 FALSE。 如果这个key已经存在返回FALSE。

利用add的原子性来判断是否需要执行业务代码。

/**
 * @param null $key
 * 
 * @author [email protected]
 */
public function add_cache($key=null)
{
    $memcacheClass = new Memcached();
    $data = $memcacheClass->get($key);
    if(! $data) {
        do {
            $write_key = ‘write‘;
            if($memcacheClass->add($write_key, $write_key, 10 * 60)) {
                // 加锁成功,执行业务操作
                $data = $model->get();
                $memcacheClass->set($key, $data, 30 * 60); // 将数据存入缓存
                $memcacheClass->delete($write_key);
                $is_retry = false;
            } else {
                // 如果加锁不成功,等待一段时间之后重试
                sleep(10);
                $is_retry = true;
            }
        } while($is_retry);
    }
}
时间: 2024-12-20 07:34:03

利用memcached实现并发时候,设置缓存锁的相关文章

利用索引降低并发事务引起的锁【转】

时常,来自不同连接的线程会对同一张表进行读/更新操作,这种并发操作会导致阻塞,同时SQL Server会自动处理以防止脏读.然而,有种情景很常见,那就是每个连接要读/更新的行互相排斥,换句话说,就是各个连接读/更新的行没有交集.在这片文章中,将像大家展示如何恰当地使用索引来降低阻塞的发生,以便多个读/更新能够同时操作同一张表. 创建TEST表如下: SET ANSI_NULLS ON GO   SET QUOTED_IDENTIFIER ON GO   CREATE TABLE [dbo].[T

AWS中使用Memcached作为hibernate的二级缓存

我想做互联网的都会接触到云.认识的很多人他们用的阿里云,我们选择的是AWS . 我想国内用AWS的也会慢慢的增多,自动扩展服务器可以防止攻击,中国区第二个机房也已经建好了.保证了高可用.但是有一个问题就是论坛上资料全是英文的,这个一点没法和阿里云比,都是中文. 和大多数互联网产品一样,我们还处于初期开发阶段,但是用到的aws的服务还是很多的. 我们选择了Memcached作为haibernate的二级缓存,因为AWS本身托管Memcached服务,集群环境不需要我们自己搭建. 和大多数人一样,开

利用Squid反向代理搭建CDN缓存服务器加快Web访问速度

2011年11月26日 ? Web服务器架构 ? 评论数 2 案例:Web服务器:域名www.abc.com IP:192.168.21.129 电信单线路接入访问用户:电信宽带用户.移动宽带用户出现问题:电信用户打开www.abc.com正常,移动用户打开www.abc.com很慢,甚至打不开解决方案:在移动机房放置一台CDN代理服务器,通过智能DNS解析,让电信用户直接访问Web服务器.让移动用户访问CDN代理服务器,解决移动用户访问Web服务器慢的问题具体操作:CDN代理服务器:系统:Ce

利用Memcached+Apache Tomcat+Nginx实现负载均衡

 Memcached+Apache Tomcat+Nginx 系统环境:rhel6.5_x64 selinux and iptables disabled 主机角色: node1: 172.25.44.22:Nginx Tomcat Memcached node2: 172.25.44.33:Tomcat Memcached 软件下载:http://www.nginx.org http://code.google.com/p/memcached-session-manager/ Part1 Me

Ehcache(04)——设置缓存的大小

设置缓存的大小 目录 1     CacheManager级别 2     Cache级别 3     大小衡量 4     配置大小示例 缓存大小的限制可以设置在CacheManager上,也可以设置在单个的Cache上.我们可以设置缓存使用内存的大小,也可以设置缓存使用磁盘的大小,但是使用堆内存的大小是必须设置的,其它可设可不设,默认不设就是无限制.在设置缓存大小的时候,我们可以设置缓存使用某一个存储器的最大字节数,也可以设置缓存在某一个存储器上最多存放元素的数量. 1       Cach

利用多线程实现并发调用,实现一个存钱多人取钱函数

1 package com.thread; 2 3 /** 4 * @author lisj 5 * 利用多线程实现并发调用 6 * 根据条件实现线程的等待和运行 7 */ 8 9 public class ThreadMoney { 10 11 public static void main(String args[]){ 12 13 Moneyclass money=new Moneyclass(); //实例化Money类 14 getmoney son1=new getmoney(mon

SSH整合缓存之-Memcached作为hibernate的二级缓存

Hibernate本身不提供二级缓存,所以需要使用第三方插件来作为二级缓存:本次使用memcached作为Hiberbate的二级缓存:添加步骤如下: 一.需要安装memcached服务端 1. 下载memcached的windows稳定版, (本次测试使用下载memcached http://www.newasp.net/soft/63735.html)2. 在CMD下进入memcached解压路径:输入 memcached.exe -d install" 安装. 3. 再输入:memcach

memcached基于socket访问memcache缓存服务器

memcached基于socket访问memcache缓存服务器 操作memcache常用三种方法: 1.memcache基于php_memcache.dll扩展(php扩展) 2.memcached基于php_memcached.dll扩展(php扩展) 3.memcached基于socket访问(基于网络) memcached-client.php 调用很简单,调用方法如下: <?php header("content-type:text/html; charset=utf-8&quo

Java线程并发中常见的锁--自旋锁 偏向锁

随着互联网的蓬勃发展,越来越多的互联网企业面临着用户量膨胀而带来的并发安全问题.本文着重介绍了在java并发中常见的几种锁机制. 1.偏向锁 偏向锁是JDK1.6提出来的一种锁优化的机制.其核心的思想是,如果程序没有竞争,则取消之前已经取得锁的线程同步操作.也就是说,若某一锁被线程获取后,便进入偏向模式,当线程再次请求这个锁时,就无需再进行相关的同步操作了,从而节约了操作时间,如果在此之间有其他的线程进行了锁请求,则锁退出偏向模式.在JVM中使用-XX:+UseBiasedLocking pac