gorm-cache icon indicating copy to clipboard operation
gorm-cache copied to clipboard

缓存key有问题

Open siguorui opened this issue 1 year ago • 2 comments

` // 调用 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计算的却是同一个。太坑了。

siguorui avatar May 17 '23 08:05 siguorui

` // 调用 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计算的却是同一个。太坑了。

非常抱歉,当时做的时候没问题的,应该是版本的更迭导致哪里出了问题

liyuan1125 avatar Jul 17 '23 10:07 liyuan1125

主要是同样的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) }

965114346 avatar Oct 30 '23 02:10 965114346