redisloginutil.go 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. package redis_util
  2. import (
  3. "log"
  4. "strings"
  5. "time"
  6. redisLogin "github.com/gomodule/redigo/redis"
  7. )
  8. // RedisLoginPool 用于登陆的Redis连接池
  9. var RedisLoginPool *redisLogin.Pool
  10. // InitRedisLogin 初始化用于登陆的Redis连接池
  11. func InitRedisLogin(addrs string) {
  12. addr := strings.Split(addrs, ",")
  13. for _, v := range addr {
  14. saddr := strings.Split(v, "=")
  15. if saddr[0] == "login" {
  16. RedisLoginPool = &redisLogin.Pool{MaxActive: 10, MaxIdle: 5,
  17. IdleTimeout: time.Duration(10) * time.Second, Dial: func() (redisLogin.Conn, error) {
  18. c, err := redisLogin.Dial("tcp", saddr[1])
  19. if err != nil {
  20. return nil, err
  21. }
  22. return c, nil
  23. }}
  24. }
  25. }
  26. }
  27. // SetLoginVal 设置K,V值 用于登陆的Redis
  28. func SetLoginVal(key, value string) {
  29. conn := RedisLoginPool.Get()
  30. defer conn.Close()
  31. conn.Do("PUBLISH", key, value)
  32. }
  33. // GetLoginVal 获取置Key,并透传到入参处理函数 用于登陆的Redis
  34. func GetLoginVal(key string, wxFunc func(wxParams []string) bool) {
  35. for {
  36. defer catch()
  37. L:
  38. for {
  39. conn := RedisLoginPool.Get()
  40. defer conn.Close()
  41. if conn.Err() == nil {
  42. psc := redisLogin.PubSubConn{Conn: conn}
  43. if err := psc.Subscribe(redisLogin.Args{}.AddFlat(key)...); err != nil {
  44. log.Println(err)
  45. }
  46. for {
  47. msg := psc.Receive()
  48. // go func(msg interface{}) {
  49. switch n := msg.(type) {
  50. case error:
  51. log.Println("wxlogin err", msg)
  52. break L
  53. case redisLogin.Message:
  54. res := string(n.Data)
  55. param := strings.Split(res, ",")
  56. go wxFunc(param)
  57. }
  58. // }(msg)
  59. }
  60. }
  61. time.Sleep(2 * time.Second)
  62. }
  63. time.Sleep(1 * time.Second)
  64. }
  65. }