代码

//行为限频
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. 业务逻辑套缓存,如果是需要立即刷新的,则删除旧的直接刷新。否则走缓存逻辑。

php常用缓存逻辑的更多相关文章

  1. 艺多不压身 -- 常用缓存Cache机制的实现

    常用缓存Cache机制的实现 缓存,就是将程序或系统经常要调用的对象存在内存中,以便其使用时可以快速调用,不必再去创建新的重复的实例. 这样做可以减少系统开销,提高系统效率. 缓存主要可分为二大类: ...

  2. Flask 页面缓存逻辑,jinja2 过滤器,测试器

    回调接入点-页面缓存逻辑 from flask import Flask,request,render_template from werkzeug.contrib.cache import Simp ...

  3. 五分钟学后端技术:如何学习Redis、memcache等常用缓存技术

    原创声明 本文作者:黄小斜 转载请务必在文章开头注明出处和作者. 本文思维导图 什么是缓存 计算机中的缓存 做后端开发的同学,想必对缓存都不会陌生了,平时我们可能会使用Redis,MemCache这类 ...

  4. Python实现常用的逻辑数据结构

    逻辑数据结构包括:线形结构.树形结构.图形结构.集合:存储结构包括:顺序存储.链式存储.索引存储.散列存储. 同一种逻辑结构可以有四种存储结构,不同的存储结构增.删.查.改的速度不同.逻辑结构与存储结 ...

  5. Java 中常用缓存Cache机制的实现

    所谓缓存,就是将程序或系统经常要调用的对象存在内存中,一遍其使用时可以快速调用,不必再去创建新的重复的实例.这样做可以减少系统开销,提高系统效率. 所谓缓存,就是将程序或系统经常要调用的对象存在内存中 ...

  6. Java 中常用缓存Cache机制的实现《二》

    所谓缓存,就是将程序或系统经常要调用的对象存在内存中,一遍其使用时可以快速调用,不必再去创建新的重复的实例.这样做可以减少系统开销,提高系统效率. AD: Cache 所谓缓存,就是将程序或系统经常要 ...

  7. Java中常用缓存Cache机制的实现

    缓存,就是将程序或系统经常要调用的对象存在内存中,一遍其使用时可以快速调用,不必再去创建新的重复的实例. 这样做可以减少系统开销,提高系统效率. 缓存主要可分为二大类: 一.通过文件缓存,顾名思义文件 ...

  8. java常用的逻辑

    /** * Copyright (c) 2015-2017, Chill Zhuang 庄骞 (smallchill@163.com). * <p> * Licensed under th ...

  9. 常用缓存淘汰算法(LFU、LRU、ARC、FIFO、MRU)

    缓存算法是指令的一个明细表,用于决定缓存系统中哪些数据应该被删去. 常见类型包括LFU.LRU.ARC.FIFO.MRU. 最不经常使用算法(LFU): 这个缓存算法使用一个计数器来记录条目被访问的频 ...

  10. 常用缓存(cache)淘汰算法(LFU、LRU、ARC、FIFO、MRU)

    缓存算法是指令的一个明细表,用于决定缓存系统中哪些数据应该被删去. 常见类型包括LFU.LRU.ARC.FIFO.MRU. 最不经常使用算法(LFU): 这个缓存算法使用一个计数器来记录条目被访问的频 ...

随机推荐

  1. Solution Set - 数学相关

    CF645F Link&Submission. 利用 \(\sum\limits_{d|n}\varphi(\frac{n}{d})=n\),只要对每个数 \(x\),求出 \(cnt_x\) ...

  2. SuperSonic简介

    SuperSonic融合ChatBI和HeadlessBI打造新一代的数据分析平台.通过SuperSonic的问答对话界面,用户能够使用自然语言查询数据,系统会选择合适的可视化图表呈现结果. Supe ...

  3. goframe v2.1.0 gf-cli的使用

    目录 1.视频教程 2.官方文档 3.下载 linux系统安装环境 windows系统安装环境 4.创建项目 5.启动项目 6.交叉编译 7.gen命令的使用 8.orm的操作 1.视频教程 http ...

  4. kubernetes运行应用Controller3之Job、CronJob详解

    成功启动一个Job 1.Job.spec.template.metadata,没有空格符的错误 [machangwei@mcwk8s-master ~]$ cat mcwJob1.yml apiVer ...

  5. 将自己喜欢的网页保存为单个文件包括图片(mhtml文件)

    from selenium import webdriver driver = webdriver.Chrome(r'C:\chromedriver_win32\chromedriver.exe') ...

  6. u8二次开发再遇问题再总结

    在调用api生成采购入库单时,报错:该操作会造成订单到货和入库同时存在,请重新检查操作!普通采购必有订单,存货[0501-0304-0075]不能手工录入 这是因为:采购入库单单据必须要录入上游单据, ...

  7. WPF开发快速入门【1】WPF的布局

    概述 本文描述几款WPF中常用的布局控件. Grid Grid是WPF最常用的布局控件. 它把面板分割为固定长和宽的网格,子控件就放置在网格内. <Grid> <Grid.Colum ...

  8. aspnet core运行后台服务任务

    之前在公司的一个项目中需要用到定时程序,当时使用的是aspnet core提供的IHostedService接口来实现后台定时程序,具体的示例可去官网查看.现在的dotnet core中默认封装了实现 ...

  9. NOIP模拟87(多校20)

    前言 题目不难,但是个人感觉小细节有一些,然后有亿点卡常.. 感觉对于笛卡尔树的题目看不出算法,然后代码实现方面细节注意太少,常数有点大. 下次注意吧. T1 集合均值 解题思路 感觉应该是期望题里面 ...

  10. IMX6ULL基本环境搭建

    基本环境搭建 1 交叉编译工具 在虚拟机中安装交叉编译工具,为后续开发做准备. 1.1 工具版本 工具版本:Linaro Releases 当前虚拟机为64位系统,因此下载64位系统的工具: $ un ...