我正在尝试进行一些研究,以便在多服务器环境中找到会话管理的最佳选择,并且想知道人们找到了哪些成功以及为什么成功。优点和缺点。
RDBMS - 更慢。更好地用于其他数据。
Memcached - 你不能在不丢失会话的情况下删除memcached服务器
Redis - 修复了memcached的问题,但是可扩展性的简易性呢?容错?
Cassandra - 具有良好的容错能力。优点和缺点?
MongoDB,其他人?
谢谢!
答案 0 :(得分:8)
就个人而言,我使用Cassandra来保存php会话数据。它使用session_id:{session_data_as_json}将它存储在单行的单个列中,并在列上设置TTL,以便自动执行垃圾清理。工作一种享受。
我选择了cassandra,因为它已拥有所有其他用户数据...对于缓存,我在所有前端Web服务器上启用了APC并且没有任何问题......
这是最好的方法吗?不确定。它适合我需要实现的环境,技术和业务规则。 ......
旁注,我确实开始使用本机php - > cassandra会话处理程序:https://github.com/sdolgy/php-cassandra-sessions - 这显示了如何使用PHPCassa和Cassandra设置TTL
答案 1 :(得分:5)
Redis - 修复了memcached的问题,但是如何轻松实现 可扩展性?容错?
Redis支持replication,即将推出的cluster也应支持跨多个节点分片数据。
答案 2 :(得分:0)
有点晚了,但也许有人对跟进感兴趣。我们使用Cassandra作为我们的会话商店,并通过spring-session(使用自己开发的spring-session-cassandra插件)访问它。会话中的对象通过Kryo(https://github.com/EsotericSoftware/kryo)编组/解组。
此设置为我们提供1到2毫秒的会话和1毫秒以下的保存:
但是根据环负载,响应时间中存在一些异常值: