【问题标题】:Innodb memcached plugin in RDS not deleting expired rowsRDS中的Innodb memcached插件不删除过期行
【发布时间】: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


    【解决方案1】:

    我绝不是专家,因为我自己刚刚开始使用 memcached。但是,这是来自 Python 教程的 MySQL 文档。

    似乎是说如果你使用 InnoDB memcached 插件,MySQL 会处理缓存过期,而你输入的缓存过期时间真的没有关系。

    And for the flags, expire, and CAS values, we specify corresponding columns based on the settings from the sample table demo.test. These values are typically not significant in applications using the InnoDB memcached plugin, because MySQL keeps the data synchronized and there is no need to worry about data expiring or being stale.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-30
      • 2011-11-29
      相关资源
      最近更新 更多