php常用缓存逻辑-编程思维

代码

//行为限频
if (!function_exists('doSomethingLimit')) {
    function doSomethingLimit($key, $second, Closure $callback) {
        $reids = get_redis();
        if ($reids->SETNX($key, 1)) {  //不存在,设置成功
            $reids->EXPIRE($key, $second);
            $callback();
        }
    }
}

//套缓存
if (!function_exists('cacheRemember')) {
    function cacheRemember($key, $second, Closure $callback) {
        $redis = get_redis();

        //添加立即刷新key
        $lockKey = $key . "_flush_lock";
        $lock    = $redis->get($lockKey, 0);

        $value = $redis->get($key);
        if (!$value || $lock) {
            $value = $callback();
            if (is_array($value)) {
                $value = json_encode($value);
            }
            $redis->set($key, $value, $second);
            $redis->delete($lockKey);
        }
        return json_decode($value, true);
    }
}


//添加缓存刷新锁
if (!function_exists('flushCacheRemember')) {
    function flushCacheRemember($key) {
        $redis   = get_redis();
        $lockKey = $key . "_flush_lock";
        $lock    = $redis->set($lockKey, 1, 60);
    }
}

//添加立即刷新的用户ID
if (!function_exists('addFlushIdSet')) {
    function addFlushIdSet($userId, $sec) {
        $redis = get_redis();
        $key   = "swoft_need_flush_cache_user_id_set_" . $userId;
        $lock  = $redis->set($key, 1, $sec);
    }
}

//判断立即刷新的用户ID
if (!function_exists('checkFlushIdSet')) {
    function checkFlushIdSet($userId) {
        $redis = get_redis();
        $key   = "swoft_need_flush_cache_user_id_set_" . $userId;
        $lock  = $redis->get($key, 0);
        return $lock ? true : false;
    }
}

逻辑

  1. 添加需要立即刷新缓存的集合,默认60秒
  2. 在进入业务逻辑前添加判断,如果在集合中就表示需要立刻刷新缓存。
  3. 业务逻辑套缓存,如果是需要立即刷新的,则删除旧的直接刷新。否则走缓存逻辑。

版权声明:本文版权归作者所有,遵循 CC 4.0 BY-SA 许可协议, 转载请注明原文链接
https://www.cnblogs.com/HappyTeemo/p/17221195.html

php——thinkphp6.0+easywechat对接公众号-编程思维

前言 有一个闲置的公众号本来打算做炒股分享的,现在想拿来做点其他的东西,于是使用TP6和EasyWechat来进行开发; easywechat: easywechat thinkphp6_0: thinkphp6_0 内容 因为easywechat的阿里云的 Composer 源已经停止维护,所以这里要使用腾讯源或者

小编亲身实操,教你配置phpstorm与xdebug的调试配置,不成功你骂我-编程思维

开发php,还是找个专业的Ide较好,vscode毕竟在php上不专业,需要下载各种插件才行,还不支持多线程调试,因此小编下载了phpstorm,打算以后用phpstorm来开发php项目,断点调试代码是必不可少的,还是用xdebug吧,可小编在网上搜索了无数篇文章,照着做了一天,竟然没调试成功。最后功夫不负有心人,终

php-编程思维

今天下午一直在捣鼓如何用PhpStorm进行调试,查找了许多资料,零零碎碎的,所以自己弄篇文章记录一下步骤。 安装xdebug 使用brew安装xdebug,语法如下 brew install homebrew/php/php<version number>-xdebug 到https://xdebug.