cache.go 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. package module
  2. import (
  3. "github.com/goburrow/cache"
  4. "github.com/mhaya/game/game_cluster/internal/mdb/models"
  5. "sync"
  6. "time"
  7. )
  8. var (
  9. // PlayerCache缓存 key:uidKey, value:uid
  10. PlayerCache = cache.New(
  11. cache.WithMaximumSize(1000000),
  12. cache.WithExpireAfterAccess(10*time.Minute),
  13. )
  14. // 帐号缓存 key:accountName, value:AccountCache
  15. AccountCache = cache.New(
  16. cache.WithMaximumSize(1000000),
  17. cache.WithExpireAfterAccess(10*time.Minute),
  18. )
  19. mapCache = cache.New(
  20. cache.WithMaximumSize(10),
  21. cache.WithExpireAfterAccess(24*time.Hour),
  22. )
  23. )
  24. const (
  25. UserKeys = "user_keys"
  26. AccountKeys = "account_keys"
  27. )
  28. var (
  29. lock = &sync.RWMutex{}
  30. playerIdMap = map[string]*models.Player{}
  31. accountIdMap = map[string]*models.Account{}
  32. )
  33. func BindPlayerId(player *models.Player) {
  34. if player == nil {
  35. return
  36. }
  37. lock.Lock()
  38. defer lock.Unlock()
  39. if a, ok := accountIdMap[player.OpenId]; ok {
  40. if a.IsNew {
  41. player.IsNew = true
  42. }
  43. }
  44. playerIdMap[player.OpenId] = player
  45. }
  46. func UnBindPlayerId(playerId string) {
  47. if playerId == "" {
  48. return
  49. }
  50. lock.Lock()
  51. defer lock.Unlock()
  52. delete(playerIdMap, playerId)
  53. }
  54. func BindAccountId(account *models.Account) {
  55. if account == nil {
  56. return
  57. }
  58. lock.Lock()
  59. defer lock.Unlock()
  60. if a, ok := accountIdMap[account.OpenId]; ok {
  61. if a.IsNew {
  62. account.IsNew = true
  63. }
  64. }
  65. accountIdMap[account.OpenId] = account
  66. }
  67. func UnBindAccountId(accountId string) {
  68. if accountId == "" {
  69. return
  70. }
  71. lock.Lock()
  72. defer lock.Unlock()
  73. delete(accountIdMap, accountId)
  74. }