gorm-cache
gorm-cache copied to clipboard
缓存key有问题
` // 调用 Gorm的方法生产SQL callbacks.BuildQuerySQL(tx)
// 是否有自定义key
if key, hasKey = FromKey(ctx); !hasKey {
key = p.prefix + generateKey(tx.Statement.SQL.String())
}`
未定义key的时候,使用tx.Statement.SQL.String()计算出key,但是callbacks.BuildQuerySQL(tx)处理后,sql语句的值还未放进去。比如,SELECT * FROM enum
WHERE type_id = ?,是这样的状态。这样就导致外部传的不同的type_id,但是key计算的却是同一个。太坑了。
` // 调用 Gorm的方法生产SQL callbacks.BuildQuerySQL(tx)
// 是否有自定义key if key, hasKey = FromKey(ctx); !hasKey { key = p.prefix + generateKey(tx.Statement.SQL.String()) }`
未定义key的时候,使用tx.Statement.SQL.String()计算出key,但是callbacks.BuildQuerySQL(tx)处理后,sql语句的值还未放进去。比如,SELECT * FROM
enum
WHERE type_id = ?,是这样的状态。这样就导致外部传的不同的type_id,但是key计算的却是同一个。太坑了。
非常抱歉,当时做的时候没问题的,应该是版本的更迭导致哪里出了问题
主要是同样的sql语句他们的hash值一样,需要同时带上参数能保证唯一性
// 是否有自定义key if key, hasKey = FromKey(ctx); !hasKey { sqlStr := tx.Dialector.Explain(tx.Statement.SQL.String(), tx.Statement.Vars...) key = p.prefix + generateKey(sqlStr) }