我们的旧网站建立在LAMP堆栈上,并带有用户身份验证。现在我们已经为具有实时聊天功能,视频和论坛等的相同用户构建了一个新的社交平台,我们已经将node.js用于此目的。
当用户在旧网站中登录他的帐户时 - 假设他可以点击链接
www.xyz.com/social
将把他带到这个新的node.js平台。
所以我不确定如何将用户详细信息从apache传递到node.js - 我只需要用户ID,然后在node.js中 - 我可以查询mysql表并加载用户详细信息。
简单解决方案
简单的解决方案是散列用户ID和电子邮件,并将散列作为密钥存储在memcache服务器中,并将用户详细信息作为值传递
$hash = md5($user_id+$email); $memcache = new Memcache; $memcache->connect("localhost",11211) or die ("could not connect"); $data = json_encode(array("id"=>$user_id,"name"=>"aaa")); $memcache->set("key-".$hash,$data);
然后在链接中传递哈希值作为参数,如
www.xyz.com/social/$$hash-value$$
并在节点js中 - 根据哈希键从memcache中检索用户详细信息。
1)这是否正确接近这一点。
2)memcache是否支持存储在网站内从旧网站移动到新node.js网站的众多用户(在给定时间约500个用户)的数据。
提前感谢您的意见。
答案 0 :(得分:7)
1)这是否正确接近这一点。
是的,正确这样做。但是可以更好地解决这个问题:
正确选择失效条件。
2)memcache是否支持存储这么多用户的数据
是的,它会。但是它很大程度上取决于你的memcache部署,你提供了多少内存?
计算或得到一个粗略的尊重,多少需要RAM来存储500个用户详细信息。一旦memcache进入交换,那么提供这些请求将是memcache的痛苦。
但是,按照我的说法,更好的方法是只坚持使用。
md5(user-id . timestamp. KEY)
,并将此条目保存在数据库中。<强>原因强>
答案 1 :(得分:3)
Memcache旨在成为数据缓存服务,而不是数据传输服务。无法保证存储在缓存中的值可用于其他组件。
您尝试做的事情大部分都会有效,但当您开始对系统施加一些负担时,可能会遇到奇怪的问题。您可能希望使用像RabbitMQ或Kafka这样的消息排队系统,或者使用数据库备份memcached。
答案 2 :(得分:0)
正如之前的答案所暗示的那样,这是一个正确的瓶颈(负载或流量达到RAM),这可能是一个真正的问题。
我想建议一种新的方式。 您实际上不需要重现“PHP的用户级会话数据”。您可以立即使用nodejs。为此,您需要更改旧灯泡代码的会话处理程序。使用json格式在memcache中存储会话。然后直接从nodejs访问它。因为你没有复制任何数据;你将节省大量的ram和I / O操作(如果你在文件或数据库中存储会话),你也将节省计算能力。所有这些节省将为您带来性能。
这是一个将会话数据存储为memcache中的json的示例代码。
我没有尝试代码。但我认为你可以很容易地处理它。