dao.go 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. package dao
  2. import (
  3. "context"
  4. "go-common/app/service/bbq/recsys-recall/conf"
  5. xcache "go-common/app/service/bbq/recsys-recall/dao/cache"
  6. "go-common/library/cache/redis"
  7. )
  8. // Dao dao
  9. type Dao struct {
  10. c *conf.Config
  11. redis *redis.Pool
  12. bfredis *redis.Pool
  13. lcache *xcache.LocalCache
  14. }
  15. // New init mysql db
  16. func New(c *conf.Config) (dao *Dao) {
  17. dao = &Dao{
  18. c: c,
  19. redis: redis.NewPool(c.Redis),
  20. bfredis: redis.NewPool(c.BFRedis),
  21. lcache: xcache.NewLocalCache(c.LocalCache),
  22. }
  23. return
  24. }
  25. // GetInvertedIndex 获取倒排索引
  26. func (d *Dao) GetInvertedIndex(ctx context.Context, key string, force bool) (b []byte, err error) {
  27. if b = d.lcache.Get(key); b != nil && !force {
  28. return
  29. }
  30. conn := d.redis.Get(ctx)
  31. defer conn.Close()
  32. for retry := 0; retry < 3; retry++ {
  33. b, err = redis.Bytes(conn.Do("GET", key))
  34. if err == redis.ErrNil {
  35. b = make([]byte, 0)
  36. return
  37. }
  38. if b != nil {
  39. d.lcache.Set(key, b)
  40. return
  41. }
  42. }
  43. return
  44. }
  45. // SetInvertedIndex 更新倒排索引
  46. func (d *Dao) SetInvertedIndex(c context.Context, key string, value []byte) error {
  47. conn := d.redis.Get(c)
  48. defer conn.Close()
  49. _, err := conn.Do("SETEX", key, 86400, value)
  50. return err
  51. }
  52. // Close close the resource.
  53. func (d *Dao) Close() {
  54. d.redis.Close()
  55. }
  56. // Ping dao ping
  57. func (d *Dao) Ping(c context.Context) error {
  58. // TODO: if you need use mc,redis, please add
  59. return nil
  60. }