dao.go 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. package fav
  2. import (
  3. "context"
  4. "time"
  5. "go-common/app/job/main/favorite/conf"
  6. "go-common/library/cache/memcache"
  7. "go-common/library/cache/redis"
  8. "go-common/library/database/sql"
  9. "go-common/library/log"
  10. )
  11. // Dao favorite dao.
  12. type Dao struct {
  13. db *sql.DB
  14. redis *redis.Pool
  15. mc *memcache.Pool
  16. redisExpire int
  17. mcExpire int32
  18. }
  19. // New new a dao and return.
  20. func New(c *conf.Config) (d *Dao) {
  21. d = &Dao{
  22. db: sql.NewMySQL(c.DB.Fav),
  23. // redis
  24. redis: redis.NewPool(c.Redis.Config),
  25. redisExpire: int(time.Duration(c.Redis.Expire) / time.Second),
  26. // memcache
  27. mc: memcache.NewPool(c.Memcache.Config),
  28. mcExpire: int32(time.Duration(c.Memcache.Expire) / time.Second),
  29. }
  30. return
  31. }
  32. // Close close all connection.
  33. func (d *Dao) Close() (err error) {
  34. if d.db != nil {
  35. d.db.Close()
  36. }
  37. if d.redis != nil {
  38. d.redis.Close()
  39. }
  40. if d.mc != nil {
  41. d.mc.Close()
  42. }
  43. return
  44. }
  45. // Ping ping all resource.
  46. func (d *Dao) Ping(c context.Context) (err error) {
  47. if err = d.pingRedis(c); err != nil {
  48. log.Error("d.pingRedis error(%v)", err)
  49. return
  50. }
  51. if err = d.pingMC(c); err != nil {
  52. log.Error("d.pingMC error(%v)", err)
  53. return
  54. }
  55. if err = d.pingMySQL(c); err != nil {
  56. log.Error("d.pingMySQL error(%v)", err)
  57. }
  58. return
  59. }
  60. // BeginTran crate a *sql.Tx for database transaction.
  61. func (d *Dao) BeginTran(c context.Context) (*sql.Tx, error) {
  62. return d.db.Begin(c)
  63. }