基于memcached的php锁机制实现
2013-12-28 13:53
155 查看
PHP处理大规模并发,特别是恶意辅助工具发送恶意请求的情况下,这时候就需要用到锁机制。
常备恶意请求的接口一般都会操作db,如果db不支持事务或者db和PHP之间有第三方插件的话,很容易出现多个php接口返回成功的现象。
php有一种基于文件的锁机制,fblock,但是对于有很多web机的应用,php接口会负载均衡到所有的web机,只能做对同一台web机的锁机制,并且非常耗资源。
现在的锁机制就需要一个全局可以访问可写的变量。
此时有两种选择,数据库,memcached。
为了减轻负担,使用memcached。
锁定方法: memcached并没有提供锁定某一个key的方法,可以通过其他方法来实现锁定。最常用的是用add方法。例如,我们要更新一个key,可以先王
memcached里面add一个叫lock_key的键值,如果add成功,就说明锁定上了,否则,说明memcached里面已经有lock_key 这个键值,有其他程序在锁定这个key了
实现php自由锁:
1加锁(设置memcached的最大过期时间,比如5s,避免加锁后忘记解锁)
addmemcached
2解锁
detele
使用apache自带的压力测试工具
./ab
-n1000 -c100 http://*****
每秒钟一千个请求,一百个并发,锁机制工作正常。
常备恶意请求的接口一般都会操作db,如果db不支持事务或者db和PHP之间有第三方插件的话,很容易出现多个php接口返回成功的现象。
php有一种基于文件的锁机制,fblock,但是对于有很多web机的应用,php接口会负载均衡到所有的web机,只能做对同一台web机的锁机制,并且非常耗资源。
现在的锁机制就需要一个全局可以访问可写的变量。
此时有两种选择,数据库,memcached。
为了减轻负担,使用memcached。
锁定方法: memcached并没有提供锁定某一个key的方法,可以通过其他方法来实现锁定。最常用的是用add方法。例如,我们要更新一个key,可以先王
memcached里面add一个叫lock_key的键值,如果add成功,就说明锁定上了,否则,说明memcached里面已经有lock_key 这个键值,有其他程序在锁定这个key了
实现php自由锁:
1加锁(设置memcached的最大过期时间,比如5s,避免加锁后忘记解锁)
addmemcached
2解锁
detele
使用apache自带的压力测试工具
./ab
-n1000 -c100 http://*****
每秒钟一千个请求,一百个并发,锁机制工作正常。
相关文章推荐
- PHP基于反射机制实现自动依赖注入的方法详解
- 基于Swoole做Socket服务器开发探索与实现PHP代码热更新机制
- 基于PHP实现的事件机制实例分析
- 基于PHP实现的事件机制实例分析
- PHP基于反射机制实现插件的可插拔设计详解
- nginx负载均衡LAMP及基于memcached实现php会话保存
- LNMP基于fastcgi实现nginx,php,mysql的分离
- PHP Memcached + APC + 文件缓存封装实现代码
- php的autoload机制的实现解析
- PHP基于php_imagick_st-Q8.dll实现JPG合成GIF图片的方法
- 基于PHP使用rabbitmq实现消息队列
- 基于Docker容器和PHP技术的简易多人在线编程平台(云IDE)的实现
- PHP基于curl post实现发送url及相关中文乱码问题解决方法
- 仿AS3实现PHP 事件机制实现代码
- 基于Server-Sent Event的简单聊天室 Web 2.0时代,即时通信已经成为必不可少的网站功能,那实现Web即时通信的机制有哪些呢?在这门项目课中我们将一一介绍。最后我们将会实现一个基于Server-Sent Event和Flask简单的在线聊天室。
- 基于php&mysql实现聊天室功能的代码实例分享
- linux 下基于特定通信协议利用多线程同步通信机制实现的串口通信
- php mysql procedure实现获取多个结果集的方法【基于thinkPHP】
- PHP基于单例模式实现的数据库操作基类
- 基于Netty UDP实现的简单心跳机制