You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
go-zero/doc/sql-cache.md

24 lines
1.3 KiB
Markdown

4 years ago
# DB缓存机制
## QueryRowIndex
* 没有查询条件到Primary映射的缓存
* 通过查询条件到DB去查询行记录然后
* **把Primary到行记录的缓存写到redis里**
* **把查询条件到Primary的映射保存到redis里***框架的Take方法自动做了*
* 可能的过期顺序
* 查询条件到Primary的映射缓存未过期
* Primary到行记录的缓存未过期
* 直接返回缓存行记录
* Primary到行记录的缓存已过期
* 通过Primary到DB获取行记录并写入缓存
* 此时存在的问题是查询条件到Primary的缓存可能已经快要过期了短时间内的查询又会触发一次数据库查询
* 要避免这个问题,可以让**上面粗体部分**第一个过期时间略长于第二个比如5秒
* 查询条件到Primary的映射缓存已过期不管Primary到行记录的缓存是否过期
* 查询条件到Primary的映射会被重新获取获取过程中会自动写入新的Primary到行记录的缓存这样两种缓存的过期时间都是刚刚设置
* 有查询条件到Primary映射的缓存
* 没有Primary到行记录的缓存
* 通过Primary到DB查询行记录并写入缓存
* 有Primary到行记录的缓存
* 直接返回缓存结果