You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
119 lines
2.2 KiB
119 lines
2.2 KiB
/**
|
|
* Created by GoLand.
|
|
* User: link1st
|
|
* Date: 2019-08-03
|
|
* Time: 15:23
|
|
*/
|
|
|
|
package cache
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"gowebsocket/lib/redislib"
|
|
"gowebsocket/models"
|
|
"strconv"
|
|
)
|
|
|
|
const (
|
|
serversHashKey = "acc:hash:servers" // 全部的服务器
|
|
serversHashCacheTime = 2 * 60 * 60 // key过期时间
|
|
serversHashTimeout = 3 * 60 // 超时时间
|
|
)
|
|
|
|
func getServersHashKey() (key string) {
|
|
key = fmt.Sprintf("%s", serversHashKey)
|
|
|
|
return
|
|
}
|
|
|
|
// 设置服务器信息
|
|
func SetServerInfo(server *models.Server, currentTime uint64) (err error) {
|
|
key := getServersHashKey()
|
|
|
|
value := fmt.Sprintf("%d", currentTime)
|
|
|
|
redisClient := redislib.GetClient()
|
|
number, err := redisClient.Do("hSet", key, server.String(), value).Int()
|
|
if err != nil {
|
|
fmt.Println("SetServerInfo", key, number, err)
|
|
|
|
return
|
|
}
|
|
|
|
if number != 1 {
|
|
|
|
return
|
|
}
|
|
|
|
redisClient.Do("Expire", key, serversHashCacheTime)
|
|
|
|
return
|
|
}
|
|
|
|
// 下线服务器信息
|
|
func DelServerInfo(server *models.Server) (err error) {
|
|
key := getServersHashKey()
|
|
redisClient := redislib.GetClient()
|
|
number, err := redisClient.Do("hDel", key, server.String()).Int()
|
|
if err != nil {
|
|
fmt.Println("DelServerInfo", key, number, err)
|
|
|
|
return
|
|
}
|
|
|
|
if number != 1 {
|
|
|
|
return
|
|
}
|
|
|
|
redisClient.Do("Expire", key, serversHashCacheTime)
|
|
|
|
return
|
|
}
|
|
|
|
func GetServerAll(currentTime uint64) (servers []*models.Server, err error) {
|
|
|
|
servers = make([]*models.Server, 0)
|
|
key := getServersHashKey()
|
|
|
|
redisClient := redislib.GetClient()
|
|
|
|
val, err := redisClient.Do("hGetAll", key).Result()
|
|
|
|
valByte, _ := json.Marshal(val)
|
|
fmt.Println("GetServerAll", key, string(valByte))
|
|
|
|
serverMap, err := redisClient.HGetAll(key).Result()
|
|
if err != nil {
|
|
fmt.Println("SetServerInfo", key, err)
|
|
|
|
return
|
|
}
|
|
|
|
for key, value := range serverMap {
|
|
valueUint64, err := strconv.ParseUint(value, 10, 64)
|
|
if err != nil {
|
|
fmt.Println("GetServerAll", key, err)
|
|
|
|
return nil, err
|
|
}
|
|
|
|
// 超时
|
|
if valueUint64+serversHashTimeout <= currentTime {
|
|
continue
|
|
}
|
|
|
|
server, err := models.StringToServer(key)
|
|
if err != nil {
|
|
fmt.Println("GetServerAll", key, err)
|
|
|
|
return nil, err
|
|
}
|
|
|
|
servers = append(servers, server)
|
|
}
|
|
|
|
return
|
|
}
|