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