Php Laravel Redis会话驱动程序-Redis会话不一致
我用的是拉威尔5.7。Redis被设置为我的缓存和会话驱动程序 在我的控制器中,如果我使用$request->session()->put()或session::put()写入会话,它将在我打印会话id的缓存时显示:Php Laravel Redis会话驱动程序-Redis会话不一致,php,laravel,redis,Php,Laravel,Redis,我用的是拉威尔5.7。Redis被设置为我的缓存和会话驱动程序 在我的控制器中,如果我使用$request->session()->put()或session::put()写入会话,它将在我打印会话id的缓存时显示: print\r(非序列化(Cache::get(Session::getId())) 注意,我以这种方式输出会话数据的主要目标是访问非活动会话的会话 但是,如果我在域中使用以下任一方法写入会话,它们将不会显示在缓存打印中,但会显示(以及缓存打印中显示的所有其他内容),如果我使用:
print\r(非序列化(Cache::get(Session::getId()))代码>
注意,我以这种方式输出会话数据的主要目标是访问非活动会话的会话
但是,如果我在域中使用以下任一方法写入会话,它们将不会显示在缓存打印中,但会显示(以及缓存打印中显示的所有其他内容),如果我使用:
打印(Session::all())代码>
我对正在发生的事感到困惑。在通过redis cli访问数据时,我验证了我所说的也是正确的。显然,如果我在域中写入会话,它会以某种方式存储在其他地方?想法?缓存和会话是两个完全不同的实体,尽管它们可以使用相同的驱动程序
会话用于维护与用户的关系。有关更多详细信息,请参阅
缓存是存储和查找常用访问数据的地方,而不是访问昂贵的代码或数据库。它是短暂的,并且永远不能保证保存任何数据
为什么不直接使用Session::get('whatever')
查看您的编辑后: 注意,我以这种方式输出会话数据的主要目标是访问非活动会话的会话 您应该通过比缓存更持久的存储机制来存储数据。正如我前面提到的,缓存是短暂的。您可以使用redis,因为它是一个键值存储,而不是像memcached那样的真正缓存。直接使用即可:
Redis::get('user:profile:'.$id);
你说的都是真的。然而,我的案例的理由是跟踪用户在多个设备上的会话,并让我自己能够一次将它们全部销毁。我计划在缓存中而不是数据库中构建它。当缓存已满时会发生什么?它开始销毁数据。最好用适当的工具做适当的工作。即使考虑到你的论点,我仍然对我的问题感到恼火。为什么它在控制器和域中的行为会有所不同?我想我还是想知道这两种方法中的哪一种。它的行为并没有那么不同,而是调用了不同的代码。如果您真的想知道不同的代码路径,您应该使用
xdebug
并逐步执行应用程序。