Heim  >  Artikel  >  Datenbank  >  Welche Methoden verwendet der Go Redis-Client?

Welche Methoden verwendet der Go Redis-Client?

WBOY
WBOYnach vorne
2023-06-03 09:01:381035Durchsuche

    Einführung

    Die unterste Ebene von go-redis und redigo wird durch Aufrufen der universellen Do-Methode implementiert, aber #🎜 🎜## 🎜🎜#redigo:

      Da die Eingabe ein universeller Typ ist, müssen Sie sich die Parameter und Rückgabewerte jedes Befehls merken, was sehr unfreundlich ist zu verwenden, #🎜🎜 #
    • Der Parametertyp ist ein universeller Typ und der Parametertyp kann während der Kompilierungsphase nicht überprüft werden.
    • Jeder Befehl benötigt Zeit, um die Verwendungsmethode, die Anzahl der Parameter usw. aufzuzeichnen. Die Verwendungskosten sind hoch. Wir müssen uns nur den Befehl merken und die Schnittstellenanwendung direkt überprüfen Spezifische Verwendung. Die Nutzungskosten sind gering Geben Sie
    • ein und die Antwort wird einheitlich über die Ergebnisschnittstelle zurückgegeben, wodurch sichergestellt wird, dass der Rückgabeparametertyp für Benutzer benutzerfreundlicher ist. Jeder Vorgang ist etwa 10 % langsamer als Redigo, aber Redigo muss die Anwendungs-/Schließungsverbindung anzeigen, sodass der Gesamtleistungsunterschied zwischen den beiden eigentlich nicht groß ist
    • Redigo-Bibliothek

    • redigo Es ist der Go-Client Die Bedienung der Redis-Datenbank ist im Grunde die gleiche wie bei der Implementierung von Redigo-Befehlen durch die Do-Methode Da es sich bei dem Parametertyp um einen universellen Typ handelt, kann er während der Kompilierungsphase nicht überprüft werden. Zweitens benötigt jeder Befehl Zeit, um die Verwendungsmethode, die Anzahl der Parameter usw. aufzuzeichnen.
    # 🎜🎜#Demo

    Demonstriert den grundlegenden Verbindungspoolaufbau, Ping, String-Operation, Hash-Operation, Listenoperation, Ablauf und andere Operationen
      BenchmarkRedis/redigo_client_Benchmark-12     31406	     36919 ns/op
      BenchmarkRedis/go-redis_client_Benchmark-12   29977	     38152 ns/op
      BenchmarkRedis/redigo_client_Benchmark-12     27928	     39923 ns/op
      BenchmarkRedis/go-redis_client_Benchmark-12   27127	     46451 ns/op
    • Einführung und Verwendung der go-redis-Komponente# 🎜🎜#

      go-redis bietet drei Client-Modi, die dem Server-, Cluster-, Sentinel- und Standalone-Modus entsprechen. Die drei Modi sind im Verbindungspool üblich und bieten auch einen flexiblen Hook Mechanismus. , die unterste Ebene ist eigentlich die universelle Do-Methode namens

    • Aber go-redis verfeinert die Funktionen jedes Redis-Befehls, wir brauchen nur Just Merken Sie sich den Befehl und überprüfen Sie die Anwendung direkt auf die spezifische Verwendung. Zweitens vereinheitlicht es den Datentyp entsprechend dem zugrunde liegenden Redis-Typ. Es kann dabei helfen, den Parametertyp während der Kompilierung zu überprüfen Die Antwort ist einheitlich Ergebnis. Die Schnittstellenrückgabe stellt die Korrektheit des Rückgabeparametertyps sicher und ist benutzerfreundlicher , Hash-Operation, Listenoperation, Ablaufdatum und andere Operationen
    • Do(ctx context.Context, cmd string, args ...interface{}) (interface{}, error)
    • Leistungstest

      package main
      import (
         "fmt"
         "github.com/gomodule/redigo/redis"
      )
      func main() {
         // 新建一个连接池
         var pool *redis.Pool
         pool = &redis.Pool{
            MaxIdle:     10,  //最初的连接数量
            MaxActive:   0,   //连接池最大连接数量,(0表示自动定义),按需分配
            IdleTimeout: 300, //连接关闭时间 300秒 (300秒不使用自动关闭)
            Dial: func() (redis.Conn, error) { //要连接的redis数据库
               return redis.Dial("tcp", "localhost:6379")
            },
         }
         conn := pool.Get() //从连接池,取一个链接
         defer conn.Close()
         // 0. ping正常返回pong, 异常res is nil, err not nil
         res, err := conn.Do("ping")
         fmt.Printf("ping res=%v\n", res)
         if err != nil {
            fmt.Printf("ping err=%v\n", err.Error())
         }
         // string操作
         // set
         res, err = conn.Do("set", "name", "测试001")
         fmt.Printf("set res=%v\n", res)
         if err != nil {
            fmt.Printf("set err=%v\n", err.Error())
         }
         // get
         res, err = redis.String(conn.Do("get", "name"))
         fmt.Printf("get res=%v\n", res)
         if err != nil {
            fmt.Printf("get err=%v\n", err.Error())
         }
         // MSet   MGet
         res, err = conn.Do("MSet", "name", "测试001", "age", 18)
         fmt.Printf("MSet res=%v\n", res)
         if err != nil {
            fmt.Printf("MSet err=%v\n", err.Error())
         }
         r, err := redis.Strings(conn.Do("MGet", "name", "age"))
         fmt.Printf("MGet res=%v\n", r)
         if err != nil {
            fmt.Printf("MGet err=%v\n", err.Error())
         }
         // expire
         res, err = conn.Do("expire", "name", 5)
         fmt.Printf("expire res=%v\n", r)
         if err != nil {
            fmt.Printf("expire err=%v\n", err.Error())
         }
         // list操作
         // lpush lpop
         res, err = conn.Do("lpush", "hobby", "篮球", "足球", "乒乓球")
         fmt.Printf("lpush res=%v\n", r)
         if err != nil {
            fmt.Printf("lpush err=%v\n", err.Error())
         }
         // lpop
         rs, er := conn.Do("lpop", "hobby")
         fmt.Printf("lpop res=%v\n", rs)
         if er != nil {
            fmt.Printf("lpop err=%v\n", er.Error())
         }
         // hash 操作
         // hset
         res, err = conn.Do("HSet", "userinfo", "name", "lqz")
         fmt.Printf("HSet res=%v\n", r)
         if err != nil {
            fmt.Printf("HSet err=%v\n", err.Error())
         }
         // hget
         r4, er4 := conn.Do("HGet", "userinfo", "name")
         fmt.Printf("HGet res=%v\n", r4)
         if er4 != nil {
            fmt.Printf("HGet err=%v\n", er4.Error())
         }
      }

      Ergebnisausgabe

    goos: darwin#🎜 🎜#goarch: amd64# 🎜🎜#CPU: Intel(R) Core(TM) i7-9750H CPU bei 2,60 GHz

    BenchmarkRedis

    BenchmarkRedis/redigo_client_Benchmark

    BenchmarkRedis/redigo_client_Benchmark-12          26 386 39110 ns/op

    BenchmarkRedis/go-redis_client_Benchmark

    BenchmarkRedis/go-redis_client_Benchmark-12             28186     37794 ns/op

    Das obige ist der detaillierte Inhalt vonWelche Methoden verwendet der Go Redis-Client?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

    Stellungnahme:
    Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen