纯go语言写的, 用于数据库单表多字段的缓存.在高并发读取下性能是不错的,是并发安全的.
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了纯go语言写的, 用于数据库单表多字段的缓存.在高并发读取下性能是不错的,是并发安全的.,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2362字,纯文字阅读大概需要4分钟。
内容图文
数据库中表数据缓存在内存中, 加快读取速度,并减少数据库操作.
用的go语言自带的(sync.Map)线程安全的.(sync.Map)的读性能相当不错.可以和redis相当.只是写场景比redis慢一点.但对大量读,少量写场景还是非常适合.
如果用于工程,还需要增加和修改部份,可以把缓存与数据库同步改为管道,异步处理.减少突发并发量大的情况,减少对数据库的影响.增加日志处理.
目前只实现支持主键为一个,主键和各列为字符串的缓存.
目前在程序中: 更新,删除和插入是先更新缓存,再更新数据库.
具体代码在github上.
链接:https://github.com/jiang-ting-hua/dbcache.
//以下是使用方法.
//一. 要先配置 config.conf (配置连接数据库)和 tables.conf (配置需要缓存的表)和这二个文件.
//二. 测试数据: users.sql这个有建表结构和数据.目前只在mysql上测试了的.其它数据库可以修改.
//连接数据库
db, err := dbcache.ConnectDB()
if err != nil {
fmt.Println(err)
return
}
defer db.Close()
//初始化数据
rowNum, err := dbcache.InitCache(db)
if err != nil {
fmt.Println(err)
return
}
fmt.Println("缓存总行数:",rowNum)
//GetRow:根据主键,取得该行数据
result, err := dbcache.GetRow("2A7420SW66C5TJC02A77")
if err != nil {
fmt.Println(err)
}
for k,v := range result{
fmt.Println("根据主键,取得该行数据:",k,v)
}
//GetColumn:根据主键,取得某列的数据
v, err := dbcache.GetColumn("2A7420SW66C5TJC02A77", "name")
if err != nil {
fmt.Println(err)
}
fmt.Println("根据主键,取得某列的数据:",v)
//DelRow:根据主键,删除该行数据
n, err := dbcache.DelRow("294SKHRA7548PXFFTTLJ")
if err != nil {
fmt.Println(err)
}
fmt.Println("删除数据:",n)
//GetWhere:根据where条件,查询缓存中所有符合条件的行.
var value []map[string]string
//value ,_ = dbcache.GetWhere("name=AFA5Y9FB and password=Q80BJT")
value ,_ = dbcache.GetWhere("name=李明 or name=AFA5Y9FB")
fmt.Println("根据where条件,查询缓存中所有符合条件的行.")
for _,c := range value {
for k,v := range c {
fmt.Println(k, v)
}
}
//UpdateColumn:根据主键,更新一列
i,err := dbcache.UpdateColumn("2A7420SW66C5TJC02A77", "name", "李明")
if err != nil {
fmt.Println(err)
}
println("根据主键,更新一列",i)
//UpdateColumns:根据主键,更新多列
n, err = dbcache.UpdateColumns("2A7420SW66C5TJC02A77", "name=李平,address= 重庆")
if err != nil {
fmt.Println(err)
}
fmt.Println("UpdateColumns 更新列数据",n)
//InsertRow:插入一行数据
n, err = dbcache.InsertRow("uid=21111111,name=jth,address=重庆,password=888888")
if err != nil {
fmt.Println(err)
}
fmt.Println("InsertRow 更新列数据",n)
go不见不散
发布了2 篇原创文章 · 获赞 0 · 访问量 33
私信
关注
内容总结
以上是互联网集市为您收集整理的纯go语言写的, 用于数据库单表多字段的缓存.在高并发读取下性能是不错的,是并发安全的.全部内容,希望文章能够帮你解决纯go语言写的, 用于数据库单表多字段的缓存.在高并发读取下性能是不错的,是并发安全的.所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。