日期:2014-05-17  浏览次数:20459 次

php利用memcache 存session 丢数据的问题
先上测试代码,大家也可以测试下
index.php
<?php
session_start();
$method = $_GET['Method'];
if(isset($_SESSION['Method'])){
$_SESSION['Method'] = $_SESSION['Method'].$method;
}else{
$_SESSION['Method'] =$method;
}
?>

clent.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head>
<script type="text/javascript" src="http://127.0.0.1/?Method=1" reload="1"></script>
<script type="text/javascript" src="http://127.0.0.1/?Method=2" reload="1"></script>
<script type="text/javascript" src="http://127.0.0.1/?Method=3" reload="1"></script>
<script type="text/javascript" src="http://127.0.0.1/?Method=4" reload="1"></script>
<script type="text/javascript" src="http://127.0.0.1/?Method=5" reload="1"></script>
<script type="text/javascript" src="http://127.0.0.1/?Method=6" reload="1"></script>
<body>
</body>
</html>


之后大家可以打印一下SESSION看看,结果经常会丢数据。SESSION经常就记录不全。不知道是为什么,还请高手来解释下。

下面附上我的其他配置
libevent-2.0.18-stable.tar.gz 服务器端
memcached-1.4.13.tar.gz  服务器端
memcache-2.2.6.tgz PHP客户端



PHP.ini
session.save_path="tcp://192.168.234.234:11211"
session.save_handler = memcache

PHP组件
php_memcache.dll  版本是2.2.6.0

------解决方案--------------------
引用:
....当然是读了才发现的问题啊。。
我在memcache里遍历了数据,确实是没有写进去。并不是没读出来。
那你就是没理解我的意思
我是说:写了马上就读,能读到并不错,这才表示写进去了
你以为如何?
------解决方案--------------------
你应该考虑到的是浏览器几乎同时并发请求的问题,你的新值是根据几毫秒前读出的值来设定的。可在这点时间里,完全有可能有新的值插入成功。如果再插入,那么将造成前面写入的新值还没被读出,反而立即被覆盖了。所以丢失数据很正常。
你完全可以在客户端或者服务器端写个测试看看,比较一下每次停顿一秒和同时并发的效果。
------解决方案--------------------