123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181 |
- package service
- import (
- "fmt"
- "github.com/RaymondCode/simple-demo/config"
- "github.com/garyburd/redigo/redis"
- "strconv"
- "strings"
- "time"
- )
- var pool *redis.Pool
- /*func init(){
- pool=&redis.Pool{
- MaxIdle: 8,
- MaxActive: 0,
- IdleTimeout: 100,
- Dial: func() (redis.Conn, error) {
- return redis.Dial("tcp",
- "localhost:6379",
- redis.DialDatabase(int(0)))
- },
- }
- fmt.Println("redis连接池建立完成")
- }*/
- func InitRdsPool() {
- rdsPool := &redis.Pool{
- MaxIdle: 8,
- MaxActive: 0,
- IdleTimeout: 100,
- Dial: func() (redis.Conn, error) {
- return redis.Dial("tcp",
- fmt.Sprintf("%s:%d", config.CONFIG.RedisConfig.Host, config.CONFIG.RedisConfig.Port),
- redis.DialDatabase(int(0)))
- },
- }
- pool = rdsPool
- }
- func GenerateToken(user_id string) (string, error) {
- conn := pool.Get()
- defer conn.Close()
- nowtime := time.Now().Unix()
- TokenVal := user_id + ":" + strconv.FormatInt(nowtime, 10)
- _, err := conn.Do("Set", "Token:"+user_id, TokenVal)
- if err != nil {
- return "", err
- }
- return TokenVal, nil
- }
- func SetToken(user_id string) {
- conn := pool.Get()
- defer conn.Close()
- nowtime := time.Now().Unix()
- _, err := conn.Do("Set", "Token:"+user_id, user_id+"_"+strconv.FormatInt(nowtime, 10))
- if err != nil {
- return
- }
- /*
- _, err = conn.Do("Expire", "Token:"+user_id,100)
- if err!=nil{
- return
- }
- */
- }
- // 从redis获取token
- // 返回值含义:
- // 0.成功
- // 1.账号在其他地方登录(找到token但时间不对)
- // 2.请重新登录(token已经过期)
- func GetToken(token string) (int, error) {
- userid := strings.Split(string(token), ":")[0]
- conn := pool.Get()
- defer conn.Close()
- res, err := redis.String(conn.Do("Get", "Token:"+userid))
- if err != nil {
- fmt.Println("登录已经过期")
- fmt.Println(err)
- return 2, err
- }
- if res == "" {
- fmt.Println("登录已经过期")
- return 2, err
- }
- if res != token {
- return 1, err
- }
- return 0, err
- }
- func AddFavorite(videoId, userId, favoriteType string) {
- coon := pool.Get()
- defer coon.Close()
- if favoriteType == "1" {
- redis.String(coon.Do("HINCRBY", "userlikevideo", videoId+":"+userId, 1))
- redis.String(coon.Do("HINCRBY", "videofavorite", videoId, 1))
- redis.String(coon.Do("LPUSH", "FavoriteList:"+userId, videoId))
- } else {
- redis.String(coon.Do("HINCRY", "Favorite:"+videoId, -1))
- redis.String(coon.Do("HINCRBY", "userlikevideo", videoId+":"+userId, -1))
- }
- }
- func GetFavoriteVideoIdList(userid string) *[]string {
- coon := pool.Get()
- defer coon.Close()
- var res []string
- len, err := redis.Int(coon.Do("LLEN", "FavoriteList:"+userid))
- if err != nil {
- fmt.Println("bug")
- }
- for i := 0; i < len; i++ {
- vdId, _ := redis.String(coon.Do("LINDEX", "FavoriteList:"+userid, i))
- isActive, _ := redis.String(coon.Do("HGET", "userlikevideo", vdId+":"+userid))
- fmt.Println(vdId + " !" + isActive)
- if isActive == "1" {
- res = append(res, vdId)
- }
- }
- return &res
- }
- func AddNewFollowRelation(from_id, to_id, act_type string) {
- coon := pool.Get()
- defer coon.Close()
- if act_type == "1" {
- nowtime := time.Now().Unix()
- //用redis.bool会报错
- _, err := redis.Bool(coon.Do("ZADD", "FollowerList:"+from_id, nowtime, to_id))
- if err != nil {
- fmt.Println(err)
- }
- _, err = redis.Bool(coon.Do("ZADD", "FollowList:"+to_id, nowtime, from_id))
- if err != nil {
- fmt.Println(err)
- }
- } else {
- _, err := redis.Bool(coon.Do("ZREM", "FollowerList:"+from_id, to_id))
- if err != nil {
- fmt.Println(err)
- }
- _, err = redis.Bool(coon.Do("ZREM", "FollowList:"+to_id, from_id))
- if err != nil {
- fmt.Println(err)
- }
- }
- }
- func GetFollowList(id string) []int64 {
- coon := pool.Get()
- defer coon.Close()
- list, err := redis.Int64s(coon.Do("ZRANGE", "FollowList:"+id, 0, -1))
- if err != nil {
- fmt.Println(err)
- }
- return list
- }
- func GetFollowerList(id string) []int64 {
- coon := pool.Get()
- defer coon.Close()
- list, err := redis.Int64s(coon.Do("ZRANGE", "FollowerList:"+id, 0, -1))
- if err != nil {
- fmt.Println(err)
- }
- return list
- }
|