gpt4 book ai didi

php - MySQL session 表方法

转载 作者:可可西里 更新时间:2023-11-01 07:01:50 27 4
gpt4 key购买 nike

我正在使用 LAMP 开发 Multi-Tenancy Web 应用程序。我所有的用户 session 数据目前都存储在表类型为 InnoDB 的 mysql 中。

有什么方法可以使用 MEMORY(曾经是 HEAP)表类型来存储当前 session 并使用 session 处理程序的垃圾收集器功能在 InnoDB(常规表)和(in)之间移动 session 内存表?

当我想要集群和主从配置时,这个配置也会以任何方式影响在稍后阶段?

提前致谢,占用时间

最佳答案

写一个 custom session handler非常简单,但我认为可能有比 MEMORY 表更好的存储 session 数据的方法。

类似的架构(通过 a previous question 的更改提升)

CREATE TABLE IF NOT EXISTS `session` (
`id` char(32) NOT NULL,
`data` varchar(20000) NOT NULL,
`time_created` timestamp NOT NULL default '0000-00-00 00:00:00',
`time_updated` timestamp NOT NULL default '0000-00-00 00:00:00' on update CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `time_created` (`time_created`),
KEY `time_updated` (`time_updated`)
) ENGINE=MEMORY DEFAULT CHARSET=utf8;

那么您只需定义您的 session 处理程序函数,如上面的链接或此 tutorial 中所述.如果你想在垃圾收集期间保存你的 session 信息,你只需要使用 INNODB 引擎创建一个与上面相同的表,并在 gc() 的末尾添加一点 函数将行从 MEMORY 复制到 INNODB 表。

但是 MEMORY 表有一些非常重要的限制。他们不能使用 BLOBTEXT 列——这就是为什么我有上面那个丑陋的 varchar(20000) 的原因。它们的最大大小为 16 MB。如果您有很多用户,保持很多状态,或者垃圾收集有问题,您可能会达到该限制并崩溃。

一个更好的主意是使用 memcache session handler ,特别是如果您不需要将 session 信息存储到遥远的 future 。我很确定 memcached 比任何 RDBMS 都快(即使使用 MEMORY 表),而且它的扩展性很好。另外,您不必编写自己的 session 处理函数。

关于php - MySQL session 表方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1108330/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com