2024-05-18 17:12:24 +08:00
|
|
|
|
package worker
|
|
|
|
|
|
|
|
|
|
|
|
import (
|
2024-05-18 18:16:34 +08:00
|
|
|
|
"fmt"
|
2024-05-31 15:18:24 +08:00
|
|
|
|
"strconv"
|
2024-05-18 17:12:24 +08:00
|
|
|
|
"time"
|
2024-06-25 09:38:21 +08:00
|
|
|
|
"videoplayer/proto"
|
2024-05-18 17:12:24 +08:00
|
|
|
|
)
|
|
|
|
|
|
import (
|
|
|
|
|
|
"context"
|
|
|
|
|
|
"encoding/json"
|
|
|
|
|
|
"github.com/go-redis/redis/v8"
|
|
|
|
|
|
)
|
|
|
|
|
|
|
2024-10-28 17:17:23 +08:00
|
|
|
|
var RedisClient *redis.Client // Redis 客户端, 用于连接 Redis 服务器
|
2024-08-02 10:30:41 +08:00
|
|
|
|
func InitRedis() error {
|
2024-05-18 17:12:24 +08:00
|
|
|
|
ctx := context.Background()
|
2024-09-22 13:59:33 +08:00
|
|
|
|
|
|
|
|
|
|
if proto.Config.REDIS_User_PW == false {
|
|
|
|
|
|
// 连接redis
|
2024-10-28 17:17:23 +08:00
|
|
|
|
RedisClient = redis.NewClient(&redis.Options{
|
2024-09-22 13:59:33 +08:00
|
|
|
|
Addr: proto.Config.REDIS_ADDR, // Redis 服务器地址
|
|
|
|
|
|
DB: proto.Config.REDIS_DB, // 使用的数据库编号
|
|
|
|
|
|
})
|
|
|
|
|
|
} else {
|
|
|
|
|
|
// 连接redis
|
2024-10-28 17:17:23 +08:00
|
|
|
|
RedisClient = redis.NewClient(&redis.Options{
|
2024-09-22 13:59:33 +08:00
|
|
|
|
Addr: proto.Config.REDIS_ADDR, // Redis 服务器地址
|
|
|
|
|
|
Password: proto.Config.REDIS_PASSWORD, // 如果 Redis 设置了密码
|
|
|
|
|
|
DB: proto.Config.REDIS_DB, // 使用的数据库编号
|
|
|
|
|
|
})
|
|
|
|
|
|
}
|
2024-05-18 17:12:24 +08:00
|
|
|
|
|
|
|
|
|
|
// 验证 Redis 客户端是否可以正常工作
|
2024-10-28 17:17:23 +08:00
|
|
|
|
_, err := RedisClient.Ping(ctx).Result()
|
2024-05-18 17:12:24 +08:00
|
|
|
|
if err != nil {
|
2024-06-08 15:23:43 +08:00
|
|
|
|
fmt.Println("Error connecting to Redis: %v", err)
|
2024-05-18 17:12:24 +08:00
|
|
|
|
}
|
2024-08-02 10:30:41 +08:00
|
|
|
|
return err
|
2024-05-18 17:12:24 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func CloseRedis() {
|
|
|
|
|
|
// 关闭 Redis 客户端
|
2024-10-28 17:17:23 +08:00
|
|
|
|
if err := RedisClient.Close(); err != nil {
|
2024-06-08 15:23:43 +08:00
|
|
|
|
fmt.Println("Error closing Redis client: %v", err)
|
2024-05-18 17:12:24 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2024-06-12 17:43:15 +08:00
|
|
|
|
func IsContainKey(key string) bool {
|
2024-05-18 17:12:24 +08:00
|
|
|
|
ctx := context.Background()
|
2024-10-28 17:17:23 +08:00
|
|
|
|
val, err := RedisClient.Exists(ctx, key).Result() // 检查键是否存在, 如果存在则返回 1, 否则返回 0
|
2024-05-18 17:12:24 +08:00
|
|
|
|
if err != nil {
|
2024-06-08 15:23:43 +08:00
|
|
|
|
fmt.Println("Error getting key: %v", err)
|
|
|
|
|
|
return false
|
2024-05-18 17:12:24 +08:00
|
|
|
|
}
|
|
|
|
|
|
if val == 0 {
|
|
|
|
|
|
return false
|
|
|
|
|
|
}
|
|
|
|
|
|
return true
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 设置redis
|
2024-06-07 20:16:08 +08:00
|
|
|
|
func SetRedis(key string, value string) bool {
|
2024-05-18 17:12:24 +08:00
|
|
|
|
ctx := context.Background()
|
|
|
|
|
|
// 设置键值对, 0 表示不设置过期时间, 如果需要设置过期时间, 可以设置为 time.Second * 10 等
|
2024-10-28 17:17:23 +08:00
|
|
|
|
err := RedisClient.Set(ctx, key, value, time.Minute*30).Err()
|
2024-05-18 17:12:24 +08:00
|
|
|
|
if err != nil {
|
2024-06-08 15:23:43 +08:00
|
|
|
|
fmt.Println("Error setting key: %v", err)
|
2024-06-07 20:16:08 +08:00
|
|
|
|
return false
|
2024-05-18 17:12:24 +08:00
|
|
|
|
}
|
2024-06-07 20:16:08 +08:00
|
|
|
|
return true
|
2024-05-18 17:12:24 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2024-05-31 15:18:24 +08:00
|
|
|
|
// 设置hash
|
2024-06-11 18:38:41 +08:00
|
|
|
|
func SetHashWithTime(key string, id int, name, email string, duration time.Duration) bool {
|
2024-06-08 15:23:43 +08:00
|
|
|
|
//捕获错误,如果错误返回
|
|
|
|
|
|
|
2024-05-31 15:18:24 +08:00
|
|
|
|
ctx := context.Background() // 创建一个上下文
|
2024-05-31 15:24:33 +08:00
|
|
|
|
fields := map[string]interface{}{
|
|
|
|
|
|
"id": strconv.Itoa(id),
|
|
|
|
|
|
"name": name,
|
|
|
|
|
|
"email": email,
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2024-05-31 15:18:24 +08:00
|
|
|
|
// 设置哈希表的字段值, 0 表示不设置过期时间, 如果需要设置过期时间, 可以设置为 time.Second * 10 等
|
2024-10-28 17:17:23 +08:00
|
|
|
|
err := RedisClient.HSet(ctx, key, fields).Err()
|
2024-06-01 16:22:18 +08:00
|
|
|
|
if err != nil {
|
2024-06-08 15:23:43 +08:00
|
|
|
|
fmt.Println("Error setting key: %v", err)
|
|
|
|
|
|
return false
|
2024-06-01 16:22:18 +08:00
|
|
|
|
}
|
2024-10-28 17:17:23 +08:00
|
|
|
|
err = RedisClient.Expire(ctx, key, time.Hour*10).Err()
|
2024-05-31 15:18:24 +08:00
|
|
|
|
if err != nil {
|
2024-06-08 15:23:43 +08:00
|
|
|
|
fmt.Println("Error setting key: %v", err)
|
|
|
|
|
|
return false
|
2024-05-31 15:18:24 +08:00
|
|
|
|
}
|
2024-06-08 15:23:43 +08:00
|
|
|
|
return true
|
2024-05-31 15:18:24 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2024-06-11 18:38:41 +08:00
|
|
|
|
// 设置redis hash,设置过期时间
|
|
|
|
|
|
func SetHash(key string, data map[string]interface{}) bool {
|
2024-05-31 15:18:24 +08:00
|
|
|
|
ctx := context.Background()
|
2024-10-28 17:17:23 +08:00
|
|
|
|
err := RedisClient.HSet(ctx, key, data).Err()
|
2024-05-31 15:18:24 +08:00
|
|
|
|
if err != nil {
|
2024-06-11 18:38:41 +08:00
|
|
|
|
fmt.Println("%v :Error setting hash: %v", key, err)
|
|
|
|
|
|
return false
|
|
|
|
|
|
}
|
2024-10-28 17:17:23 +08:00
|
|
|
|
err = RedisClient.Expire(ctx, key, time.Minute*30).Err()
|
2024-06-11 18:38:41 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
fmt.Println("%v :Error setting expire: %v", key, err)
|
|
|
|
|
|
return false
|
|
|
|
|
|
}
|
|
|
|
|
|
return true
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func SetHashWithField(key string, field string, value string) bool {
|
|
|
|
|
|
ctx := context.Background()
|
2024-10-28 17:17:23 +08:00
|
|
|
|
err := RedisClient.HSet(ctx, key, field, value).Err()
|
2024-06-11 18:38:41 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
fmt.Println("Error setting key: %v", err)
|
|
|
|
|
|
return false
|
|
|
|
|
|
}
|
|
|
|
|
|
return true
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func GetHash(key string, field string) string {
|
|
|
|
|
|
ctx := context.Background()
|
2024-10-28 17:17:23 +08:00
|
|
|
|
val, err := RedisClient.HGet(ctx, key, field).Result()
|
2024-06-11 18:38:41 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
fmt.Println("Error getting hash: %v", err)
|
|
|
|
|
|
return ""
|
|
|
|
|
|
}
|
|
|
|
|
|
return val
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func GetHashAll(key string) map[string]string {
|
|
|
|
|
|
ctx := context.Background()
|
2024-10-28 17:17:23 +08:00
|
|
|
|
val, err := RedisClient.HGetAll(ctx, key).Result()
|
2024-06-11 18:38:41 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
fmt.Println("Error getting hash: %v", err)
|
|
|
|
|
|
return nil
|
2024-05-31 15:18:24 +08:00
|
|
|
|
}
|
2024-06-11 18:38:41 +08:00
|
|
|
|
return val
|
2024-05-31 15:18:24 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2024-05-18 17:12:24 +08:00
|
|
|
|
// 设置redis
|
2024-06-07 20:16:08 +08:00
|
|
|
|
func SetRedisWithExpire(key string, value string, expire time.Duration) bool { // 设置键值对, 0 表示不设置过期时间, 如果需要设置过期时间, 可以设置为 time.Second * 10 等
|
2024-05-18 17:12:24 +08:00
|
|
|
|
ctx := context.Background()
|
|
|
|
|
|
// 设置键值对, 0 表示不设置过期时间, 如果需要设置过期时间, 可以设置为 time.Second * 10 等
|
2024-10-28 17:17:23 +08:00
|
|
|
|
err := RedisClient.Set(ctx, key, value, expire).Err()
|
2024-05-18 17:12:24 +08:00
|
|
|
|
if err != nil {
|
2024-06-08 15:23:43 +08:00
|
|
|
|
fmt.Println("Error setting key: %v", err)
|
2024-06-07 20:16:08 +08:00
|
|
|
|
return false
|
2024-05-18 17:12:24 +08:00
|
|
|
|
}
|
2024-06-07 20:16:08 +08:00
|
|
|
|
return true
|
2024-05-18 17:12:24 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 获取redis
|
|
|
|
|
|
func GetRedis(key string) string {
|
|
|
|
|
|
ctx := context.Background()
|
2024-10-28 17:17:23 +08:00
|
|
|
|
val, err := RedisClient.Get(ctx, key).Result() // 从 Redis 读取键值, 如果键不存在则返回空字符串, 如果出现错误则返回错误
|
2024-05-18 17:12:24 +08:00
|
|
|
|
if err != nil {
|
2024-06-25 16:32:38 +08:00
|
|
|
|
fmt.Println(key, " Error getting key: %v", err)
|
2024-06-09 11:22:58 +08:00
|
|
|
|
return ""
|
2024-05-18 17:12:24 +08:00
|
|
|
|
}
|
|
|
|
|
|
return val
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2024-06-24 17:58:22 +08:00
|
|
|
|
// pop redis list from right,as stack
|
|
|
|
|
|
func PopRedisList(key string) string {
|
2024-05-18 17:12:24 +08:00
|
|
|
|
ctx := context.Background()
|
2024-10-28 17:17:23 +08:00
|
|
|
|
val, err := RedisClient.RPop(ctx, key).Result() // 从 Redis 读取键值, 如果键不存在则返回空字符串, 如果出现错误则返回错误
|
2024-05-18 17:12:24 +08:00
|
|
|
|
if err != nil {
|
2024-06-25 16:32:38 +08:00
|
|
|
|
fmt.Println(key, " Error reading from Redis: %v", err)
|
2024-06-24 17:58:22 +08:00
|
|
|
|
return ""
|
2024-05-18 17:12:24 +08:00
|
|
|
|
}
|
|
|
|
|
|
return val
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2024-06-27 14:54:24 +08:00
|
|
|
|
// pop redis list from left,as queue
|
|
|
|
|
|
func PopRedisListLeft(key string) string {
|
|
|
|
|
|
ctx := context.Background()
|
2024-10-28 17:17:23 +08:00
|
|
|
|
val, err := RedisClient.LPop(ctx, key).Result() // 从 Redis 读取键值, 如果键不存在则返回空字符串, 如果出现错误则返回错误
|
2024-06-27 14:54:24 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
return ""
|
|
|
|
|
|
}
|
|
|
|
|
|
return val
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2024-06-27 16:50:41 +08:00
|
|
|
|
func DelRedis(key string) {
|
|
|
|
|
|
ctx := context.Background()
|
2024-10-28 17:17:23 +08:00
|
|
|
|
err := RedisClient.Del(ctx, key).Err()
|
2024-06-27 16:50:41 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
fmt.Println("Error deleting key: %v", err)
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2024-05-18 17:12:24 +08:00
|
|
|
|
// push redis list from right
|
2024-06-24 17:58:22 +08:00
|
|
|
|
func PushRedisList(key string, value string) bool {
|
2024-05-18 17:12:24 +08:00
|
|
|
|
ctx := context.Background()
|
2024-10-28 17:17:23 +08:00
|
|
|
|
err := RedisClient.RPush(ctx, key, value).Err()
|
2024-05-18 17:12:24 +08:00
|
|
|
|
if err != nil {
|
2024-06-08 15:23:43 +08:00
|
|
|
|
fmt.Println("Error setting key: %v", err)
|
2024-06-24 17:58:22 +08:00
|
|
|
|
return false
|
2024-05-18 17:12:24 +08:00
|
|
|
|
}
|
2024-06-24 17:58:22 +08:00
|
|
|
|
return true
|
2024-05-18 17:12:24 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2024-06-29 13:59:47 +08:00
|
|
|
|
func PushRedisListWithExpire(key string, value string, expire time.Duration) bool {
|
|
|
|
|
|
ctx := context.Background()
|
2024-10-28 17:17:23 +08:00
|
|
|
|
err := RedisClient.RPush(ctx, key, value).Err()
|
2024-06-29 13:59:47 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
fmt.Println("Error setting key: %v", err)
|
|
|
|
|
|
return false
|
|
|
|
|
|
}
|
2024-10-28 17:17:23 +08:00
|
|
|
|
err = RedisClient.Expire(ctx, key, expire).Err()
|
2024-06-29 13:59:47 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
fmt.Println("Error setting key: %v", err)
|
|
|
|
|
|
return false
|
|
|
|
|
|
}
|
|
|
|
|
|
return true
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2024-05-18 17:12:24 +08:00
|
|
|
|
// delete redis key
|
|
|
|
|
|
func delRedis(key string) {
|
|
|
|
|
|
ctx := context.Background()
|
2024-10-28 17:17:23 +08:00
|
|
|
|
err := RedisClient.Del(ctx, key).Err()
|
2024-05-18 17:12:24 +08:00
|
|
|
|
if err != nil {
|
2024-06-08 15:23:43 +08:00
|
|
|
|
fmt.Println("Error setting key: %v", err)
|
2024-05-18 17:12:24 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// User 用户,用于存入 Redis hash
|
|
|
|
|
|
type RUser struct {
|
|
|
|
|
|
ID int `json:"id"`
|
|
|
|
|
|
Name string `json:"name"`
|
|
|
|
|
|
Age int `json:"age"`
|
|
|
|
|
|
Email string `json:"email"`
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func (u *RUser) toJSONString() string {
|
|
|
|
|
|
// 将User对象编码为JSON字符串
|
|
|
|
|
|
userJSON, err := json.Marshal(u)
|
|
|
|
|
|
if err != nil {
|
2024-06-08 15:23:43 +08:00
|
|
|
|
fmt.Println("Failed to marshal user: %v", err)
|
2024-05-18 17:12:24 +08:00
|
|
|
|
}
|
|
|
|
|
|
return string(userJSON)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// put hash to redis
|
|
|
|
|
|
func hSetRedis(key string, field string, value string) {
|
|
|
|
|
|
ctx := context.Background()
|
2024-10-28 17:17:23 +08:00
|
|
|
|
err := RedisClient.HSet(ctx, key, field, value).Err()
|
2024-05-18 17:12:24 +08:00
|
|
|
|
if err != nil {
|
2024-06-08 15:23:43 +08:00
|
|
|
|
fmt.Println("Error setting key: %v", err)
|
2024-05-18 17:12:24 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// get hash from redis
|
|
|
|
|
|
func hGetRedis(key string, field string) string {
|
|
|
|
|
|
ctx := context.Background()
|
2024-10-28 17:17:23 +08:00
|
|
|
|
val, err := RedisClient.HGet(ctx, key, field).Result()
|
2024-05-18 17:12:24 +08:00
|
|
|
|
if err != nil {
|
2024-06-08 15:23:43 +08:00
|
|
|
|
fmt.Println("Error getting key: %v", err)
|
2024-05-18 17:12:24 +08:00
|
|
|
|
}
|
|
|
|
|
|
return val
|
|
|
|
|
|
}
|
2024-09-21 13:14:20 +08:00
|
|
|
|
|
|
|
|
|
|
// 设置set,有过期时间
|
|
|
|
|
|
func SetRedisSet(key string, values []string, expire time.Duration) bool {
|
|
|
|
|
|
ctx := context.Background()
|
2024-10-28 17:17:23 +08:00
|
|
|
|
err := RedisClient.SAdd(ctx, key, values).Err()
|
2024-09-21 13:14:20 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
fmt.Println("Error setting key: %v", err)
|
|
|
|
|
|
return false
|
|
|
|
|
|
}
|
2024-10-28 17:17:23 +08:00
|
|
|
|
err = RedisClient.Expire(ctx, key, expire).Err()
|
2024-09-21 13:14:20 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
fmt.Println("Error setting key: %v", err)
|
|
|
|
|
|
return false
|
|
|
|
|
|
}
|
|
|
|
|
|
return true
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 设置set,添加元素
|
|
|
|
|
|
func SetRedisSetAdd(key string, value string) bool {
|
|
|
|
|
|
ctx := context.Background()
|
2024-10-28 17:17:23 +08:00
|
|
|
|
err := RedisClient.SAdd(ctx, key, value).Err()
|
2024-09-21 13:14:20 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
fmt.Println("Error setting key: %v", err)
|
|
|
|
|
|
return false
|
|
|
|
|
|
}
|
|
|
|
|
|
return true
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2024-12-13 20:21:05 +08:00
|
|
|
|
// 批量添加元素
|
|
|
|
|
|
func SetRedisSetAddBatchWithExpire(key string, values []string, expire time.Duration) bool {
|
|
|
|
|
|
ctx := context.Background()
|
|
|
|
|
|
err := RedisClient.SAdd(ctx, key, values).Err()
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
fmt.Println("Error setting key: %v", err)
|
|
|
|
|
|
return false
|
|
|
|
|
|
}
|
|
|
|
|
|
err = RedisClient.Expire(ctx, key, expire).Err()
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
fmt.Println("Error setting key: %v", err)
|
|
|
|
|
|
return false
|
|
|
|
|
|
}
|
|
|
|
|
|
return true
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2024-11-06 21:41:02 +08:00
|
|
|
|
// 设置set,添加元素
|
|
|
|
|
|
func SetRedisSetAddWithExpire(key string, value string, expire time.Duration) bool {
|
|
|
|
|
|
ctx := context.Background()
|
|
|
|
|
|
err := RedisClient.SAdd(ctx, key, value).Err()
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
fmt.Println("Error setting key: %v", err)
|
|
|
|
|
|
return false
|
|
|
|
|
|
}
|
|
|
|
|
|
err = RedisClient.Expire(ctx, key, expire).Err()
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
fmt.Println("Error setting key: %v", err)
|
|
|
|
|
|
return false
|
|
|
|
|
|
}
|
|
|
|
|
|
return true
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2024-09-21 13:14:20 +08:00
|
|
|
|
// 设置set,删除元素
|
|
|
|
|
|
func SetRedisSetRemove(key string, value string) bool {
|
|
|
|
|
|
ctx := context.Background()
|
2024-10-28 17:17:23 +08:00
|
|
|
|
err := RedisClient.SRem(ctx, key, value).Err()
|
2024-09-21 13:14:20 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
fmt.Println("Error setting key: %v", err)
|
|
|
|
|
|
return false
|
|
|
|
|
|
}
|
|
|
|
|
|
return true
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2024-10-18 19:56:49 +08:00
|
|
|
|
// 获取两个set的交集
|
|
|
|
|
|
func GetRedisSetIntersect(key1 string, key2 string) []string {
|
|
|
|
|
|
ctx := context.Background()
|
2024-10-28 17:17:23 +08:00
|
|
|
|
val, err := RedisClient.SInter(ctx, key1, key2).Result()
|
2024-10-18 19:56:49 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
fmt.Println("Error getting key: %v", err)
|
|
|
|
|
|
return nil
|
|
|
|
|
|
}
|
|
|
|
|
|
return val
|
|
|
|
|
|
}
|
2024-09-21 13:14:20 +08:00
|
|
|
|
|
|
|
|
|
|
// 查看set是否包含元素
|
|
|
|
|
|
func IsContainSet(key string, value string) bool {
|
|
|
|
|
|
ctx := context.Background()
|
2024-10-28 17:17:23 +08:00
|
|
|
|
val, err := RedisClient.SIsMember(ctx, key, value).Result()
|
2024-09-21 13:14:20 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
fmt.Println("Error getting key: %v", err)
|
|
|
|
|
|
return false
|
|
|
|
|
|
}
|
|
|
|
|
|
return val
|
|
|
|
|
|
}
|
2024-10-01 20:45:31 +08:00
|
|
|
|
|
|
|
|
|
|
// 查看set的所有元素
|
|
|
|
|
|
func GetRedisSetMembers(key string) []string {
|
|
|
|
|
|
ctx := context.Background()
|
2024-10-28 17:17:23 +08:00
|
|
|
|
val, err := RedisClient.SMembers(ctx, key).Result()
|
2024-10-01 20:45:31 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
fmt.Println("Error getting key: %v", err)
|
|
|
|
|
|
return nil
|
|
|
|
|
|
}
|
|
|
|
|
|
return val
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// BITMAP
|
|
|
|
|
|
func SetRedisBitmap(key string, offset int64, value int) bool {
|
|
|
|
|
|
ctx := context.Background()
|
2024-10-28 17:17:23 +08:00
|
|
|
|
err := RedisClient.SetBit(ctx, key, offset, value).Err()
|
2024-10-01 20:45:31 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
fmt.Println("Error setting key: %v", err)
|
|
|
|
|
|
return false
|
|
|
|
|
|
}
|
|
|
|
|
|
return true
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// BITMAP获取
|
|
|
|
|
|
func GetRedisBitmap(key string, offset int64) int {
|
|
|
|
|
|
ctx := context.Background()
|
2024-10-28 17:17:23 +08:00
|
|
|
|
val, err := RedisClient.GetBit(ctx, key, offset).Result()
|
2024-10-01 20:45:31 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
fmt.Println("Error getting key: %v", err)
|
|
|
|
|
|
return 0
|
|
|
|
|
|
}
|
|
|
|
|
|
return int(val)
|
|
|
|
|
|
}
|
2024-10-07 15:22:58 +08:00
|
|
|
|
|
|
|
|
|
|
// 发布订阅者模式-发布消息
|
|
|
|
|
|
func Publish(channel string, message string, expire time.Duration) {
|
|
|
|
|
|
ctx := context.Background()
|
2024-10-28 17:17:23 +08:00
|
|
|
|
err := RedisClient.Publish(ctx, channel, message).Err()
|
2024-10-07 15:22:58 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
fmt.Println("Error publishing message: %v", err)
|
|
|
|
|
|
}
|
2024-10-28 17:17:23 +08:00
|
|
|
|
err = RedisClient.Expire(ctx, channel, expire).Err()
|
2024-10-07 15:22:58 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
fmt.Println("Error setting key: %v", err)
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 发布订阅者模式-订阅消息
|
|
|
|
|
|
func Subscribe(channel string) []string {
|
|
|
|
|
|
ctx := context.Background()
|
2024-10-28 17:17:23 +08:00
|
|
|
|
pubsub := RedisClient.Subscribe(ctx, channel)
|
2024-10-07 15:22:58 +08:00
|
|
|
|
ch := pubsub.Channel()
|
|
|
|
|
|
defer pubsub.Close()
|
|
|
|
|
|
var messages []string
|
|
|
|
|
|
for msg := range ch {
|
|
|
|
|
|
messages = append(messages, msg.Payload)
|
|
|
|
|
|
}
|
|
|
|
|
|
return messages
|
|
|
|
|
|
}
|
2024-12-13 20:21:05 +08:00
|
|
|
|
|
|
|
|
|
|
// redis两个set求差集存入第一个set
|
|
|
|
|
|
func SetRedisSetDiffAndStore(key1 string, key2 string) bool {
|
|
|
|
|
|
ctx := context.Background()
|
|
|
|
|
|
err := RedisClient.SDiffStore(ctx, key1, key1, key2).Err() //将key1和key2的差集存入key1
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
fmt.Println("Error setting key: %v", err)
|
|
|
|
|
|
return false
|
|
|
|
|
|
}
|
|
|
|
|
|
return true
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// redis将第二个set存入第一个set
|
|
|
|
|
|
func SetRedisSetUnionAndStore(key1 string, key2 string) bool {
|
|
|
|
|
|
ctx := context.Background()
|
|
|
|
|
|
err := RedisClient.SUnionStore(ctx, key1, key1, key2).Err() //将key1和key2的并集存入key1
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
fmt.Println("Error setting key: %v", err)
|
|
|
|
|
|
return false
|
|
|
|
|
|
}
|
|
|
|
|
|
return true
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// redis 清空set
|
|
|
|
|
|
func ClearRedisSet(key string) bool {
|
|
|
|
|
|
ctx := context.Background()
|
|
|
|
|
|
err := RedisClient.Del(ctx, key).Err()
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
fmt.Println("Error setting key: %v", err)
|
|
|
|
|
|
return false
|
|
|
|
|
|
}
|
|
|
|
|
|
return true
|
|
|
|
|
|
}
|
2024-12-13 20:26:39 +08:00
|
|
|
|
|
|
|
|
|
|
// 获取两个集合的并集
|
|
|
|
|
|
func GetRedisSetUnion(key1 string, key2 string) []string {
|
|
|
|
|
|
ctx := context.Background()
|
|
|
|
|
|
val, err := RedisClient.SUnion(ctx, key1, key2).Result()
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
fmt.Println("Error getting key: %v", err)
|
|
|
|
|
|
return nil
|
|
|
|
|
|
}
|
|
|
|
|
|
return val
|
|
|
|
|
|
}
|