本文摘自PHP中文网,作者尚,侵删。

在大流量程序开发中,必然会遇到高并发的应用的场景。解决方案大致分为两个方向,消息队列、锁.
redis 实现消息队列核心简单版本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | $key = 'quque' ;
public function qnquque() {
for ( $i = 1 ; $i <=5 ; $i ++) {
$redis ->lpush( $key , $i );
}
}
public function dequque() {
$redis ->rpop( $key );
}
|
消息队列是防止超买超卖很好的一种解决方案,要实现消息队列的高级功能需要用到专业的消息队列工具例如(rabbitmq).用户Redis 用户redis实现消息队列还是有一些缺点的,可以自行查找文章补充。这边不一一概述。最大问题还是分布式集群的问题。
Redis 乐观锁实现秒杀功能
它的优点如下:
消息队列对内存消耗较大,10000个请求,需要操作10000 出队列。容易造成内存资源瞬间爆棚
使用乐观锁的逻辑,CPU相对来说消耗较低、内存资源占用少
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | $redis = new redis();
$result = $redis ->connect( '127.0.0.1' , 6379);
$cachekey = $redis ->get( "cachekey" );
$number = 100;
if ( $cachekey < $number ){
$redis ->watch( "cachekey" );
$redis ->multi();
sleep(5);
$redis ->hSet( "cachekeyList" , "user_id_" .mt_rand(1, 9999),time());
$redis ->set( "cachekey" , $cachekey +1);
$result = $redis -> exec ();
if ( $result ){
$cachekeyList = $redis ->hGetAll( "cachekeyList" );
echo "恭喜" . $cachekeyList . "抢购成功!<br/>" ;
} else {
echo "再接再厉" ;
exit ;
}
}
|
更多redis知识请关注redis入门教程栏目。
以上就是redis秒杀场景解决方案的详细内容,更多文章请关注木庄网络博客!
相关阅读 >>
Redis的事务及乐观锁的应用
php+Redis实现加锁与解锁操作
怎么查看Redis集群信息
Redis性能测试与客户端连接详解
Redis什么时候出的
增加Redis命令的方法
Redis怎么存session
详细了解Redis中的事务
Redis分布式怎么做
Redis集群需要设置哨兵吗
更多相关阅读请进入《Redis》频道 >>
机械工业出版社
本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。
转载请注明出处:木庄网络博客 » redis秒杀场景解决方案