Rumah  >  Artikel  >  pangkalan data  >  Cara mengendalikan redis dan redigo dalam Go

Cara mengendalikan redis dan redigo dalam Go

WBOY
WBOYke hadapan
2023-05-30 21:25:101016semak imbas

Go-operate redis

Pemasangan

Terdapat berbilang pakej pelanggan untuk golang untuk mengendalikan redis, seperti redigo dan go-redis Yang mempunyai bintang terbanyak pada github ialah redigo.

go get github.com/garyburd/redigo/redis
import "github.com/garyburd/redigo/redis"

Sambungan

Antara muka Conn ialah antara muka utama untuk kerjasama dengan Redis Anda boleh menggunakan fungsi Dial, DialWithTimeout atau NewConn untuk membuat sambungan apabila tugasan selesai, aplikasi mesti memanggil Tutup fungsi untuk menyelesaikan operasi.

package main
import (
"github.com/garyburd/redigo/redis"
"fmt"
)
func main()  {
    conn,err := redis.Dial("tcp","10.1.210.69:6379")
    if err != nil {
        fmt.Println("connect redis error :",err)
        return
    }
    defer conn.Close()
}

Gunakan

package main
import (
"github.com/garyburd/redigo/redis"
"fmt"
)
func main()  {
    conn,err := redis.Dial("tcp","10.1.210.69:6379")
    if err != nil {
        fmt.Println("connect redis error :",err)
        return
    }
    defer conn.Close()
    _, err = conn.Do("SET", "name", "wd")
    if err != nil {
        fmt.Println("redis set error:", err)
    }
    name, err := redis.String(conn.Do("GET", "name"))
    if err != nil {
        fmt.Println("redis get error:", err)
    } else {
        fmt.Printf("Got name: %s \n", name)
    }
}

untuk menetapkan masa tamat tempoh kunci

  _, err = conn.Do("expire", "name", 10) //10秒过期
    if err != nil {
        fmt.Println("set expire error: ", err)
        return
    }

Dapatkan mget dalam kelompok dan tetapkan mset dalam kelompok

_, err = conn.Do("MSET", "name", "wd","age",22)
    if err != nil {
        fmt.Println("redis mset error:", err)
    }
    res, err := redis.Strings(conn.Do("MGET", "name","age"))
    if err != nil {
        fmt.Println("redis get error:", err)
    } else {
        res_type := reflect.TypeOf(res)
        fmt.Printf("res type : %s \n", res_type)
        fmt.Printf("MGET name: %s \n", res)
        fmt.Println(len(res))
    }
//结果:
//res type : []string 
//MGET name: [wd 22] 
//2

Kendalian senarai

rreee

Kendalian cincang

package main
import (
"github.com/garyburd/redigo/redis"
"fmt"
    "reflect"
)
func main()  {
    conn,err := redis.Dial("tcp","10.1.210.69:6379")
    if err != nil {
        fmt.Println("connect redis error :",err)
        return
    }
    defer conn.Close()
    _, err = conn.Do("LPUSH", "list1", "ele1","ele2","ele3")
    if err != nil {
        fmt.Println("redis mset error:", err)
    }
    res, err := redis.String(conn.Do("LPOP", "list1"))
    if err != nil {
        fmt.Println("redis POP error:", err)
    } else {
        res_type := reflect.TypeOf(res)
        fmt.Printf("res type : %s \n", res_type)
        fmt.Printf("res  : %s \n", res)
    }
}
//res type : string 
//res  : ele3

Pelipisan paip (talian paip)

Dengan menggunakan tiga kaedah Send(), Flush() dan Receive(), operasi saluran paip boleh dilakukan secara serentak. Klien boleh menggunakan kaedah send() untuk menghantar satu atau lebih arahan ke pelayan sekali gus Apabila arahan dihantar, kaedah flush() digunakan untuk menghantar input arahan dalam buffer ke pelayan sekaligus kemudian gunakan kaedah Terima() dalam urutan Baca semua keputusan operasi arahan dalam urutan masuk dahulu, keluar dahulu.

