为啥要缓存对 MySQL RDS 的 AWS Lambda python 调用?

Posted

技术标签:

【中文标题】为啥要缓存对 MySQL RDS 的 AWS Lambda python 调用?【英文标题】:Why is an AWS Lambda python call to a MySQL RDS being cached?为什么要缓存对 MySQL RDS 的 AWS Lambda python 调用? 【发布时间】:2018-10-25 20:18:35 【问题描述】:

为了简化我的程序,我有一个 mysql RDS DB,我想开发一个 Lambda 函数来获取插入到特定列中的最后一个值。

我在 lambda 函数中有以下代码,基于 this AWS tutorial:

# Connexion to DB outside the handler, per AWS recomendation 
def lambda_handler(event, context):
    with conn.cursor() as cur:
        cur.execute("SELECT column FROM DB.table ORDER BY create_time DESC LIMIT 1;")  
        row = cur.fetchone()
return row[0]

我正在使用pymysql

基本上,在第一次调用中(例如,在保存 lambda 函数之后)它按预期工作,并返回表中的最后一个值。

但是,对于短时间间隔(几分钟)内的任何其他调用,它会继续返回相同的值,与任何 DB 更改无关。

保存或等待几分钟会导致正确的结果。 是否有可能我无意中缓存了结果?

【问题讨论】:

看到this question后用conn.autocommit(True)解决了。 【参考方案1】:

解决方案是在每个 Select 查询之后使用一次 conn.autocommit(True)conn.commit()

使用此选项,每次选择查询后都会有一个提交。 否则,后续的选择将呈现相同的结果。

这个错误似乎是Bug #42197 与 MySQL 中的查询缓存和自动提交有关。状态不会修复!还有一个issue in pymysql,但它已关闭。

几个月后,这应该无关紧要了,因为MySQL 8.0 is dropping Query Cache。

【讨论】:

在选择上提交的需求非常烦人。

以上是关于为啥要缓存对 MySQL RDS 的 AWS Lambda python 调用?的主要内容,如果未能解决你的问题,请参考以下文章

如何用AWS EC2主机连接RDS

如何使用 mySQL 工作台连接到 AWS 私有子网 VPC 中的 RDS

AWS RDS 大型实例上的 MySQL 全文搜索速度极慢

连接到 Mysql AWS RDS 实例时工作台错误 10060

更改 AWS RDS mysql时区 -摘自网络

升级过程中从 5.6 到 5.7 的 AWS RDS MySQL 复制