修复gdb查询缓存失效问题

This commit is contained in:
John
2018-07-23 19:17:17 +08:00
parent 7a98f3e442
commit 0ddfdae20c
3 changed files with 32 additions and 10 deletions

View File

@ -17,6 +17,7 @@ import (
"gitee.com/johng/gf/g/container/gtype"
"gitee.com/johng/gf/g/container/gring"
"gitee.com/johng/gf/g/os/gcache"
"gitee.com/johng/gf/g/container/gmap"
)
const (
@ -126,6 +127,9 @@ var linkMysql = &dbmysql{}
// PostgreSQL接口对象
var linkPgsql = &dbpgsql{}
// 数据库查询缓存对象map使用数据库连接名称作为键名键值为查询缓存对象
var dbCaches = gmap.NewStringInterfaceMap()
// 使用默认/指定分组配置进行连接数据库集群配置项default
func New(groupName...string) (*Db, error) {
name := config.d
@ -158,7 +162,7 @@ func New(groupName...string) (*Db, error) {
if len(slaveList) > 0 {
slaveNode = getConfigNodeByPriority(slaveList)
}
return newDb(masterNode, slaveNode)
return newDb(masterNode, slaveNode, name)
} else {
return nil, errors.New(fmt.Sprintf("empty database configuration for item name '%s'", name))
}
@ -198,7 +202,7 @@ func getConfigNodeByPriority (cg ConfigGroup) *ConfigNode {
}
// 创建数据库链接对象
func newDb (masterNode *ConfigNode, slaveNode *ConfigNode) (*Db, error) {
func newDb (masterNode *ConfigNode, slaveNode *ConfigNode, groupName string) (*Db, error) {
var link Link
switch masterNode.Type {
case "mysql": link = linkMysql
@ -217,14 +221,27 @@ func newDb (masterNode *ConfigNode, slaveNode *ConfigNode) (*Db, error) {
return nil, err
}
}
return &Db {
db := &Db {
link : link,
master : master,
slave : slave,
charl : link.getQuoteCharLeft(),
charr : link.getQuoteCharRight(),
debug : gtype.NewBool(),
cache : gcache.New(),
}, nil
}
if v := dbCaches.Get(groupName); v == nil {
dbCaches.LockFunc(func(m map[string]interface{}) {
if v, ok := m[groupName]; !ok {
db.cache = gcache.New()
m[groupName] = db.cache
} else {
db.cache = v.(*gcache.Cache)
}
})
} else {
db.cache = v.(*gcache.Cache)
}
return db, nil
}

View File

@ -20,7 +20,7 @@ import (
// http客户端
type Client struct {
http.Client // 底层http client对象
header map[string]string // header
header map[string]string // HEADER信息Map
authUser string // HTTP基本权限设置名称
authPass string // HTTP基本权限设置密码
}
@ -63,7 +63,8 @@ func (c *Client) Put(url, data string) (*ClientResponse, error) {
return c.DoRequest("PUT", url, []byte(data))
}
// POST请求提交数据
// POST请求提交数据,默认使用表单方式提交数据(绝大部分场景下也是如此)。
// 如果服务端对Content-Type有要求可使用Client对象进行请求单独设置相关属性。
// 支持文件上传需要字段格式为FieldName=@file:
func (c *Client) Post(url, data string) (*ClientResponse, error) {
var req *http.Request

View File

@ -70,7 +70,7 @@ func (s *Server)parsePattern(pattern string) (domain, method, uri string, err er
return
}
// 注册服务处理方法
// 路由注册处理方法
func (s *Server) setHandler(pattern string, item *HandlerItem) error {
domain, method, uri, err := s.parsePattern(pattern)
if err != nil {
@ -91,7 +91,9 @@ func (s *Server) setHandler(pattern string, item *HandlerItem) error {
if _, ok := s.handlerTree[domain]; !ok {
s.handlerTree[domain] = make(map[string]interface{})
}
// 用于遍历的指针
p := s.handlerTree[domain]
// 当前节点的规则链表
lists := make([]*list.List, 0)
array := strings.Split(uri[1:], "/")
item.router.Priority = len(array)
@ -117,7 +119,7 @@ func (s *Server) setHandler(pattern string, item *HandlerItem) error {
}
p = p.(map[string]interface{})[v]
// 到达叶子节点往list中增加匹配规则
if v != "/" && k == len(array) - 1 {
if k == len(array) - 1 && v != "/" {
if v, ok := p.(map[string]interface{})["*list"]; !ok {
p.(map[string]interface{})["*list"] = list.New()
lists = append(lists, p.(map[string]interface{})["*list"].(*list.List))
@ -127,7 +129,7 @@ func (s *Server) setHandler(pattern string, item *HandlerItem) error {
}
}
}
// 从头开始遍历链表,优先级高的放在前面
// 从头开始遍历每个节点的模糊匹配链表,将该路由项插入进去(按照优先级高的放在前面)
for _, l := range lists {
for e := l.Front(); e != nil; e = e.Next() {
if s.compareHandlerItemPriority(item, e.Value.(*HandlerItem)) {
@ -147,6 +149,8 @@ func (s *Server) setHandler(pattern string, item *HandlerItem) error {
s.handlerMap[s.handlerKey(domain, method, uri)] = item
}
}
//b, _ := gparser.VarToJsonIndent(s.handlerTree)
//fmt.Println(string(b))
return nil
}