PHP自定义redis-session能否用hash类型

最近把代码迁移到分布式服务器,用session_set_save_handler()函数注册了自定义的会话存储函数。php脚本执行结束时就会把$_SESSION数组中的内容进行序列化并保存到由session_id指定的key中,是string类型。

后来觉得这样会出现并发问题,例如两个脚本同时去修改$_SESSION数组。PHP默认是用文件来保存session数据的,会加锁,所以不会出现这样的问题。

后来就想到用hash类型来保存session,似乎很perfect。session的write函数每次拿到$data变量的内容都要反序列化得到原本的结构,并保存到hash中。但后来想到如果$_SESSION数组中某个key对应的value不是string类型,那也是会出问题。

后来也觉得write函数每次这样去反序列化也是很麻烦。虽然得知是可以修改PHP的session编码方式,但是wirte函数接收的$data参数只能是string,然并卵。

各位朋友,怎么样可以既解决并发问题,又可以用最适合的redis类型去存放session呢?求建议!谢谢!

阅读 3.2k
1 个回答

我的问题session

并发问题的话,操作之前加个锁

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题