文章内容

2021/11/11 14:28:23,作 者: 黄兵

MySQL 数据库连接池与 Redis 缓存问题

最近使用 MySQL 连接池将数据库需要缓存的数据保存到 Redis,使用的是 Python 中的 DBUtils,但是再程序怕了一段时间之后,一直缓存的是原来的数据,并不是最新数据,例如:

现在已经过去了几个小时,但是缓存的依然是程序第一次运行的时间,以后都是读取数据库连接池的缓存数据。

存在问题的原因:

class GETSqlDataUtil(object):
def __init__(self):
self._mysql = mysql_connection_pool.Mysql()

# 查询需要缓存的数据
def get_crawler_info_rows(self, crawler_name):
# crawler_name 是 链接后面的 crawler_name,例如:https://www.pdflibr.com/crawler/googlebot
# crawler_name: googlebot
get_crawler_sql = f"SELECT * FROM crawler_introduction WHERE link_text='{crawler_name}'"
get_crawler = self._mysql.get_one(sql=get_crawler_sql)
get_crawler_info_sql = f"SELECT * FROM crawler_info WHERE crawler_introduction_id={get_crawler['id']};"

类初始化了数据库连接池,之后每次程序都通过连接池缓存返回数据,所以一直是第一次从数据库读取的数据。

解决方案:

数据库连接在具体函数中初始化,修改后代码如下:

class GETSqlDataUtil(object):
# 查询需要缓存的数据
@staticmethod
def get_crawler_info_rows(crawler_name):
mysql = mysql_connection_pool.Mysql()

问题解决。


黄兵个人博客原创。

转载请注明出处:黄兵个人博客 - MySQL 数据库连接池与 Redis 缓存问题

分享到:

发表评论

评论列表