token_cache.go 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. package token
  2. import (
  3. "context"
  4. "dashoo.cn/micro_libary/micro"
  5. "github.com/gogf/gf/v2/encoding/gjson"
  6. "github.com/gogf/gf/v2/frame/g"
  7. "github.com/gogf/gf/v2/os/gcache"
  8. "github.com/gogf/gf/v2/os/gfile"
  9. "github.com/gogf/gf/v2/util/gconv"
  10. "time"
  11. )
  12. // setCache 设置缓存
  13. func (m *RpcxToken) setCache(ctx context.Context, cacheKey string, userCache g.Map) *micro.Response {
  14. switch m.CacheMode {
  15. case CacheModeCache, CacheModeFile:
  16. gcache.Set(ctx, cacheKey, userCache, gconv.Duration(m.Timeout)*time.Millisecond)
  17. if m.CacheMode == CacheModeFile {
  18. m.writeFileCache(ctx)
  19. }
  20. case CacheModeRedis:
  21. cacheValueJson, err1 := gjson.Encode(userCache)
  22. if err1 != nil {
  23. g.Log().Error(ctx, "[GToken]cache json encode error", err1)
  24. return micro.Error("cache json encode error")
  25. }
  26. _, err := g.Redis().Do(ctx, "SETEX", cacheKey, m.Timeout/1000, cacheValueJson)
  27. if err != nil {
  28. g.Log().Error(ctx, "[GToken]cache set error", err)
  29. return micro.Error("cache set error")
  30. }
  31. default:
  32. return micro.Error("cache model error")
  33. }
  34. return micro.Success(userCache)
  35. }
  36. // getCache 获取缓存
  37. func (m *RpcxToken) getCache(ctx context.Context, cacheKey string) *micro.Response {
  38. var userCache g.Map
  39. switch m.CacheMode {
  40. case CacheModeCache, CacheModeFile:
  41. userCacheValue, err := gcache.Get(ctx, cacheKey)
  42. if err != nil {
  43. g.Log().Error(ctx, "[GToken]cache get error", err)
  44. return micro.Error("cache get error")
  45. }
  46. if userCacheValue.IsNil() {
  47. return micro.Unauthorized("login timeout or not login", "")
  48. }
  49. userCache = gconv.Map(userCacheValue)
  50. case CacheModeRedis:
  51. userCacheJson, err := g.Redis().Do(ctx, "GET", cacheKey)
  52. if err != nil {
  53. g.Log().Error(ctx, "[GToken]cache get error", err)
  54. return micro.Error("cache get error")
  55. }
  56. if userCacheJson.IsNil() {
  57. return micro.Unauthorized("login timeout or not login", "")
  58. }
  59. err = gjson.DecodeTo(userCacheJson, &userCache)
  60. if err != nil {
  61. g.Log().Error(ctx, "[GToken]cache get json error", err)
  62. return micro.Error("cache get json error")
  63. }
  64. default:
  65. return micro.Error("cache model error")
  66. }
  67. return micro.Success(userCache)
  68. }
  69. // removeCache 删除缓存
  70. func (m *RpcxToken) removeCache(ctx context.Context, cacheKey string) *micro.Response {
  71. switch m.CacheMode {
  72. case CacheModeCache, CacheModeFile:
  73. _, err := gcache.Remove(ctx, cacheKey)
  74. if err != nil {
  75. g.Log().Error(ctx, err)
  76. }
  77. if m.CacheMode == CacheModeFile {
  78. m.writeFileCache(ctx)
  79. }
  80. case CacheModeRedis:
  81. var err error
  82. _, err = g.Redis().Do(ctx, "DEL", cacheKey)
  83. if err != nil {
  84. g.Log().Error(ctx, "[GToken]cache remove error", err)
  85. return micro.Error("cache remove error")
  86. }
  87. default:
  88. return micro.Error("cache model error")
  89. }
  90. return micro.Success("")
  91. }
  92. func (m *RpcxToken) writeFileCache(ctx context.Context) {
  93. file := gfile.Temp(CacheModeFileDat)
  94. data, e := gcache.Data(ctx)
  95. if e != nil {
  96. g.Log().Error(ctx, "[GToken]cache writeFileCache error", e)
  97. }
  98. gfile.PutContents(file, gjson.New(data).MustToJsonString())
  99. }
  100. func (m *RpcxToken) initFileCache(ctx context.Context) {
  101. file := gfile.Temp(CacheModeFileDat)
  102. if !gfile.Exists(file) {
  103. return
  104. }
  105. data := gfile.GetContents(file)
  106. maps := gconv.Map(data)
  107. if maps == nil || len(maps) <= 0 {
  108. return
  109. }
  110. for k, v := range maps {
  111. gcache.Set(ctx, k, v, gconv.Duration(m.Timeout)*time.Millisecond)
  112. }
  113. }