You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在NodeJS中通过Sequelize查询MariaDB时禁用缓存的方法

解决Sequelize查询MariaDB时无法获取实时数据的问题

方法一:在Sequelize findAll中添加SQL_NO_CACHE

你可以通过attributes选项,用Sequelize.literal在SELECT语句中插入SQL_NO_CACHE,强制跳过MariaDB的查询缓存:

isUserExists: async function (inUser, inChat, inLevel) {
    const iskunde = await kunden.findAll({
        attributes: [Sequelize.literal('SQL_NO_CACHE *')],
        where: {
            kunde: inUser,
            chat: inChat,
            level: inLevel,
            created_at: {
                [Op.gte]: Sequelize.literal("DATE_SUB(NOW(), INTERVAL 15 MINUTE)"),
            },
        },
        raw: true,
    }); 

    return Array.isArray(iskunde) && iskunde.length > 0;
},

这段代码会生成带SQL_NO_CACHE的查询语句,确保每次都从数据库读取最新数据,而非使用缓存结果。

方法二:使用原始SQL查询

如果觉得ORM方式不够直接,也可以用Sequelize的原始查询方法,直接写出包含SQL_NO_CACHE的SQL语句:

isUserExists: async function (inUser, inChat, inLevel) {
    const [rows] = await sequelize.query(
        `SELECT SQL_NO_CACHE * FROM kunden 
         WHERE kunde = ? AND chat = ? AND level = ? 
         AND created_at >= DATE_SUB(NOW(), INTERVAL 15 MINUTE)`,
        {
            replacements: [inUser, inChat, inLevel],
            type: sequelize.QueryTypes.SELECT,
            raw: true
        }
    );

    return Array.isArray(rows) && rows.length > 0;
},

注意替换代码中的sequelize为你实际的Sequelize实例对象。

额外排查点

如果添加SQL_NO_CACHE后问题仍存在,需要考虑其他可能性:

  • MariaDB版本问题:MariaDB 10.1.7开始废弃查询缓存,10.5版本后彻底移除。若你的数据库是新版本,缓存问题大概率不是查询缓存导致的。
  • 事务隔离级别:检查插入操作是否在未提交的事务中,或者查询使用了REPEATABLE READ默认隔离级别,导致无法读取未提交的新数据。可以尝试将查询的隔离级别改为READ COMMITTED:
    const iskunde = await kunden.findAll({
        // 其他选项...
        transaction: await sequelize.transaction({
            isolationLevel: Transaction.ISOLATION_LEVELS.READ_COMMITTED
        })
    });
    
  • Sequelize连接池:如果连接池中的连接持有旧的事务状态,也可能导致无法读取新数据,可以尝试在查询时强制使用新连接,或者调整连接池配置。

内容的提问来源于stack exchange,提问作者IFThenElse

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 17:55:22