社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
package main
import (
"fmt"
"github.com/go-redis/redis"
"time"
)
func main() {
//字符串操作
client := redis.NewClient(&redis.Options{
Addr: "10.181.13.126:6379",
Password: "root", // no password set
DB: 0, // use default DB
})
defer client.Close()
ping,err := client.Ping().Result()
if err != nil{
fmt.Printf("ping err [%s] n",err.Error())
err_handler(err)
}
fmt.Printf("ping result : %s n",ping)
//设置不过期的值
err = client.Set("session","ABK00000000001",0).Err()
if err != nil {
fmt.Printf("try set key [session] to value [ABK00000000001] error [%s] n",err.Error())
err_handler(err)
}
//设置有失效时间的值
err = client.Set("cookie","ABK00000000001",time.Hour * 2).Err()
if err != nil {
fmt.Printf("try set key [cookie] to value [ABK00000000001] error [%s] n",err.Error())
err_handler(err)
}
//查询
value,err := client.Get("session").Result()
if err != nil {
fmt.Printf("try get value by key [session] error [%s] n ",err.Error())
err_handler(err)
}
fmt.Printf("key[session] = %s n",value)
//time to live 剩余的生命
duration,err := client.TTL("cookie").Result()
if err != nil {
fmt.Printf("获取cookie剩余生命时间失败:[%s] n",err.Error())
err_handler(err)
}
fmt.Printf("cookie的剩余生命时间 :%s , %dsn", duration.String(), int64(duration.Seconds()))
var userList = [] string {"张乐","赵学洋","冯程程"}
for _,v := range userList{
err = client.RPush("user_list",v).Err()
if err != nil {
fmt.Printf("rpush list[tqueue] error[%s]n", err.Error())
err_handler(err)
}
}
//查询key中数据长度
list_len, err := client.LLen("user_list").Result()
if err != nil {
fmt.Printf("try get len of list[user_list] error[%s]n",err.Error())
err_handler(err)
}
fmt.Printf("len of list[user_list] is %dn", list_len)
//对于消息服务要求,
// 可使用lpop或者rpop,如果列表为空,会返回一个nil,导致消息订阅者不断尝试调用pop命令。
// 另一种方式是redis提供了带阻塞的(block)的pop命令,blpop或者brpop。
// 这两个命令在list为空时处于等待状态,直到列表有元素,或者指定时间到期为止。
//阻塞的从list的头部读一个元素
result, err := client.BLPop(time.Second * 1, "user_list").Result()
if err != nil {
fmt.Printf("blpop list[user_list] error[%s]n", err.Error())
err_handler(err)
}
fmt.Printf("blpop list[user_list], value[%s]n", result[1])
fmt.Printf("----------------------------------------n")
fmt.Printf("hmap testn")
//设置map
err = client.HSet("tmap", "1", "f1").Err()
if err != nil {
fmt.Printf("try hset map[tmap] field[1] error[%s]n",
err.Error())
err_handler(err)
}
err = client.HSet("tmap", "2", "f2").Err()
if err != nil {
fmt.Printf("try hset map[tmap] field[2] error[%s]n",err.Error())
err_handler(err)
}
kv_map := make(map[string]interface{})
kv_map["3"] = "f3"
kv_map["4"] = "f4"
//插入map集合
err = client.HMSet("tmap", kv_map).Err()
if err != nil {
fmt.Printf("try mset map[tmap] field[3] field[4] error[%s]n",err.Error())
err_handler(err)
}
//map的大小
map_len, err := client.HLen("tmap").Result()
if err != nil {
fmt.Printf("try get len of map[tmap] error[%s]n", err.Error())
err_handler(err)
}
fmt.Printf("len of map[tmap] is %dn", map_len)
// get map value
value, err = client.HGet("tmap", "1").Result()
if err != nil {
fmt.Printf("try get field[1] value of map[tmap] error[%s]n",err.Error())
err_handler(err)
}
fmt.Printf("field[1] value of map[tmap] is %sn", value)
// hget all
result_kv, err := client.HGetAll("tmap").Result()
if err != nil {
fmt.Printf("try hgetall map[tmap] error[%s]n", err.Error())
err_handler(err)
}
for k, v := range result_kv {
fmt.Printf("map[tmap] %s = %sn", k, v)
}
fmt.Printf("----------------------------------------n")
fmt.Printf("pubsub testn")
//订阅的通道
pubsub := client.Subscribe("test_channel")
//订阅的消息是否到达
_, err = pubsub.Receive()
if err != nil {
fmt.Printf("try subscribe channel[test_channel] error[%s]n",err.Error())
err_handler(err)
}
// go channel to used to receive message
ch := pubsub.Channel()
// 订阅消息
err = client.Publish("test_channel", "hello").Err()
if err != nil {
fmt.Printf("try publish message to channel[test_channel] error[%s]n",err.Error())
err_handler(err)
}
time.AfterFunc(time.Second * 2, func() {
_ = pubsub.Close()
})
// 消费消息
for {
msg, ok := <-ch
if !ok {
break
}
fmt.Printf("收到消息[%s] 从通道[%s]n",msg.Payload, msg.Channel)
}
}
func err_handler(err error) {
fmt.Printf("err_handler, error:%sn", err.Error())
panic(err.Error())
}
推荐一个公众号
号主为一线大厂架构师,CSDN博客专家,博客访问量突破一千万。主要分享Java、golang架构,源码,分布式,高并发等技术,用大厂程序员的视角来探讨技术进阶、面试指南、职业规划等。15W技术人的选择!
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!