优化使用mysql存储session

之前写过两篇文章《自定义SESSION(二)——数据库保存》和《我为什么不使用session》

但后来发现都有问题。前者处理在实际中几乎没什么用处,而且session回收还得自己另外处理。后者频繁的操作数据库,打来了很大的性能问题。

这两天仔细考虑下,大致给出一个方案,但还没有具体详细的测试。

1、session处理和统计结合起来。同时游客也都有记录。

2、完全使用数据库和cookie来模拟session的功能。

3、用户的对session的操作都尽量保证在一条sql语句完成。不用到session的时候,绝对不多一条查询。

4、为了效率起见,session的回收没有集成进来,但提供了接口,可以调用实现。

暂时给出代码,不具体解释。

sql

CREATE TABLE `*****_session` (
`sid` char(32) NOT NULL,
`uid` int(10) NOT NULL,
`username` char(32) NOT NULL,
`usertype` tinyint(1) NOT NULL,
`activetime` int(10) NOT NULL,
`expiry` int(10) NOT NULL,
`ip` char(15) NOT NULL,
`url` char(80) NOT NULL,
`value` char(255) NOT NULL,
PRIMARY KEY (`sid`)
) ENGINE=MEMORY DEFAULT CHARSET=utf8;

时间: 2024-12-02 23:19:00

优化使用mysql存储session的相关文章

优化使用mysql存储session的php代码_php技巧

之前写过两篇文章<自定义SESSION(二)--数据库保存>和<我为什么不使用session>   但后来发现都有问题.前者处理在实际中几乎没什么用处,而且session回收还得自己另外处理.后者频繁的操作数据库,打来了很大的性能问题.   这两天仔细考虑下,大致给出一个方案,但还没有具体详细的测试.   1.session处理和统计结合起来.同时游客也都有记录.   2.完全使用数据库和cookie来模拟session的功能.   3.用户的对session的操作都尽量保证在一条

php中利用redis存储session实例详解

phpinfo,可以看到session存储,可以使用files user memcache redis,使用数据库存储session的好处是较之文件存储,在大用户量下速度更快,性能更优,而且如果做分布式系统,肯定是需要使用数据库存储session的.这里总结下使用redis存储session的两种方式 使用mysql存储session大家应该使用过,session生命周期的原理其实就是session.gcprobability,session.gcdivisor这两个参数和最大生命时间决定的.每

mysql性能优化学习笔记-存储引擎

mysql体系架构 客户端(java.php.python等) mysql服务层(连接管理器.查询解析器.查询优化器.查询缓存) mysql存储引擎(innodb.myisam等) 存储引擎针对表而言的,不针对库 mysql存储引擎 mysql存储引擎之MyISAM 5.5前默认的存储引擎.临时表(查询.排序时由查询优化器生成的表).系统表 特性: 并发性与锁级别(表级锁), 表损坏修复,检查check table tablename,修复repair table tablename 此外也可以

PHP利用MySQL保存session的实现思路及示例代码

 实现环境: PHP 5.4.24 MySQL 5.6.19 OS X 10.9.4/Apache 2.2.26 一.代码 1 CREATE TABLE `session` ( 2 `skey` char(32) CHARACTER SET ascii NOT NULL, 3 `data` text COLLATE utf8mb4_bin, 4 `expire` int(11) NOT NULL, 5 PRIMARY KEY (`skey`), 6 KEY `index_session_expi

Mysql存储引擎之TokuDB以及它的数据结构Fractal tree(分形树)

在目前的Mysql数据库中,使用最广泛的是innodb存储引擎.innodb确实是个很不错的存储引擎,就连高性能Mysql里都说了,如果不是有什么很特别的要求,innodb就是最好的选择.当然,这偏文章讲的是TokuDB,不是innodb,相比innodb,TokuDB有着自己的特点. BTree和Fractal tree的比较: 目前无论是SQL Server,还是MySQL的innodb,都是用的B+Tree(SQL Server用的是标准的B-Tree)的索引结构.从理论上来说,这个结构在

MYSQL存储数据乱码

mysql的字符集设置有多个层级,在mysql中存储中文,如果不能正确设置字符集,很容易出现数据乱码.今天就有一个用户反馈他数据库中的数据下午1点多开始出现了乱码.在这里,我分享下具体问题的排查过程,以及解决的办法.   (1)  排除客户端设置导致的显示乱码 如果用户设置的mysql character_set_client跟客户端显示的字符集不一致,很容易导致中文数据乱码. 设置session字符集为utf8:set names utf8,设置客户端显示字符集为utf8,然后从表中selec

Sphinx全文检索引擎使用指南:MySQL存储引擎

6.1. SphinxSE概览 SphinxSE是一个可以编译进 MySQL 5.x版本的MySQL存储引擎,它利用了该版本MySQL的插件式体系结构.SphinxSE不能用于 MySQL 4.x系列,它需要MySQL 5.0.22或更高版本:或 MySQL 5.1.12或更高版本. 尽管被称作"存储引擎",SphinxSE自身其实并不存储任何数据.它其实是一个允许 MySQL服务器与searchd交互并获取搜索结果的嵌入式客户端.所有的索引和搜索都发生在 MySQL之外. 显然,Sp

MySQL存储IP地址的方法_Mysql

为什么要问如何存储IP? 首先就来阐明一下部分人得反问:为什么要问IP得怎样存,直接varchar类型不就得了吗? 其实做任何程序设计都要在功能实现的基础上最大限度的优化性能.而数据库设计是程序设计中不可忽略的一个重要部分,所以巧存IP地址可以一定程度获得很大提升. 利用函数算法处理 在MySQL中没有直接提供IP类型字段,但如果有两个函数可以把IP与最大长度为10位数字类型互转,所以使用int类型存储IP比varchar类型存储IP地址性能要提升很多,减少不少空间.因为varchar是可变长形

基于Mysql存储引擎的深入分析_Mysql

MySQL有很多种存储引擎,针对不同的应用,可以为每张表选择合适的存储引擎,这样有助于提升MySQL性能.创建新闻表news: 复制代码 代码如下: CREATE  TABLE `sandbox`.`news` (      `id` INT NOT NULL AUTO_INCREMENT ,      `name` VARCHAR(45) NULL ,          `content` VARCHAR(45) NULL ,      `created` VARCHAR(45) NULL ,