redisService.go 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. package service
  2. import (
  3. "fmt"
  4. "github.com/RaymondCode/simple-demo/config"
  5. "github.com/garyburd/redigo/redis"
  6. "strconv"
  7. "strings"
  8. "time"
  9. )
  10. var pool *redis.Pool
  11. /*func init(){
  12. pool=&redis.Pool{
  13. MaxIdle: 8,
  14. MaxActive: 0,
  15. IdleTimeout: 100,
  16. Dial: func() (redis.Conn, error) {
  17. return redis.Dial("tcp",
  18. "localhost:6379",
  19. redis.DialDatabase(int(0)))
  20. },
  21. }
  22. fmt.Println("redis连接池建立完成")
  23. }*/
  24. func InitRdsPool() {
  25. rdsPool := &redis.Pool{
  26. MaxIdle: 8,
  27. MaxActive: 0,
  28. IdleTimeout: 100,
  29. Dial: func() (redis.Conn, error) {
  30. return redis.Dial("tcp",
  31. fmt.Sprintf("%s:%d", config.CONFIG.RedisConfig.Host, config.CONFIG.RedisConfig.Port),
  32. redis.DialDatabase(int(0)))
  33. },
  34. }
  35. pool = rdsPool
  36. }
  37. func GenerateToken(user_id string) (string, error) {
  38. conn := pool.Get()
  39. defer conn.Close()
  40. nowtime := time.Now().Unix()
  41. TokenVal := user_id + ":" + strconv.FormatInt(nowtime, 10)
  42. _, err := conn.Do("Set", "Token:"+user_id, TokenVal)
  43. if err != nil {
  44. return "", err
  45. }
  46. return TokenVal, nil
  47. }
  48. func SetToken(user_id string) {
  49. conn := pool.Get()
  50. defer conn.Close()
  51. nowtime := time.Now().Unix()
  52. _, err := conn.Do("Set", "Token:"+user_id, user_id+"_"+strconv.FormatInt(nowtime, 10))
  53. if err != nil {
  54. return
  55. }
  56. /*
  57. _, err = conn.Do("Expire", "Token:"+user_id,100)
  58. if err!=nil{
  59. return
  60. }
  61. */
  62. }
  63. // 从redis获取token
  64. // 返回值含义:
  65. // 0.成功
  66. // 1.账号在其他地方登录(找到token但时间不对)
  67. // 2.请重新登录(token已经过期)
  68. func GetToken(token string) (int, error) {
  69. userid := strings.Split(string(token), ":")[0]
  70. conn := pool.Get()
  71. defer conn.Close()
  72. res, err := redis.String(conn.Do("Get", "Token:"+userid))
  73. if err != nil {
  74. fmt.Println("登录已经过期")
  75. fmt.Println(err)
  76. return 2, err
  77. }
  78. if res == "" {
  79. fmt.Println("登录已经过期")
  80. return 2, err
  81. }
  82. if res != token {
  83. return 1, err
  84. }
  85. return 0, err
  86. }
  87. func AddFavorite(videoId, userId, favoriteType string) {
  88. coon := pool.Get()
  89. defer coon.Close()
  90. if favoriteType == "1" {
  91. redis.String(coon.Do("HINCRBY", "userlikevideo", videoId+":"+userId, 1))
  92. redis.String(coon.Do("HINCRBY", "videofavorite", videoId, 1))
  93. redis.String(coon.Do("LPUSH", "FavoriteList:"+userId, videoId))
  94. } else {
  95. redis.String(coon.Do("HINCRY", "Favorite:"+videoId, -1))
  96. redis.String(coon.Do("HINCRBY", "userlikevideo", videoId+":"+userId, -1))
  97. }
  98. }
  99. func GetFavoriteVideoIdList(userid string) *[]string {
  100. coon := pool.Get()
  101. defer coon.Close()
  102. var res []string
  103. len, err := redis.Int(coon.Do("LLEN", "FavoriteList:"+userid))
  104. if err != nil {
  105. fmt.Println("bug")
  106. }
  107. for i := 0; i < len; i++ {
  108. vdId, _ := redis.String(coon.Do("LINDEX", "FavoriteList:"+userid, i))
  109. isActive, _ := redis.String(coon.Do("HGET", "userlikevideo", vdId+":"+userid))
  110. fmt.Println(vdId + " !" + isActive)
  111. if isActive == "1" {
  112. res = append(res, vdId)
  113. }
  114. }
  115. return &res
  116. }
  117. func AddNewFollowRelation(from_id, to_id, act_type string) {
  118. coon := pool.Get()
  119. defer coon.Close()
  120. if act_type == "1" {
  121. nowtime := time.Now().Unix()
  122. //用redis.bool会报错
  123. _, err := redis.Bool(coon.Do("ZADD", "FollowerList:"+from_id, nowtime, to_id))
  124. if err != nil {
  125. fmt.Println(err)
  126. }
  127. _, err = redis.Bool(coon.Do("ZADD", "FollowList:"+to_id, nowtime, from_id))
  128. if err != nil {
  129. fmt.Println(err)
  130. }
  131. } else {
  132. _, err := redis.Bool(coon.Do("ZREM", "FollowerList:"+from_id, to_id))
  133. if err != nil {
  134. fmt.Println(err)
  135. }
  136. _, err = redis.Bool(coon.Do("ZREM", "FollowList:"+to_id, from_id))
  137. if err != nil {
  138. fmt.Println(err)
  139. }
  140. }
  141. }
  142. func GetFollowList(id string) []int64 {
  143. coon := pool.Get()
  144. defer coon.Close()
  145. list, err := redis.Int64s(coon.Do("ZRANGE", "FollowList:"+id, 0, -1))
  146. if err != nil {
  147. fmt.Println(err)
  148. }
  149. return list
  150. }
  151. func GetFollowerList(id string) []int64 {
  152. coon := pool.Get()
  153. defer coon.Close()
  154. list, err := redis.Int64s(coon.Do("ZRANGE", "FollowerList:"+id, 0, -1))
  155. if err != nil {
  156. fmt.Println(err)
  157. }
  158. return list
  159. }