PhpRedis 中的Session handler为什么用string而不是用hash

liang8305 2012-04-01 03:48:07
用redis做跨域session共享,发现一个问题
PhpRedis 中的Session handler存session为什么用string而不是用hash?

个人认为,session_id作为key没有问题
但是$_SESSION是一个hash数组,也就是说整个session是一个2维的(sessionid,key,value)的结构
那感觉用 redis的hash结构更加符合啊
key=sessionid
field=$_SESSION的key

用如下代码测试:


<?php
ini_set("session.save_handler","redis");
ini_set("session.save_path","tcp://192.168.56.101:6379?timeout=1");

session_start();

print "session_id:".session_id()."<br>";

if($_SESSION['test']=="")
{
$_SESSION['test']=time();
$_SESSION['test2']=time();
}

print $_SESSION['test'];
?>


get PHPREDIS_SESSION:q4assvtap9c9t685cqkamivcq6
后得到:
"test|i:1333266219;test2|i:1333266219;"

type PHPREDIS_SESSION:q4assvtap9c9t685cqkamivcq6
得到:
string

也就是它是将$_SESSION序列化之后用string来存$_SESSION的
那不是每次get和set都要分别序列化和反序列化?

性能上不是有影响?

讨论一下吧~~
...全文
267 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuzuning 2012-05-08
  • 打赏
  • 举报
回复
session 的序列化是在内部完成的,若需改变算法,就需要修改内核
如果用php代码实现,显见得有点得不偿失

文件存储的session 利用了操作系统的文件锁功能(将并行转为串行)来解决并发一致性
amani11 2012-05-08
  • 打赏
  • 举报
回复
session_set_save_handler 自定义 open write close ……操作

不过为了避免脏读,代价不小啊……
xuzuning 2012-05-08
  • 打赏
  • 举报
回复
你可能需要对 sessionid 附加一个状态字,open时置位,close时复位
操作前先检查该字,处于置位时就等待
liang8305 2012-05-08
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

session 的序列化是在内部完成的,若需改变算法,就需要修改内核
如果用php代码实现,显见得有点得不偿失

文件存储的session 利用了操作系统的文件锁功能(将并行转为串行)来解决并发一致性
[/Quote]

恩,感谢感谢,我看了相关的源码。了解了一些

不过,对于phpredis的并发一致性问题,应该怎么办? redis自己并没有锁,或者说phpredis在session handle也并没有去实现锁
liang8305 2012-05-08
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

如果不是用序列化(session的序列化已经简化了许多),你认为用什么存放比较合适?
[/Quote]

而且相对于文件存储的session,用phpredis会有session值的并发一致性问题
liang8305 2012-05-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

如果不是用序列化(session的序列化已经简化了许多),你认为用什么存放比较合适?
[/Quote]

个人认为,session_id作为key没有问题
但是$_SESSION是一个hash数组,也就是说整个session是一个2维的 sessionid=>(key=>value)的结构
那感觉用 redis的hash结构更加符合啊
key =session id
field = $_SESSION 的 key
value = session的value

十一文 2012-04-04
  • 打赏
  • 举报
回复
把session 存为json格式吧
然后用sessionid做key
qq120848369 2012-04-01
  • 打赏
  • 举报
回复
key=>value,value再用key=>value的字符串连起来难道不好么。。 存和读都没有压力。
xuzuning 2012-04-01
  • 打赏
  • 举报
回复
如果不是用序列化(session的序列化已经简化了许多),你认为用什么存放比较合适?

21,893

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