PHP缓存锁原理及利用

本文介绍了PHP在高并发环境下如何利用缓存锁避免资源重复请求,以微信access_token为例,详细阐述了缓存锁的工作原理,包括在Redis缓存中设置唯一key以阻止并发操作,以及操作完成后释放锁的流程。在CI框架下实现缓存锁,并提醒注意缓存状态对系统运行的重要性。
摘要由CSDN通过智能技术生成

概述:

项目当中经常要考虑数据高并发的情况,为了避免并发导致出现一些资源重复请求的问题,可以使用缓存加锁机制。
例如取微信access_token不加锁可能会导致非常严重的后果。

准备:

缓存锁,顾名思义,当然离不开缓存,这篇文章用到的redis缓存,可以根据自己的需要要选择合适缓存。
缓存锁的原理是在进行操作A之前,先在缓存中存放一个唯一的key,然后就进行对应操作A,而如果同时有其他一样的操作B并发时,因为操作B也需要存放key才能进行操作,而key是唯一的,所以操作B是无法进行存放一样key,也就是说操作B还没开始就被中断了。而当操作A完成之后,或者报错之后就进行释放锁,也就是从缓存当中删除对应的key。除此之外,当操作A操作时间过长时,我们也应该释放锁。具体流程如下图:
这里写图片描述

分析:

我这里用的是CI的框架,并不是原生的,但CI的框架也很容易看懂。

//缓存锁class
class Locker {

    private $_CI;

    public function __construct() {
        $this->_CI = & get_instance();
    }

    /**
     * 取锁
     * @param type $key
     * @param type $timeout 默认锁能锁10秒,10秒后锁自动解除
     * @return type
     */
    public function lock($key, $timeout = 10) {
        $now = time();
        $cache_key = 
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值