com_cache_local.go 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. package services
  2. import (
  3. "app/commons/model/entity"
  4. "fmt"
  5. "time"
  6. )
  7. // tips:
  8. // 内存中获取常用数据
  9. // 用户信息 指标信息 等级配置...
  10. // 如果希望拿到最新数据 务必刷新所有数据
  11. // 获取用户信息 - 缓存
  12. var userMap map[int64]*entity.User
  13. var userUidMap map[string]*entity.User
  14. var userExpTime int64 = 0
  15. func (s *CommonService) UserInfoFromCache(userId int64) (*entity.User, error) {
  16. if userMap == nil {
  17. if err := s.RefreshUserMap(); err != nil {
  18. return nil, err
  19. }
  20. }
  21. v, ok := userMap[userId]
  22. if ok {
  23. return v, nil
  24. }
  25. return nil, fmt.Errorf("user not found")
  26. }
  27. func (s *CommonService) UserInfoFromCacheByUid(uid string) (*entity.User, error) {
  28. if userUidMap == nil || userExpTime < time.Now().Unix() {
  29. if err := s.RefreshUserMap(); err != nil {
  30. return nil, err
  31. }
  32. }
  33. v, ok := userUidMap[uid]
  34. if ok {
  35. return v, nil
  36. }
  37. return nil, fmt.Errorf("user :%s not found", uid)
  38. }
  39. func (s *CommonService) AllUserFromCache() (map[int64]*entity.User, error) {
  40. if err := s.RefreshUserQuotaMap(); err != nil {
  41. return nil, err
  42. }
  43. return userMap, nil
  44. }
  45. func (s *CommonService) RefreshUserMap() error {
  46. userMap = make(map[int64]*entity.User)
  47. userUidMap = make(map[string]*entity.User)
  48. items, err := s.BatchUser(s.DB().Where("1=1"))
  49. if err != nil {
  50. return err
  51. }
  52. for _, item := range items {
  53. userMap[item.Id] = item
  54. userUidMap[item.Uid] = item
  55. }
  56. userExpTime = time.Now().Add(time.Second * 120).Unix()
  57. return nil
  58. }
  59. // 获取用户指标信息
  60. var userQuotaMap map[int64]*entity.UserQuota
  61. var userQuotaExpTime int64 = 0
  62. var userQuotas []*entity.UserQuota
  63. func (s *CommonService) UserQuotaFromCache(userId int64) (*entity.UserQuota, error) {
  64. if userQuotaMap == nil || userQuotaExpTime < time.Now().Unix() {
  65. if err := s.RefreshUserQuotaMap(); err != nil {
  66. return nil, err
  67. }
  68. }
  69. v, ok := userQuotaMap[userId]
  70. if ok {
  71. return v, nil
  72. }
  73. return nil, fmt.Errorf("user not found")
  74. }
  75. // 强制刷新用户指标map 并获得
  76. func (s *CommonService) MustNewUserQuotaMapFromCache() (map[int64]*entity.UserQuota, error) {
  77. if err := s.RefreshUserQuotaMap(); err != nil {
  78. return nil, err
  79. }
  80. return userQuotaMap, nil
  81. }
  82. func (s *CommonService) RefreshUserQuotaMap() error {
  83. var err error
  84. userQuotaMap = make(map[int64]*entity.UserQuota)
  85. userQuotas, err = s.BatchUserQuota(s.DB().Where("1=1"))
  86. if err != nil {
  87. return err
  88. }
  89. for _, item := range userQuotas {
  90. userQuotaMap[item.UserId] = item
  91. }
  92. userQuotaExpTime = time.Now().Add(time.Second * 120).Unix()
  93. return nil
  94. }
  95. // 等级
  96. var sysLevelConfigMap map[int]*entity.SysLevelConfig
  97. func (s *CommonService) LevelConfigFromCache(level int) (*entity.SysLevelConfig, error) {
  98. if sysLevelConfigMap == nil {
  99. if err := s.RefreshLevelConfigMap(); err != nil {
  100. return nil, err
  101. }
  102. }
  103. if v, ok := sysLevelConfigMap[level]; ok {
  104. return v, nil
  105. }
  106. return nil, fmt.Errorf("level not found")
  107. }
  108. func (s *CommonService) LevelConfigMapFromCache() (map[int]*entity.SysLevelConfig, error) {
  109. if err := s.RefreshLevelConfigMap(); err != nil {
  110. return nil, err
  111. }
  112. return sysLevelConfigMap, nil
  113. }
  114. func (s *CommonService) RefreshLevelConfigMap() error {
  115. sysLevelConfigMap = make(map[int]*entity.SysLevelConfig)
  116. items, err := s.AllSysLevelConfig(s.DB().Where("1=1"))
  117. if err != nil {
  118. return err
  119. }
  120. for _, item := range items {
  121. sysLevelConfigMap[item.Level] = item
  122. }
  123. return nil
  124. }