redigo的基本使用二


hset : 
//将哈希表 key 中的字段 field 的值设为 value 。
//HSET KEY_NAME FIELD VALUE 
_,err = r.Do("hset","students","name","张三")
if err != nil {
	fmt.Println("hset error : ", err)
	return
}
hget : 
//获取存储在哈希表中指定字段的值
//HGET KEY_NAME FIELD_NAME 
name,err := redis.String(r.Do("hget","students","name"))
if err != nil {
	fmt.Println("hget error : ", err)
	return
}
fmt.Println("name = ",name)  // name =  张三
HEXISTS :
//查看哈希表 key (students)中,指定的字段(name)是否存在
bo,err := redis.Bool(r.Do("HEXISTS","students","name"))
if err != nil {
	fmt.Println("HEXISTS error : ", err)
	return
}
fmt.Println("bo = ",bo)

hdel :

//删除
bo,err := redis.Bool(r.Do("hdel","students","name"))
if err != nil {
	fmt.Println("hdel error : ", err)
	return
}
fmt.Println("bo = ",bo) //bo =  true
hgetall : 
// 获取在哈希表中指定 key 的所有字段和值
_,_ = r.Do("hset","students","name1","张三")
_,_ = r.Do("hset","students","name2","李四")

m,err := redis.StringMap(r.Do("hgetall","students"))
if err != nil {
	fmt.Println("hgetall error : ", err)
	return
}
fmt.Println("m = ",m)  //m =  map[name1:张三 name2:李四]

lpush 和 lrange :

// 插入到列表头部
_,_ = r.Do("lpush","user","张三")
_,_ = r.Do("lpush","user","李四")
// 获取列表指定范围内的元素
values, _ := redis.Values(r.Do("lrange", "user", "0", "100"))
for _, v := range values {
	fmt.Println(string(v.([]byte)))
}

sadd 和 smembers

// 向集合添加成员
_,_ = r.Do("sadd","username","zhangsan")
_,_ = r.Do("sadd","username","lisi")
// 返回集合中的所有成员
arr,err := redis.Strings(r.Do("SMEMBERS","username"))
if err != nil {
	fmt.Println("error : ",err)
	return
}
fmt.Println("arr = ",arr)

 管道:

 连接通过发送(Send)、刷新(Flush)和接收(Receive)方法支持管道。

Send(commandName string, args ...interface{}) error
Flush() error
Receive() (reply interface{}, err error)
// send将命令发送到缓冲区中
// flush刷新缓冲区,将命令发送到redis服务器
// receive负责处理接收到的消息内容, 注意:receive一次只从结果中拿出一个send的命令进行处理
r.Send("set","color","yellow")   //发送到缓冲区
r.Send("get","color")  //发送到缓冲区
r.Flush()  // 刷新缓冲区
r.Receive() //处理接收到的消息 处理set
color, _ := redis.String(r.Receive()) //处理接收到的消息  处理get
fmt.Println("color = ",color)  //color =  yellow

 发布订阅 :

//  PubSubConn类型用实现订阅者的方便方法包装了Conn。
// Subscribe、PSubscribe、Unsubscribe和PUnsubscribe方法发送和刷新订阅管理命令。
// receive方法将推送消息转换为方便的类型,以便在类型开关中使用。
func subscribe(){
	r, err := redis.Dial("tcp", "127.0.0.1:6379")
	if err != nil {
		fmt.Println(err)
		return
	}
	defer r.Close()
	// PubSubConn类型用实现订阅者的方便方法包装了Conn。
	psc := redis.PubSubConn{r}
	// 订阅频道信息
	psc.Subscribe("example")
	for {
		switch v := psc.Receive().(type) {
		case redis.Message:
			fmt.Printf("订阅频道 : %s 信息 : %s\n", v.Channel, v.Data)
		case redis.Subscription:
			fmt.Printf("%s: %s %d\n", v.Channel, v.Kind, v.Count)
		case error:
			fmt.Println(v)
			return
		}
	}
}

  

func main(){
	// 链接Redis
	r,err := redis.Dial("tcp","127.0.0.1:6379")
	if err != nil {
		fmt.Println("Connect to redis error", err)
		return
	}
	defer r.Close()
	go subscribe()
	go subscribe()
   for {
        var s string
		fmt.Scanln(&s)
		// 将信息发送到指定的频道
        _, err := r.Do("PUBLISH", "example", s)
        if err != nil {
            fmt.Println("PUBLISH error: ", err)
            return
	   }
   }
}

  结果:

example: subscribe 1
example: subscribe 1
AAA
订阅频道 : example 信息 : AAA
订阅频道 : example 信息 : AAA

 

 

  

  

  

  

  

  


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM