CREATE TABLE IF NOT EXISTS `keys` ( `key` varchar(32) NOT NULL, `time` int(12) NOT NULL, UNIQUE KEY `key` (`key`), KEY `time` (`time`) ) ENGINE=MyISAM;
CREATE TABLE IF NOT EXISTS `tmp0` ( `key` varchar(32) NOT NULL, `value` blob NOT NULL, `time` int(12) unsigned NOT NULL, KEY `key` (`key`) ) ENGINE=MyISAM;
.... tmp1 -> tmpf;
一共17个表
逻辑上这么处理
key的首字符用来分表到 tmp0 -> tmpf
添加数据:添加key和有效时间到keys表;添加key value 有效时间到tmp0-f的数据表 读取数据:根据key直接从tmp*读取数据 做下有效时间判断 过期则删除缓存 过期处理:使用计划任务从keys表读取过期数据索引 批量删除
方案二:
使用memcached
添加数据:添加key value 过期时间到memcached 读取数据:根据key从memcached直接读取数据 过期处理:memcached自动维护