文档章节

memcache高并发

m
 mirrorgdit
发布于 2016/04/20 13:20
字数 536
阅读 13
收藏 0
点赞 1
评论 0

memcached的原子性操作

memcached是原子的吗?
当然!好吧,让我们来明确一下:
所有的被发送到memcached的单个命令是完全原子的。如果您针对同一份数据同时发送了一个set命令和一个get命令,它们不会影响对方。它们将被串行化、先后执行。即使在多线程模式,所有的命令都是原子的,除非程序有bug:)
命令序列不是原子的。如果您通过get命令获取了一个item,修改了它,然后想把它set回memcached,我们不保证这个item没有被其他进程(process,未必是操作系统中的进程)操作过。在并发的情况下,您也可能覆写了一个被其他进程set的item。

memcached 1.2.5以及更高版本,提供了gets和cas命令,它们可以解决上面的问题。如果您使用gets命令查询某个key的item,memcached会 给您返回该item当前值的唯一标识。如果您覆写了这个item并想把它写回到memcached中,您可以通过cas命令把那个唯一标识一起发送给 memcached。如果该item存放在memcached中的唯一标识与您提供的一致,您的写操作将会成功。如果另一个进程在这期间也修改了这个 item,那么该item存放在memcached中的唯一标识将会改变,您的写操作就会失败。

根据这篇文章,在php手册找到了memcache的cas方法,实现原子性的操作。http://php.net/manual/zh/memcached.cas.php

其中的例子:

$m =new Memcached();
$m->addServer('localhost', 11211);
do {
    /* 获取ip列表以及它的标记 */
    $ips =$m->get('ip_block', null, $cas);
    /* 如果列表不存在, 创建并进行一个原子添加(如果其他客户端已经添加, 这里就返回false)*/
    if ($m->getResultCode() == Memcached::RES_NOTFOUND) {
        $ips =array($_SERVER['REMOTE_ADDR']);
        $m->add('ip_block',$ips);
    /* 其他情况下,添加ip到列表中, 并以cas方式去存储, 这样当其他客户端修改过, 则返回false */
    }else {
        $ips[] = $_SERVER['REMOTE_ADDR'];
        $m->cas($cas,'ip_block',$ips);
    }  
}while ($m->getResultCode() != Memcached::RES_SUCCESS);


© 著作权归作者所有

共有 人打赏支持
m
粉丝 3
博文 33
码字总数 36719
作品 0
深圳
高级程序员
php使用memcache处理缓存数据

一般来说,如果并发量不大的情况,使不使用缓存技术并没有什么影响,但如果高并发的情况,使用缓存技术就显得很重要了,可以很好的减轻数据库和服务器的压力,当然解决高并发的技术有很多,这...

Doublec ⋅ 2014/09/19 ⋅ 3

php的memcache和memcached扩展区别

memcache的文档在:http://pecl.php.net/package/memcache memcached的文档在:http://pecl.php.net/package/memcached 首先看下时间,memcache最早是在2004年2月开发的,最后更新是在2013年...

庆沉 ⋅ 2015/07/15 ⋅ 0

PHP 框架--EasyMVC

程序名称:EasyMVC 最新版本:v.1.1.20120924 开发者:宋红光 专为企业和个人打造的安全稳定,并发性高 ,速度快,简单易用,海量数据处理能力的免费开源PHP框架,有以下特点: v1.1 新增队列...

easymvc ⋅ 2012/08/31 ⋅ 0

php的memcache和memcached扩展区别

老生长谈的问题了。我这里就整理一下。 memcache的文档在:http://pecl.php.net/package/memcache memcached的文档在:http://pecl.php.net/package/memcached 首先看下时间,memcache最早是...

王二狗子11 ⋅ 01/07 ⋅ 0

跨服务器Session共享

伴随网站业务规模和访问量的逐步发展,原本由单台服务器、单个域名的迷你网站架构已经无法满足发展需要。 此时我们可能会购买更多服务器,并且启用多个二级子域名以频道化的方式,根据业务功...

玄空 ⋅ 2013/05/14 ⋅ 0

缓存-memcache

memcache是c语言编写的内存缓存,常见同php协同应用,支持多种语言。对于java web有三种常用的client Memcached客户端程序 Memcached的java客户端已经存在三种了: 官方提供的基于传统阻塞i...

HZCoder ⋅ 2016/02/18 ⋅ 1

WEB应用混合型解决方案

普通页面展示、数据查询使用PHP、MySQL 高并发,复杂的计算使用C/C++、PostgreSQL 服务器用Linux/BSD UNIX 进一步: 配合NoSQL(MongoDB)、Memcache完成分布式部署。...

