redis.go 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352
  1. package redis
  2. import (
  3. "context"
  4. "encoding/json"
  5. "errors"
  6. "fmt"
  7. "github.com/go-redis/redis/v8"
  8. "log"
  9. "strings"
  10. "sync"
  11. "time"
  12. apiViewModel "xps/pkg/api/viewmodel"
  13. bizViewModel "xps/pkg/biz/viewmodel"
  14. modelViewModel "xps/pkg/model/viewmodel"
  15. sysViewModel "xps/pkg/system/viewmodel"
  16. )
  17. var ErrRedisInit = errors.New("缓存初始化失败")
  18. var (
  19. once sync.Once
  20. cacheClient redis.UniversalClient
  21. )
  22. var CONFIG = Redis{
  23. DB: 0,
  24. Addr: "127.0.0.1:6379",
  25. Password: "",
  26. PoolSize: 0,
  27. }
  28. type Redis struct {
  29. DB int `mapstructure:"db" json:"db" yaml:"db"`
  30. Addr string `mapstructure:"addr" json:"addr" yaml:"addr"`
  31. Password string `mapstructure:"password" json:"password" yaml:"password"`
  32. PoolSize int `mapstructure:"pool-size" json:"pool-size" yaml:"pool-size"`
  33. }
  34. func init() {
  35. if Instance() == nil {
  36. log.Fatal(ErrRedisInit)
  37. }
  38. }
  39. func Instance() redis.UniversalClient {
  40. once.Do(func() {
  41. universalOptions := &redis.UniversalOptions{
  42. Addrs: strings.Split(CONFIG.Addr, ","),
  43. Password: CONFIG.Password,
  44. PoolSize: int(CONFIG.PoolSize),
  45. IdleTimeout: 300 * time.Second,
  46. }
  47. cacheClient = redis.NewUniversalClient(universalOptions)
  48. })
  49. return cacheClient
  50. }
  51. func SetCache(key string, value interface{}, expiration time.Duration) error {
  52. err := Instance().Set(context.Background(), key, value, expiration).Err()
  53. if err != nil {
  54. return err
  55. }
  56. return nil
  57. }
  58. func GetCache(key string) (interface{}, error) {
  59. return Instance().Get(context.Background(), key).Result()
  60. }
  61. func DeleteCache(key string) (int64, error) {
  62. return Instance().Del(context.Background(), key).Result()
  63. }
  64. func GetCacheString(key string) (string, error) {
  65. value, err := GetCacheBytes(key)
  66. if err != nil {
  67. return "", err
  68. }
  69. return string(value), nil
  70. }
  71. func GetCacheBytes(key string) ([]byte, error) {
  72. return Instance().Get(context.Background(), key).Bytes()
  73. }
  74. func GetCacheUint(key string) (uint64, error) {
  75. return Instance().Get(context.Background(), key).Uint64()
  76. }
  77. func SetUserData(userId int64, userData *sysViewModel.UserData) error {
  78. keyStr := fmt.Sprintf("user_%d", userId)
  79. return SetCache(keyStr, userData, 0)
  80. }
  81. func GetUserData(userId int64) (*sysViewModel.UserData, error) {
  82. keyStr := fmt.Sprintf("user_%d", userId)
  83. userData := &sysViewModel.UserData{}
  84. err := Instance().Get(context.Background(), keyStr).Scan(userData)
  85. if err != nil {
  86. return nil, err
  87. }
  88. return userData, nil
  89. }
  90. func DeleteUserData(userId int64) (int64, error) {
  91. keyStr := fmt.Sprintf("user_%d", userId)
  92. return Instance().Del(context.Background(), keyStr).Result()
  93. }
  94. func SetModelObject(objectCode string, data *modelViewModel.ModelObjectInfo) error {
  95. keyStr := fmt.Sprintf("model_object_%s", objectCode)
  96. return SetCache(keyStr, data, 0)
  97. }
  98. func GetModelObject(objectCode string) (*modelViewModel.ModelObjectInfo, error) {
  99. keyStr := fmt.Sprintf("model_object_%s", objectCode)
  100. modelObjectInfo := &modelViewModel.ModelObjectInfo{}
  101. err := Instance().Get(context.Background(), keyStr).Scan(modelObjectInfo)
  102. if err != nil {
  103. return nil, err
  104. }
  105. return modelObjectInfo, nil
  106. }
  107. func SetModelObjectAttrs(objectCode string, data []modelViewModel.ModelObjectAttrInfo) error {
  108. keyStr := fmt.Sprintf("model_object_attr_%s", objectCode)
  109. dataList, _ := json.Marshal(data)
  110. err := Instance().Set(context.Background(), keyStr, dataList, 0).Err()
  111. if err != nil {
  112. return err
  113. }
  114. return nil
  115. }
  116. func GetModelObjectAttrs(objectCode string) ([]modelViewModel.ModelObjectAttrInfo, error) {
  117. keyStr := fmt.Sprintf("model_object_attr_%s", objectCode)
  118. bytes, err := Instance().Get(context.Background(), keyStr).Bytes()
  119. if err != nil {
  120. return nil, err
  121. }
  122. modelObjectAttrInfo := make([]modelViewModel.ModelObjectAttrInfo, 0)
  123. err = json.Unmarshal(bytes, &modelObjectAttrInfo)
  124. if err != nil {
  125. return nil, err
  126. }
  127. return modelObjectAttrInfo, nil
  128. }
  129. // SetModelObjectOAM : Model Object OAM
  130. func SetModelObjectOAM(objectCode, oamCode string, data *modelViewModel.ModelObjectOAMInfo) error {
  131. keyStr := fmt.Sprintf("model_object_oam_%s_%s", objectCode, oamCode)
  132. return SetCache(keyStr, data, 0)
  133. }
  134. // GetModelObjectOAM : Model Object OAM
  135. func GetModelObjectOAM(objectCode, oamCode string) (*modelViewModel.ModelObjectOAMInfo, error) {
  136. keyStr := fmt.Sprintf("model_object_oam_%s_%s", objectCode, oamCode)
  137. oamData := &modelViewModel.ModelObjectOAMInfo{}
  138. err := Instance().Get(context.Background(), keyStr).Scan(oamData)
  139. if err != nil {
  140. return nil, err
  141. }
  142. return oamData, nil
  143. }
  144. // SetBizObject : Biz Object
  145. func SetBizObject(objectCode string, data *bizViewModel.BizObjectInfo) error {
  146. keyStr := fmt.Sprintf("biz_object_%s", objectCode)
  147. return SetCache(keyStr, data, 0)
  148. }
  149. // GetBizObject : Biz Object
  150. func GetBizObject(objectCode string) (*bizViewModel.BizObjectInfo, error) {
  151. keyStr := fmt.Sprintf("biz_object_%s", objectCode)
  152. bizObjectInfo := &bizViewModel.BizObjectInfo{}
  153. err := Instance().Get(context.Background(), keyStr).Scan(bizObjectInfo)
  154. if err != nil {
  155. return nil, err
  156. }
  157. return bizObjectInfo, nil
  158. }
  159. // SetBizObjectAttrs : Biz Object Attrs
  160. func SetBizObjectAttrs(objectCode string, data []bizViewModel.BizObjectAttrInfo) error {
  161. keyStr := fmt.Sprintf("biz_object_attrs_%s", objectCode)
  162. dataList, _ := json.Marshal(data)
  163. err := Instance().Set(context.Background(), keyStr, dataList, 0).Err()
  164. if err != nil {
  165. return err
  166. }
  167. return nil
  168. }
  169. // GetBizObjectAttrs : Biz Object Attrs
  170. func GetBizObjectAttrs(objectCode string) ([]bizViewModel.BizObjectAttrInfo, error) {
  171. keyStr := fmt.Sprintf("biz_object_attrs_%s", objectCode)
  172. bytes, err := Instance().Get(context.Background(), keyStr).Bytes()
  173. if err != nil {
  174. return nil, err
  175. }
  176. bizObjectAttrs := make([]bizViewModel.BizObjectAttrInfo, 0)
  177. err2 := json.Unmarshal(bytes, &bizObjectAttrs)
  178. if err2 != nil {
  179. return nil, err2
  180. }
  181. return bizObjectAttrs, nil
  182. }
  183. // SetBizObjectOAM : Biz Object OAM
  184. func SetBizObjectOAM(objectCode, oamCode string, data *bizViewModel.BizObjectOAMInfo) error {
  185. keyStr := fmt.Sprintf("biz_object_oam_%s_%s", objectCode, oamCode)
  186. return SetCache(keyStr, data, 0)
  187. }
  188. // GetBizObjectOAM : Biz Object OAM
  189. func GetBizObjectOAM(objectCode, oamCode string) (*bizViewModel.BizObjectOAMInfo, error) {
  190. keyStr := fmt.Sprintf("biz_object_oam_%s_%s", objectCode, oamCode)
  191. oamData := &bizViewModel.BizObjectOAMInfo{}
  192. err := Instance().Get(context.Background(), keyStr).Scan(oamData)
  193. if err != nil {
  194. return nil, err
  195. }
  196. return oamData, nil
  197. }
  198. // SetBizObjectOAMRules : Biz Object OAM Rules
  199. func SetBizObjectOAMRules(objectCode, oamCode string, data []bizViewModel.BizObjectOAMRuleInfo) error {
  200. keyStr := fmt.Sprintf("biz_object_oam_rules_%s_%s", objectCode, oamCode)
  201. dataList, _ := json.Marshal(data)
  202. err := Instance().Set(context.Background(), keyStr, dataList, 0).Err()
  203. if err != nil {
  204. return err
  205. }
  206. return nil
  207. }
  208. // GetBizObjectOAMRules : Biz Object OAM Rules
  209. func GetBizObjectOAMRules(objectCode, oamCode string) ([]bizViewModel.BizObjectOAMRuleInfo, error) {
  210. keyStr := fmt.Sprintf("biz_object_oam_rules_%s_%s", objectCode, oamCode)
  211. bytes, err1 := Instance().Get(context.Background(), keyStr).Bytes()
  212. if err1 != nil {
  213. return nil, err1
  214. }
  215. dataList := make([]bizViewModel.BizObjectOAMRuleInfo, 0)
  216. err2 := json.Unmarshal(bytes, &dataList)
  217. if err2 != nil {
  218. return nil, err2
  219. }
  220. return dataList, nil
  221. }
  222. // SetBizObjectOAMParams : Biz Object OAM Params
  223. func SetBizObjectOAMParams(objectCode, oamCode string, data []bizViewModel.BizObjectOAMParamsInfo) error {
  224. keyStr := fmt.Sprintf("biz_object_oam_params_%s_%s", objectCode, oamCode)
  225. dataList, _ := json.Marshal(data)
  226. err := Instance().Set(context.Background(), keyStr, dataList, 0).Err()
  227. if err != nil {
  228. return err
  229. }
  230. return nil
  231. }
  232. // GetBizObjectOAMParams : Biz Object OAM Params
  233. func GetBizObjectOAMParams(objectCode, oamCode string) ([]bizViewModel.BizObjectOAMParamsInfo, error) {
  234. keyStr := fmt.Sprintf("biz_object_oam_params_%s_%s", objectCode, oamCode)
  235. bytes, err1 := Instance().Get(context.Background(), keyStr).Bytes()
  236. if err1 != nil {
  237. return nil, err1
  238. }
  239. dataList := make([]bizViewModel.BizObjectOAMParamsInfo, 0)
  240. err2 := json.Unmarshal(bytes, &dataList)
  241. if err2 != nil {
  242. return nil, err2
  243. }
  244. return dataList, nil
  245. }
  246. // SetBizObjectOAMMapping : Biz Object OAM Mapping
  247. func SetBizObjectOAMMapping(objectCode, oamCode string, data []bizViewModel.BizObjectOAMMappingInfo) error {
  248. keyStr := fmt.Sprintf("biz_object_oam_mapping_%s_%s", objectCode, oamCode)
  249. dataList, _ := json.Marshal(data)
  250. err := Instance().Set(context.Background(), keyStr, dataList, 0).Err()
  251. if err != nil {
  252. return err
  253. }
  254. return nil
  255. }
  256. // GetBizObjectOAMMapping : Biz Object OAM Mapping
  257. func GetBizObjectOAMMapping(objectCode, oamCode string) ([]bizViewModel.BizObjectOAMMappingInfo, error) {
  258. keyStr := fmt.Sprintf("biz_object_oam_mapping_%s_%s", objectCode, oamCode)
  259. bytes, err1 := Instance().Get(context.Background(), keyStr).Bytes()
  260. if err1 != nil {
  261. return nil, err1
  262. }
  263. dataList := make([]bizViewModel.BizObjectOAMMappingInfo, 0)
  264. err2 := json.Unmarshal(bytes, &dataList)
  265. if err2 != nil {
  266. return nil, err2
  267. }
  268. return dataList, nil
  269. }
  270. // SetBizObjectMapping : Biz Object Mapping
  271. func SetBizObjectMapping(objectCode string, data []bizViewModel.BizObjectMappingInfo) error {
  272. keyStr := fmt.Sprintf("biz_object_mapping_%s", objectCode)
  273. dataList, _ := json.Marshal(data)
  274. err := Instance().Set(context.Background(), keyStr, dataList, 0).Err()
  275. if err != nil {
  276. return err
  277. }
  278. return nil
  279. }
  280. // GetBizObjectMapping : Biz Object Mapping
  281. func GetBizObjectMapping(objectCode string) ([]bizViewModel.BizObjectMappingInfo, error) {
  282. keyStr := fmt.Sprintf("biz_object_mapping_%s", objectCode)
  283. bytes, err1 := Instance().Get(context.Background(), keyStr).Bytes()
  284. if err1 != nil {
  285. return nil, err1
  286. }
  287. dataList := make([]bizViewModel.BizObjectMappingInfo, 0)
  288. err2 := json.Unmarshal(bytes, &dataList)
  289. if err2 != nil {
  290. return nil, err2
  291. }
  292. return dataList, nil
  293. }
  294. func SetApiData(objectCode, oamCode string, data *apiViewModel.ApiInfo) error {
  295. keyStr := fmt.Sprintf("api_%s_%s", objectCode, oamCode)
  296. return SetCache(keyStr, data, 0)
  297. }
  298. func GetApiData(objectCode, oamCode string) (*apiViewModel.ApiInfo, error) {
  299. keyStr := fmt.Sprintf("api_%s_%s", objectCode, oamCode)
  300. apiData := &apiViewModel.ApiInfo{}
  301. err := Instance().Get(context.Background(), keyStr).Scan(apiData)
  302. if err != nil {
  303. return nil, err
  304. }
  305. return apiData, nil
  306. }