package device import ( "gim/pkg/db" "gim/pkg/gerrors" "strconv" "time" "github.com/go-redis/redis" ) const ( UserDeviceKey = "user_device:" UserDeviceExpire = 2 * time.Hour ) type userDeviceCache struct{} var UserDeviceCache = new(userDeviceCache) // Get 获取指定用户的所有在线设备 func (c *userDeviceCache) Get(userId int64) ([]Device, error) { var devices []Device err := db.RedisUtil.Get(UserDeviceKey+strconv.FormatInt(userId, 10), &devices) if err != nil && err != redis.Nil { return nil, gerrors.WrapError(err) } if err == redis.Nil { return nil, nil } return devices, nil } // Set 将指定用户的所有在线设备存入缓存 func (c *userDeviceCache) Set(userId int64, devices []Device) error { err := db.RedisUtil.Set(UserDeviceKey+strconv.FormatInt(userId, 10), devices, UserDeviceExpire) return gerrors.WrapError(err) } // Del 删除用户的在线设备列表 func (c *userDeviceCache) Del(userId int64) error { key := UserDeviceKey + strconv.FormatInt(userId, 10) _, err := db.RedisCli.Del(key).Result() return gerrors.WrapError(err) }