朱宗鑫1 ⋅ 2012/07/10 ⋅ 0

完美的复杂的系统构架 -- 两个凡是

什么 mysql , memcache, redis, haddop,zabbix ,lvs , big data .................. 全给我上, java, php,python, c++,perl, shell。。 全部用上 什么性能啊, 高并发, 并行处理, 全都没...

宏哥 ⋅ 2015/12/17 ⋅ 3

XRZZYW带领你领略Nginx的强大,结合MM的风骚

@font-face { font-family: "Times New Roman"; }@font-face { font-family: "宋体"; }@font-face { font-family: "Calibri"; }@font-face { font-family: "DejaVu Sans"; }@font-face { fo......

Xc__ ⋅ 04/12 ⋅ 0

memcached 系列知识 1

menmcache 【1】memcache软件客户端软件安装的是memcache 服务端软件安装的是memcached 【2】memcached的作用:在传统场景中 多数的web服务器都会将数据保存到 关系型数据库中,但随着数据量...

小辛linux ⋅ 2017/06/13 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

vue使用mockjs

在使用vue开发的时候,一直疑惑与mockjs怎么用,开了mockjs的开发文档,还是一脸蒙蔽,无从下手!mockjs在前后端分离开发上进行模拟数据,是不可避掉的一环。在网上看了一些博文还有查阅了其...

JamesView ⋅ 20分钟前 ⋅ 0

解决问题的思路

1.相对来说,程序逻辑解决问题的思路应该更加趋向于通过逻辑结构来解决问题,而不是通过更小的类级别和方法级别的改进 2.类级别和方法级别的改进需要的技术能力更高一点

th778899 ⋅ 26分钟前 ⋅ 0

HTTP请求状态及jQuery AJAX请求异常处理

上一周调优一个项目的Js部分,其中一个严重的问题就是在页面初始化数据时,没有对异常进行处理, 导致Loading一直在等待中,无提示无处理。在用户体验上很不好,即使网络条件无法保证,在出错...

临江仙卜算子 ⋅ 27分钟前 ⋅ 0

error code 1874. innodb is in read only mode--报错解决

参考网页 https://zhidao.baidu.com/question/746894876932022292.html https://blog.csdn.net/shushugood/article/details/80226767 问题背景 创建了一个数据库然后想删除,因为自己本机性能......

karma123 ⋅ 28分钟前 ⋅ 0

JVM系列:jinfo命令详解

jinfo全称Java Configuration Info,主要作用是实时查看和调整JVM配置参数。 一.查看JVM参数 用法:jinfo -flag <name> PID 示例: # jinfo -flag MaxMetaspaceSize 11180 # -XX:MaxMetaspac......

Jacktanger ⋅ 33分钟前 ⋅ 0

exportfs命令、NFS客户端问题、FTP介绍、使用vsftpd搭建ftp

1. exportfs命令 一般情况下重启服务器上nfs服务时,需把客户端上的挂载先卸载掉,以免进程后面杀不掉。当客户端服务器很多时,操作起来就比较麻烦。此时可以使用exportfs命令重新加载下。 ...

laoba ⋅ 42分钟前 ⋅ 0

基于Python的信用评分卡模型分析

信用风险计量体系包括主体评级模型和债项评级两部分。主体评级和债项评级均有一系列评级模型组成,其中主体评级模型可用“四张卡”来表示,分别是A卡、B卡、C卡和F卡;债项评级模型通常按照主...

火力全開 ⋅ 43分钟前 ⋅ 0

执行make命令时报错g++: Command not found

执行make命令时报错g++: Command not found 2016年10月24日 12:31:29 阅读数:4366 朋友安装node时遇到的问题 报错截图: 其实很简单只需要安装一下 yum -y install gcc automake autoconf l...

rootliu ⋅ 43分钟前 ⋅ 0

Loongnix(龙芯)系统,优盘安装指南

U盘安装分为两种方式:"usb disk" 及 "usb cd"。其中usb cd是将usb disk做为usb光驱使用。 usb disk安装步骤: 需要准备一个大小超过3.5G的U盘,格式化ext3格式 下载安装光盘镜像xxx.iso,将...

gugudu ⋅ 47分钟前 ⋅ 0

HTML5中meta属性的使用详解

meta属性在HTML中占据了很重要的位置。如:针对搜索引擎的SEO,文档的字符编码,设置刷新缓存等。虽然一些网页可能没有使用meta,但是作为正规军,我们还是有必要了解一些meta的属性,并且能...

guorongjin ⋅ 50分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部