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

        $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:

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案

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

1周前 评论
tiantian10000 (楼主) 1周前
讨论数量: 21

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

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

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

1周前 评论
tiantian10000 (楼主) 1周前
lchola

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

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

$value = Cache::remember($key, 10, function () {
    return ['2423'];
});
1周前 评论
渣渣120 1周前
tiantian10000 (楼主) 1周前
lchola (作者) 1周前
Benn888 21小时前
$value = Cache::remember($key, 10, function () {
    return null;
});

会缓存击穿

1周前 评论
tiantian10000 (楼主) 1周前
tiantian10000 (楼主) 1周前
ncccc1 (作者) 1周前
蜗牛

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();
});
1周前 评论
王小大 1周前
蜗牛 (作者) 1周前

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

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

这么写

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

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