【发布时间】:2013-08-22 21:40:54
【问题描述】:
我最近使用新的 Memcached InnoDB 插件在 AWS 中为 MySQL 5.6 设置了一个 RDS 实例。一切都很好,我的应用程序可以从映射表中存储和检索缓存的项目。当我存储项目时,我提供了一个超时,并且一旦项目的 TTL 过期,memcached 就不会正确返回项目。到目前为止一切顺利......
但是,当我查看基础表时,它充满了已经过期的行。
MySQL 文档 (http://dev.mysql.com/doc/refman/5.6/en/innodb-memcached-intro.html) 指出,当使用“innodb_only”缓存策略时,项目过期无效(尽管它没有明确指出它指的是哪个操作)。无论如何,我的cache_policies 表如下所示:
mysql> select * from innodb_memcache.cache_policies;
+--------------+------------+------------+---------------+--------------+
| policy_name | get_policy | set_policy | delete_policy | flush_policy |
+--------------+------------+------------+---------------+--------------+
| cache_policy | caching | caching | innodb_only | innodb_only |
+--------------+------------+------------+---------------+--------------+
1 row in set (0.01 sec)
因此,根据文档,应遵守过期字段。
作为参考,我的容器表如下所示:
mysql> select * from innodb_memcache.containers;
+---------+-----------+-----------+-------------+---------------+-------+------------+--------------------+------------------------+
| name | db_schema | db_table | key_columns | value_columns | flags | cas_column | expire_time_column | unique_idx_name_on_key |
+---------+-----------+-----------+-------------+---------------+-------+------------+--------------------+------------------------+
| default | sessions | userData | sessionID | data | c3 | c4 | c5 | PRIMARY |
+---------+-----------+-----------+-------------+---------------+-------+------------+--------------------+------------------------+
2 rows in set (0.00 sec)
而数据表是:
mysql> desc sessions.userData;
+-----------+---------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+---------------------+------+-----+---------+-------+
| sessionID | varchar(128) | NO | PRI | NULL | |
| data | blob | YES | | NULL | |
| c3 | int(11) | YES | | NULL | |
| c4 | bigint(20) unsigned | YES | | NULL | |
| c5 | int(11) | YES | | NULL | |
+-----------+---------------------+------+-----+---------+-------+
5 rows in set (0.00 sec)
更详细一点,MySQL 文档指出,在修改缓存策略后,您需要重新安装 Memcached 插件,但我没有找到在 RDS 上执行此操作的方法,所以我删除了 Memcached 选项组,重新启动,添加再次 memcached 选项组,再次重新启动...但行为没有明显变化。
所以,总而言之,我是否在这里遗漏了一些步骤或配置?我不想创建一个单独的进程来删除表中过期的行,因为我希望 Memcached 集成为我做这件事。
【问题讨论】:
标签: mysql amazon-web-services memcached innodb rds