redis.go 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. package redis
  2. import (
  3. "Medical_ERP/utils"
  4. "encoding/json"
  5. "errors"
  6. "github.com/beego/beego/v2/server/web"
  7. "github.com/go-redis/redis/v7"
  8. "log"
  9. "time"
  10. "github.com/beego/beego/v2/core/logs"
  11. )
  12. var redisCache *redis.Client
  13. // 创建 redis 客户端
  14. func createClient(redisHost string, password string, dataBase int) *redis.Client {
  15. log.Println("连接redis...")
  16. client := redis.NewClient(&redis.Options{
  17. Addr: redisHost,
  18. Password: password,
  19. DB: dataBase,
  20. ReadTimeout: 2 * time.Minute,
  21. WriteTimeout: 1 * time.Minute,
  22. PoolTimeout: 2 * time.Minute,
  23. IdleTimeout: 10 * time.Minute,
  24. PoolSize: 1000,
  25. })
  26. // 通过 cient.Ping() 来检查是否成功连接到了 redis 服务器
  27. _, err := client.Ping().Result()
  28. if err != nil {
  29. logs.Error("连接redis连接失败,", err)
  30. } else {
  31. log.Println("连接redis成完成...")
  32. }
  33. return client
  34. }
  35. func init() {
  36. Redis_address, _ := web.AppConfig.String("Redis_address")
  37. Redis_password, _ := web.AppConfig.String("Redis_password")
  38. Redis_dbNum, _ := web.AppConfig.Int("Redis_dbNum")
  39. redisCache = createClient(Redis_address, Redis_password, Redis_dbNum)
  40. }
  41. func SetJson(key string, data interface{}, timeout time.Duration) error {
  42. //json序列化
  43. str, err := json.Marshal(data)
  44. if err != nil {
  45. logs.Error(err)
  46. return err
  47. }
  48. err = redisCache.Set(key, str, timeout).Err()
  49. if err != nil {
  50. logs.Error(err)
  51. return err
  52. }
  53. return nil
  54. }
  55. func GetJson(key string, data interface{}) error {
  56. if existed, err := redisCache.Exists(key).Result(); err != nil || existed == 0 {
  57. return errors.New("redis nil")
  58. }
  59. v, err := redisCache.Get(key).Result()
  60. if err != nil {
  61. logs.Error(err)
  62. return err
  63. }
  64. err = json.Unmarshal([]byte(v), &data)
  65. if err != nil {
  66. logs.Error(err)
  67. return err
  68. }
  69. return nil
  70. }
  71. func SetStr(key, value string, time time.Duration) (err error) {
  72. err = redisCache.Set(key, value, time).Err()
  73. if err != nil {
  74. logs.Error("set key:", utils.ReplaceUserInput(key), ",value:", utils.ReplaceUserInput(value), err)
  75. }
  76. return
  77. }
  78. func GetStr(key string) (value string) {
  79. v, _ := redisCache.Get(key).Result()
  80. return v
  81. }
  82. func DelKey(key string) (err error) {
  83. err = redisCache.Del(key).Err()
  84. return
  85. }
  86. // SetNX 尝试获取锁
  87. func SetNX(key, value string, expiration time.Duration) (ok bool, err error) {
  88. ok, err = redisCache.SetNX(key, value, expiration).Result()
  89. return
  90. }
  91. // SetNX 释放锁
  92. func DelNX(key string) (err error) {
  93. err = redisCache.Del(key).Err()
  94. return
  95. }