redis.go 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. package config
  2. import (
  3. "fmt"
  4. "os"
  5. "strconv"
  6. "time"
  7. "github.com/go-redis/redis"
  8. "github.com/sirupsen/logrus"
  9. )
  10. const (
  11. TokenExpireTime = 3 * time.Hour
  12. )
  13. var (
  14. LogRedis *redis.Client
  15. TokenRedis *redis.Client
  16. GameRedis *redis.Client
  17. RedisGroup map[int]*redis.Client
  18. )
  19. func InitRedis() {
  20. LogRedis = newRedis(os.Getenv("LOG_REDIS_ADDR"), os.Getenv("LOG_REDIS_PW"), os.Getenv("LOG_REDIS_DB"))
  21. TokenRedis = newRedis(os.Getenv("TOKEN_REDIS_ADDR"), os.Getenv("TOKEN_REDIS_PW"), os.Getenv("TOKEN_REDIS_DB"))
  22. RedisGroup = make(map[int]*redis.Client)
  23. GameRedis = newRedis(os.Getenv("REDIS_ADDR"), os.Getenv("REDIS_PW"), os.Getenv("REDIS_DB"))
  24. RedisGroup[1] = GameRedis
  25. failNum := 0
  26. for i := 2; i < 10000; i += 1 {
  27. addrKey := fmt.Sprintf("REDIS%v_ADDR", i)
  28. pwKey := fmt.Sprintf("REDIS%v_PW", i)
  29. dbKey := fmt.Sprintf("REDIS%v_DB", i)
  30. addr := os.Getenv(addrKey)
  31. if addr == "" {
  32. failNum += 1
  33. if failNum > 3 {
  34. return
  35. }
  36. continue
  37. }
  38. logrus.Printf("InitRedis %v", addrKey)
  39. RedisGroup[i] = newRedis(os.Getenv(addrKey), os.Getenv(pwKey), os.Getenv(dbKey))
  40. }
  41. }
  42. func newRedis(addr, password, db string) (client *redis.Client) {
  43. db2, _ := strconv.ParseUint(db, 10, 64)
  44. client = redis.NewClient(&redis.Options{
  45. Addr: addr,
  46. Password: password,
  47. DB: int(db2),
  48. MaxRetries: 1,
  49. })
  50. if _, err := client.Ping().Result(); err != nil {
  51. logrus.Panicf("连接Redis[%v]不成功, err:%+v", addr, err)
  52. }
  53. return
  54. }
  55. // PubMessage 发布
  56. func PubMessage(channel, msg string) {
  57. LogRedis.Publish(channel, msg)
  58. }
  59. // SubMessage 订阅
  60. func SubMessage(channel string, call func(msg *redis.Message)) {
  61. sub := LogRedis.Subscribe(channel)
  62. _, err := sub.Receive()
  63. if err != nil {
  64. panic(err)
  65. }
  66. for msg := range sub.Channel() {
  67. call(msg)
  68. }
  69. }
  70. func GetUserTokenKey(uid int64) string {
  71. return fmt.Sprintf("token:%v", uid)
  72. }
  73. func GetTokenKey(t string) string {
  74. return fmt.Sprintf("token:%v", t)
  75. }