package mainimport (    "context"    "fmt"    "time"    "github.com/go-redis/redis/v8")//Go1.7加入了一个新的标准库context,它定义了Context类型,专门用来简化 对于处理单个请求的多个 goroutine 之间与请求域的数据、取消信号、截止时间等相关操作var ctx = context.Background()func main() {    rdb := redis.NewClient(&redis.Options{        Addr:     "localhost:6379",        Password: "", // no password set        DB:       0,  // use default DB    })    _, err := rdb.Ping(ctx).Result()    if err != nil {        fmt.Println("redis数据库连接失败")    }    //设置获取字符串    // err = rdb.Set(ctx, "username", "zhangsan", 0).Err()    // if err != nil {    //     panic(err)    // }    // userinfo, _ := rdb.Get(ctx, "username").Result()    // fmt.Println(userinfo)    //设置获取列表    rdb.LPush(ctx, "hobby", "吃饭", "睡觉")    // rdb.RPush(ctx, "hobby", "写代码", "打篮球")    // hoddy, _ := rdb.LRange(ctx, "hobby", 0, -1).Result()    // fmt.Println(hoddy)    //设置过期    rdb.Expire(ctx, "hobby", time.Second*20).Result()    //设置集合    // rdb.SAdd(ctx, "hobby", "吃饭", "睡觉")    // rdb.SAdd(ctx, "hoddy", "吃饭")    // hoddy, _ := rdb.SMembers(ctx, "hobby").Result()    // fmt.Println(hoddy)    // //设置哈希值    // err2 := rdb.HMSet(ctx, "userinfo", map[string]interface{}{    //     "username": "张三",    //     "age":      20,    // }).Err()    // if err2 != nil {    //     fmt.Println(err2)    // }    // userinfo, err := rdb.HGetAll(ctx, "userinfo").Result()    // fmt.Println(userinfo, err)    // fmt.Println(userinfo["age"])    go func() {        time.Sleep(time.Second * 2)        //发布        rdb.Publish(ctx, "server0", "this is a message")    }()    pubsub := rdb.Subscribe(ctx, "server0")    ch := pubsub.Channel()    for msg := range ch {        fmt.Println(msg.Channel, msg.Payload)    }}//订阅
package mainimport (    "context"    "fmt"    "strconv"    "time"    "github.com/go-redis/redis/v8")var ctx = context.Background()func main() {    rdb := redis.NewClient(&redis.Options{        Addr:     "localhost:6379",        Password: "", // no password set        DB:       0,  // use default DB    })    _, err := rdb.Ping(ctx).Result()    if err != nil {        fmt.Println("redis数据库连接失败")    }    for i := 0; i < 100; i++ {        time.Sleep(time.Second * 2)        rdb.Publish(ctx, "server0", "this is a message"+strconv.Itoa(i))    }}//订阅