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

在我的 Controller 中,如果我使用$ request-> session()-> put()或Session::put()写入 session ,则在为 session ID打印缓存时,它将显示:
print_r(unserialize(Cache::get(Session::getId())));
请注意,以这种方式输出 session 数据的主要目的是访问不是我的 Activity session 的 session 。

但是,如果我使用域中的这两种方法中的任何一种来写入 session ,则它们将不会显示在缓存打印中,但是会显示(连同其他确实显示在缓存打印中的所有内容)使用:
print_r(Session::all());
我对发生的事情感到困惑。我验证了我通过redis cli访问数据时所说的也是正确的。显然,如果我在域中写入 session ,它将以某种方式存储在其他地方?有什么想法吗?

最佳答案

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

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

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

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

看到您的编辑后:



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

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

10-01 22:34
查看更多