1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- package template
- import (
- "context"
- "go-common/app/interface/main/creative/conf"
- "go-common/library/cache/memcache"
- "go-common/library/database/sql"
- "go-common/library/log"
- "time"
- )
- // Dao is archive dao.
- type Dao struct {
- // config
- c *conf.Config
- // db
- db *sql.DB
- // insert
- addTplStmt *sql.Stmt
- // update
- upTplStmt *sql.Stmt
- delTplStmt *sql.Stmt
- // select
- getTplStmt *sql.Stmt
- getMutilTplStmt *sql.Stmt
- getCntStmt *sql.Stmt
- // mc
- mc *memcache.Pool
- mcExpire int32
- // chan
- tplch chan func()
- }
- // New init api url
- func New(c *conf.Config) (d *Dao) {
- d = &Dao{
- c: c,
- db: sql.NewMySQL(c.DB.Creative),
- // memcache
- mc: memcache.NewPool(c.Memcache.Archive.Config),
- mcExpire: int32(time.Duration(c.Memcache.Archive.TplExpire) / time.Second),
- // chan
- tplch: make(chan func(), 1024),
- }
- // insert
- d.addTplStmt = d.db.Prepared(_addTplSQL)
- // update
- d.upTplStmt = d.db.Prepared(_upTplSQL)
- d.delTplStmt = d.db.Prepared(_delTplSQL)
- // select
- d.getTplStmt = d.db.Prepared(_getTplSQL)
- d.getMutilTplStmt = d.db.Prepared(_getMutilTplSQL)
- d.getCntStmt = d.db.Prepared(_getCntSQL)
- go d.cacheproc()
- return
- }
- // Ping db
- func (d *Dao) Ping(c context.Context) (err error) {
- if err = d.db.Ping(c); err != nil {
- return
- }
- return d.db.Ping(c)
- }
- // Close db
- func (d *Dao) Close() (err error) {
- if d.db != nil {
- d.db.Close()
- }
- return d.db.Close()
- }
- // addCache add to chan for cache
- func (d *Dao) addCache(f func()) {
- select {
- case d.tplch <- f:
- default:
- log.Warn("template cacheproc chan full")
- }
- }
- // cacheproc is a routine for execute closure.
- func (d *Dao) cacheproc() {
- for {
- f := <-d.tplch
- f()
- }
- }
|