使用 Redis 作为缓存驱动时,Redis 和 Cache 的区别?

设置 Redis 为缓存驱动后,Cache::get('xx')Redis::get('xx') 有何区别?
Cache::put('test', '1', 10);Redis::get('test') 值不是 1,Cache 和 Redis 是相互独立的吗?

阿伦
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
最佳答案

@wanghan 贴一段代码就知道了,以后这种问题可以自己翻一下源码的,这样会让你印象更加深刻。:smile:
1、redis作为缓存驱动,Cache::get('xx')Redis::get('xx')没任何区别,你取不到是因为你少了前缀。
2、为什么这么做的原因,可以看下设计模式,继承了同一接口Illuminate\Contracts\Cache\Store的缓存驱动,可以让你通过环境变量快速无缝切换缓存(比如我切换到文件缓存驱动或者memcache缓存驱动),无需更改任何业务代码.
vendor/laravel/framework/src/Illuminate/Cache/RedisStore.php

/**
     * Store an item in the cache for a given number of minutes.
     *
     * @param  string  $key
     * @param  mixed   $value
     * @param  float|int  $minutes
     * @return void
     */
    public function put($key, $value, $minutes)
    {
        $this->connection()->setex(
            $this->prefix.$key, (int) max(1, $minutes * 60), $this->serialize($value)
        );
    }

vendor/laravel/framework/src/Illuminate/Cache/CacheManager.php

/**
     * Dynamically call the default driver instance.
     *
     * @param  string  $method
     * @param  array   $parameters
     * @return mixed
     */
    public function __call($method, $parameters)
    {
        return $this->store()->$method(...$parameters);
    }
8个月前 评论
讨论数量: 4

@wanghan 贴一段代码就知道了,以后这种问题可以自己翻一下源码的,这样会让你印象更加深刻。:smile:
1、redis作为缓存驱动,Cache::get('xx')Redis::get('xx')没任何区别,你取不到是因为你少了前缀。
2、为什么这么做的原因,可以看下设计模式,继承了同一接口Illuminate\Contracts\Cache\Store的缓存驱动,可以让你通过环境变量快速无缝切换缓存(比如我切换到文件缓存驱动或者memcache缓存驱动),无需更改任何业务代码.
vendor/laravel/framework/src/Illuminate/Cache/RedisStore.php

/**
     * Store an item in the cache for a given number of minutes.
     *
     * @param  string  $key
     * @param  mixed   $value
     * @param  float|int  $minutes
     * @return void
     */
    public function put($key, $value, $minutes)
    {
        $this->connection()->setex(
            $this->prefix.$key, (int) max(1, $minutes * 60), $this->serialize($value)
        );
    }

vendor/laravel/framework/src/Illuminate/Cache/CacheManager.php

/**
     * Dynamically call the default driver instance.
     *
     * @param  string  $method
     * @param  array   $parameters
     * @return mixed
     */
    public function __call($method, $parameters)
    {
        return $this->store()->$method(...$parameters);
    }
8个月前 评论
wanghan

坐等大佬

8个月前 评论

@wanghan 贴一段代码就知道了,以后这种问题可以自己翻一下源码的,这样会让你印象更加深刻。:smile:
1、redis作为缓存驱动,Cache::get('xx')Redis::get('xx')没任何区别,你取不到是因为你少了前缀。
2、为什么这么做的原因,可以看下设计模式,继承了同一接口Illuminate\Contracts\Cache\Store的缓存驱动,可以让你通过环境变量快速无缝切换缓存(比如我切换到文件缓存驱动或者memcache缓存驱动),无需更改任何业务代码.
vendor/laravel/framework/src/Illuminate/Cache/RedisStore.php

/**
     * Store an item in the cache for a given number of minutes.
     *
     * @param  string  $key
     * @param  mixed   $value
     * @param  float|int  $minutes
     * @return void
     */
    public function put($key, $value, $minutes)
    {
        $this->connection()->setex(
            $this->prefix.$key, (int) max(1, $minutes * 60), $this->serialize($value)
        );
    }

vendor/laravel/framework/src/Illuminate/Cache/CacheManager.php

/**
     * Dynamically call the default driver instance.
     *
     * @param  string  $method
     * @param  array   $parameters
     * @return mixed
     */
    public function __call($method, $parameters)
    {
        return $this->store()->$method(...$parameters);
    }
8个月前 评论
wanghan

@jiyis 大佬。。。接我一个拥抱

8个月前 评论
Shuyi

Cache属于Facade,所以用的key不一样,而且Cache可能跑去Call Memcached也不一定; Redis则是往Redis放data

7个月前 评论

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!

社区文档:

将托管在 packagist.org 和 github.com 的扩展包使用国内 CDN 加速
GitHub Laravel 扩展包 TOP 250
速查表方便快速查询框架功能,支持手机访问,支持中英文版本
Laravel 中文文档,由社区用户翻译和维护,将会保持一直更新
此文档的目的,就是为了提高技术团队的凝聚力、一致性和生产效率。
开发环境的部署,开发者工具的选择,适用于 Mac 和 Windows。
浓缩过后的精华
Laravel Nova 后台管理面板文档的中文翻译
Lumen 中文文档,由社区用户翻译和维护,将会保持一直更新
Laravel 下知名扩展包 Dingo API 的中文文档,Laravel API 开发必知必会