废话不多说,先上代码
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Redis;
class TestCommand extends Command
{
protected $signature = 'test';
public function __construct()
{
parent::__construct();
}
public function handle()
{
$redis = Redis::connection('WeChatApp');
$redis->select(15);
$key = 'test';
if($redis->get($key)) {
echo '使用缓存'.PHP_EOL;
return 1;
}
$this->doSomething();
$redis->set($key,1);
$redis->expire($key,10);
echo '设置缓存'.PHP_EOL;
}
public function doSomething()
{
$redis = Redis::connection('WeChatApp');
$redis->select(12);
echo 'doSomething'.PHP_EOL;
}
}
运行结果: 缓存一直设置失败
相信大家都看出来了,这个问题就是因为我使用了laravel Illuminate\Support\Facades\Redis;
导致我写入的是db(12),却在db(15)查询,当然找不到啦
熟悉laravel的同学都知道, laravel框架运行的时候就是一个容器,通过服务提供者将很多的组件加载进来
其中就包括redis(单例模式),但是通过门面模式封装过后,导致会误以为使用Redis::connection('WeChatApp'); 的时候会像我们使用平时的静态方法是不会有关联关系的,
想不到这个小小的疏忽,导致我调试了好几个小时,记录一下,让大家不要重蹈覆辙