package main
import (
"github.com/garyburd/redigo/redis"
"fmt"
    "reflect"
)
func main()  {
    conn,err := redis.Dial("tcp","10.1.210.69:6379")
    if err != nil {
        fmt.Println("connect redis error :",err)
        return
    }
    defer conn.Close()
    _, err = conn.Do("HSET", "student","name", "wd","age",22)
    if err != nil {
        fmt.Println("redis mset error:", err)
    }
    res, err := redis.Int64(conn.Do("HGET", "student","age"))
    if err != nil {
        fmt.Println("redis HGET error:", err)
    } else {
        res_type := reflect.TypeOf(res)
        fmt.Printf("res type : %s \n", res_type)
        fmt.Printf("res  : %d \n", res)
    }
}
//res type : int64 
//res  : 22
  • Hantar: Hantar arahan ke penimbal

  • Siram: Kosongkan penimbal dan hantar arahan ke pelayan sekali gus

  • Recevie: Baca hasil jawapan pelayan mengikut urutan Apabila arahan baca tidak bertindak balas, operasi akan disekat.

Send(commandName string, args ...interface{}) error
Flush() error
Receive() (reply interface{}, err error)

model langganan penerbitan redis

package main
import (
"github.com/garyburd/redigo/redis"
"fmt"
)
func main()  {
    conn,err := redis.Dial("tcp","10.1.210.69:6379")
    if err != nil {
        fmt.Println("connect redis error :",err)
        return
    }
    defer conn.Close()
    conn.Send("HSET", "student","name", "wd","age","22")
    conn.Send("HSET", "student","Score","100")
    conn.Send("HGET", "student","age")
    conn.Flush()
    res1, err := conn.Receive()
    fmt.Printf("Receive res1:%v \n", res1)
    res2, err := conn.Receive()
    fmt.Printf("Receive res2:%v\n",res2)
    res3, err := conn.Receive()
    fmt.Printf("Receive res3:%s\n",res3)
}
//Receive res1:0 
//Receive res2:0
//Receive res3:22

Operasi transaksi

MULTI, EXEC, DISCARD dan WATCH adalah asas transaksi Redis Bahasa Go pada asasnya menggunakan arahan ini apabila melakukan operasi transaksi pada redis.

MULTI: Mulakan urus niaga

EXEC: Laksanakan transaksi

BUANG: Batalkan urus niaga

TONTON: Pantau perubahan kunci dalam transaksi dan batalkan sebaik sahaja terdapat tukar urusan.

Contoh:

package main
import (
    "github.com/garyburd/redigo/redis"
    "fmt"
    "time"
)
func Subs() {  //订阅者
    conn, err := redis.Dial("tcp", "10.1.210.69:6379")
    if err != nil {
        fmt.Println("connect redis error :", err)
        return
    }
    defer conn.Close()
    psc := redis.PubSubConn{conn}
    psc.Subscribe("channel1") //订阅channel1频道
    for {
        switch v := psc.Receive().(type) {
        case redis.Message:
            fmt.Printf("%s: message: %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 Push(message string)  { //发布者
    conn, _ := redis.Dial("tcp", "10.1.210.69:6379")
    _,err1 := conn.Do("PUBLISH", "channel1", message)
       if err1 != nil {
             fmt.Println("pub err: ", err1)
                 return
            }

}
func main()  {
    go Subs()
    go Push("this is wd")
    time.Sleep(time.Second*3)
}
//channel1: subscribe 1
//channel1: message: this is wd

Kendalian universal

Sambung redis

package main
import (
"github.com/garyburd/redigo/redis"
"fmt"
)
func main()  {
    conn,err := redis.Dial("tcp","10.1.210.69:6379")
    if err != nil {
        fmt.Println("connect redis error :",err)
        return
    }
    defer conn.Close()
    conn.Send("MULTI")
    conn.Send("INCR", "foo")
    conn.Send("INCR", "bar")
    r, err := conn.Do("EXEC")
    fmt.Println(r)
}
//[1, 1]

Tulis

rreee

Baca

conn,err := redis.Dial(
  "tcp",
  "10.0.3.100:6379",
  redis.DialPassword("EfcHGSzKqg6cfzWq"),
  redis.DialDatabase(8))
if err != nil {
  fmt.Println("connect redis error :",err)
  return
}
defer conn.Close()
rreeee

Atas ialah kandungan terperinci Cara mengendalikan redis dan redigo dalam Go. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam
Artikel sebelumnya:Mengapa Redis begitu pantas?Artikel seterusnya:Mengapa Redis begitu pantas?