php memcache实现锁操作 代码实例

标签:,
来源: WordPress导航主题
日期: 2022-9-6
作者: WordPress导航主题

程序中的锁,可以独占某个资源(内存、文件),目的是为了保证数据的一致性。在web程序中,同样需要所去保证数据一致性的问题。

举个例子,一个抽奖程序,首先判断A是否有进行抽奖,如果没有,则进行抽奖,并且把记录insert到数据库中。逻辑很简单,但是在高并发的情况下,极有可能导致重复抽奖的情况。假如,Q1和Q2,这2个请求相隔时间非常短,当Q1先判断了没有进行抽奖,但还未把抽奖记录insert到数据库中的时候,Q2查询数据库,并判断为没有抽奖,并继续执行抽奖的逻辑,而不是告诉用户已经抽奖了。最终结论是导致用户可以抽奖2次,显然不符合我们的需求。

这时候,就需要应用到锁,去确保抽奖这个行为,只有1个请求可以执行。逻辑流程图如下:

php memcache实现锁操作 代码实例

使用memcached的add方法

Memcached::add — 向一个新的key下面增加一个元素

public bool Memcached::add ( string $key , mixed $value [, int $expiration ] )

成功时返回 TRUE, 或者在失败时返回 FALSE。 如果key已经存在,Memcached::getResultCode()方法将会返回Memcached::RES_NOTSTORED。

程序中的锁,可以独占某个资源(内存、文件),目的是为了保证数据的一致性。在web程序中,同样需要所去保证数据一致性的问题。

举个例子,一个抽奖程序,首先判断A是否有进行抽奖,如果没有,则进行抽奖,并且把记录insert到数据库中。逻辑很简单,但是在高并发的情况下,极有可能导致重复抽奖的情况。假如,Q1和Q2,这2个请求相隔时间非常短,当Q1先判断了没有进行抽奖,但还未把抽奖记录insert到数据库中的时候,Q2查询数据库,并判断为没有抽奖,并继续执行抽奖的逻辑,而不是告诉用户已经抽奖了。最终结论是导致用户可以抽奖2次,显然不符合我们的需求。

这时候,就需要应用到锁,去确保抽奖这个行为,只有1个请求可以执行。逻辑流程图如下:

php memcache实现锁操作 代码实例

使用memcached的add方法

Memcached::add — 向一个新的key下面增加一个元素

public bool Memcached::add ( string $key , mixed $value [, int $expiration ] )

成功时返回 TRUE, 或者在失败时返回 FALSE。 如果key已经存在,Memcached::getResultCode()方法将会返回Memcached::RES_NOTSTORED。

if($mc->add($key,$value))  {      //执行抽奖逻辑      //逻辑结束后,删除锁      $mc->delete($key);      //更新到数据库  }  else  {      //告诉用户正在抽奖,请稍后  }

腾讯云限时秒杀【点击购买】

搬瓦工,CN2高速线路,1GB带宽,电信联通优化KVM,延迟低,速度快,建站稳定,搬瓦工BandwagonHost VPS优惠码BWH26FXH3HIQ,支持<支付宝> 【点击购买】!

Vultr$3.5日本节点,512M内存/500G流量/1G带宽,电信联通优化,延迟低,速度快【点击购买】!

阿里云香港、新加坡VPS/1核/1G/25G SSD/1T流量/30M带宽/年付¥288【点击购买】

php memcache实现锁操作 代码实例

`微信`扫码 加好友

链接到文章: https://gkxyz.com/php-memcacheshixiansuocaozuo-daimashili.html

推荐站点

评论已关闭