我这个缓存 哪儿写的不对吗?

        $key='code';
        if(Cache::has($key)){
            return $this->success(Cache::get($key));
        }else{
            Cache::put($key, ['2423'], 10);
            return $this->success(Cache::get($key));
        }

为什么每次请求都是走else 理论上短时间重复请求 应该走if呀?
:sob: :sob: :sob: :sob:

《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
最佳答案

另外看你的代码像是验证码相关的 那么建议为每个用户加一些内容, 比如 user.1.code 或者使用 session 代替
因为缓存是全局性的 假设两个用户同时访问那么验证码就会被第二个用户刷掉从而导致第一个用户验证失败

2年前 评论
tiantian10000 (楼主) 2年前
讨论数量: 20

我有个项目的解决方案是在default里put
来上代码, 希望对你有所帮助:

Cache::get($key, function() {
    Cache::put($key, $value);
    return $value;
});
2年前 评论
tiantian10000 (楼主) 2年前

另外看你的代码像是验证码相关的 那么建议为每个用户加一些内容, 比如 user.1.code 或者使用 session 代替
因为缓存是全局性的 假设两个用户同时访问那么验证码就会被第二个用户刷掉从而导致第一个用户验证失败

2年前 评论
tiantian10000 (楼主) 2年前

5.7和之前的版本,第三个时间参数单位是分钟,从5.8开始单位改成秒了,如果你两次请求间隔大于10秒,那上次的缓存就失效了,自然走的else

另外你这种需求应该使用Cache::remember方法,它会自动判断如果缓存有值就直接返回,如果没有就执行闭包,把结果缓存起来供后续使用并返回结果

$value = Cache::remember($key, 10, function () {
    return ['2423'];
});
2年前 评论
tiantian10000 (楼主) 2年前
lchola (作者) 2年前
Benn888 2年前
$value = Cache::remember($key, 10, function () {
    return null;
});

会缓存击穿

2年前 评论
tiantian10000 (楼主) 2年前
tiantian10000 (楼主) 2年前
ncccc1 (作者) 2年前
mouyong

github.com/mouyong/php-support/blo... 用上?

已处理如下问题:数据为 null 时不做数据缓存。数据随机缓存时长。简化使用 rememberrememberForever,还有 forget get pull 等常用函数也可以直接调用: LaravelCache::forget($cacheKey)

$model = LaravelCache::remember($cacheKey, function () use ($value) {
    if (!$value) {
        return null;
    }

    return Model::where('field', $value)->first();
});
2年前 评论
王小大 2年前
mouyong (作者) 2年前

@ncccc1 可以将缓存时间设置成随机值

$value = Cache::remember($key, rang(10,60), function () {
    return null;
});
2年前 评论
mouyong 2年前
微加加的朋友 (作者) 2年前
mouyong 2年前

这么写

$key='code';
if(( $data = Cache::get($key))  == null) {
    $data =  ['2423'];
    Cache::put($key, $data, 10);
}
return $this->success($data);
2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!