redisloginutil.go 1.4 KB

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