Laravel Redis会话驱动程序-Redis会话不一致

时间:2018-10-10 02:44:52

标签: php laravel redis

我正在使用Laravel 5.7。 Redis被设置为我的缓存和会话驱动程序。

在我的控制器中,如果我使用$ request-> session()-> put()或Session :: put()写入会话,则当我为会话ID打印缓存时,它将显示: / p>

print_r(unserialize(Cache::get(Session::getId())));

注意,我以这种方式输出会话数据的主要目的是访问不是我的活动会话的会话。

但是,如果我使用域中的这两种方法中的任何一种写入会话,它们将不会显示在缓存打印中,但会显示出来(以及所有其他显示在缓存打印中的东西) )(如果我使用的话:

print_r(Session::all());

我对正在发生的事情感到困惑。我验证了我通过redis cli访问数据时所说的也是正确的。显然,如果我在域中写入会话,它将以某种方式存储在其他地方?有想法吗?

1 个答案:

答案 0 :(得分:1)

您的缓存和会话是两个完全不同的实体,即使它们可以使用相同的驱动程序。

会话用于维护与用户的关系。有关更多详细信息,请参见PHP session documentation

缓存是存储和查找常用数据的地方,而不是访问昂贵的代码或数据库。这是临时的,永远不能保证保留任何数据。

您为什么不只使用Session::get('whatever')


看到您的修改后:

  

注意,我以这种方式输出会话数据的主要目的是访问不是我的活动会话的会话。

您应该通过比缓存更持久的存储机制来存储数据。如前所述,缓存是短暂的。您可以使用redis,因为它是键值存储,而不是像memcached这样的真正缓存。只需直接使用它即可:

Redis::get('user:profile:'.$id);