Redis-Einführung Redis ist vollständig Open Source und kostenlos, entspricht dem BSD-Protokoll und ist eine leistungsstarke Schlüssel-Wert-Datenbank. Redis und andere Key-Value-Cache-Produkte weisen die folgenden drei Merkmale auf:
Vorteile
Download und Installation Herunterladen und entpacken wget http://download.redis.io/releases/redis-5.0.3.tar.gz tar xzf redis-5.0.3.tar.gz Verschieben Sie den Ordner nach /usr/local/ mv redis-5.0.3 /usr/local/ Gehen Sie in den Ordner und kompilieren Sie den Test cd /usr/local/redis-5.0.3 sudo machen test Kompilieren und installieren sudo make installieren Redis starten Redis-Server MySQL und Redis als sekundärer Cache Bei Daten mit einer großen Anzahl von Besuchen müssen wir die aus der Datenbank erhaltenen Daten zwischenspeichern, um die Daten schneller abzurufen. Verwenden des Redis-Cache-Prozesses im Projekt
Beim Zwischenspeichern von Daten sollten Synchronisierungsprobleme berücksichtigt werden: Wenn Daten zwischengespeichert sind und beim Abfragen von Daten Daten im Cache vorhanden sind, werden die zwischengespeicherten Daten direkt zurückgegeben, ohne dass die Datenbank abgefragt werden muss. Wenn sich die Datenbankdaten ändern, kann es zu Datenbankinkonsistenzen kommen. Sie können bei jeder Änderung der Datenbank das Löschen der entsprechenden zwischengespeicherten Daten in Betracht ziehen, sodass Sie bei einer erneuten Abfrage die Datenbank abfragen und zwischenspeichern. Schritte zur Implementierung Erstellen Sie die Datei redisPool.go zum Initialisieren des Verbindungspools Paket redigo_pool importieren ( "Flagge" „github.com/garyburd/redigo/redis“ "Zeit" ) var ( Pool *redis.Pool RedisServer = flag.String("redisServer", ":6379", "") ) Funktion init() { Pool = &redis.Pool{ MaxIdle: 3, // Maximale Anzahl inaktiver Links, was bedeutet, dass auch wenn keine Redis-Verbindung besteht, N inaktive Links aufrechterhalten werden können, ohne gelöscht zu werden. MaxActive: 3, // Maximale Anzahl aktiver Verbindungen, was die maximale Anzahl gleichzeitig aktiver Links angibt. IdleTimeout: 240 * time.Second, // Maximale Wartezeit für inaktive Links. Wenn diese Zeit überschritten wird, werden inaktive Links geschlossen. Dial: func() (redis.Conn, error) { c, err := redis.Dial("tcp", *RedisServer) wenn err != nil { returniere nil, err } returniere c, err }, TestOnBorrow: func(c redis.Conn, t Zeit.Zeit) Fehler { if Zeit.Seit(t) < Zeit.Minute { Rückgabe Null } _, err := c.Do("PING") Rückgabefehler }, } } Erstellen Sie die Datei main.go, um den sekundären Cache zu implementieren Paket Haupt importieren ( "Datenbank/SQL" "Kodierung/JSON" "fmt" „github.com/garyburd/redigo/redis“ _ "github.com/go-sql-driver/mysql" "strconv" "web/redis/redigo_pool" _ "web/redis/redigo_pool" ) Typ Person Struktur { ID int `db:"id"` Name der Zeichenfolge `db:"name"` Alter int `db:"Alter"` Rmb int `db:"rmb"` } Funktion main() { var cmd Zeichenfolge für{ fmt.Println("Befehl eingeben") fmt.Scan(&cmd) Schalter cmd { Fall "getall": getAll() Standard: fmt.Println("Kann andere Befehle nicht erkennen") } fmt.Println() } } Funktion getAll() { //Holen Sie sich die Verbindung aus dem Verbindungspool conn := redigo_pool.Pool.Get() //Überprüfen Sie zunächst, ob Daten in Redis vorhanden sind//conn,_ :=redis.Dial("tcp","localhost:6379") conn.Close() verschieben Werte, _ := redis.Werte(conn.Do("lrange", "mlist",0,-1)) wenn Länge(Werte) > 0 { //Wenn Daten vorhanden sind, fmt.Println("Daten von Redis abrufen") //Direkt von Redis abrufen für _, Schlüssel := Bereichswerte{ pid := Zeichenfolge(Schlüssel.([]Byte)) Ich würde ,_:= strconv.Atoi(pid) Ergebnisse,_ := redis.Bytes(conn.Do("GET",id)) var p Person err := json.Unmarshal(Ergebnisse,&p) wenn err != nil { fmt.Println("JSON-Deserialisierungsfehler") }anders { fmt.Printf("name = %s\n",p.Name) } } }anders { fmt.Println("Von MySQL abrufen") //Datenbank abfragen db,_ := sql.Open("mysql","root:Szt930708@tcp(localhost:3306)/mydb") db.Close() verschieben var Personen []Person Zeilen, _ := db.Query("Wählen Sie ID, Name, Alter, RMB aus Person aus") für Zeilen.Weiter() { var id int Variablenname Zeichenfolge var Alter int var rmb int Zeilen.Scan(&id,&name,&alter,&rmb) pro := Person{id,name,alter,rmb} Personen = anhängen(Personen,pro) } //Nach Redis schreiben: Person im Hash-Modus nach Redis schreiben für _,p := range persons{ p_byte,_ := json.Marshal(p) _,err1 := conn.Do("SETNX",p.Id,p_byte) _,err2 := conn.Do("lpush","mlist",p.Id) // Ablaufzeit festlegen conn.Do("EXPIRE",p.Id,60*5) wenn err1 != nil || err2 != nil { fmt.Println("Schreiben fehlgeschlagen") }anders { fmt.Println("Erfolgreich geschrieben") } } conn.Do("ABLAUF","mlist",60*5) } } Zusammenfassen Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Wenn Sie Fragen haben, können Sie eine Nachricht hinterlassen. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM. Das könnte Sie auch interessieren:
|
<<: Schritte zum Erstellen des Projekts vite+vue3+element-plus
>>: Nginx-Praxis zur Optimierung hoher Parallelität
Ergebnis: Der Hauptteil besteht darin, die Codelo...
Dieses Tutorial stellt die Anwendung verschiedene...
Der erste Schritt besteht darin, das komprimierte...
Aufgetroffene Fallstricke Ich habe den ganzen Nac...
1. Übersicht Das Promise-Objekt ist eine von ES6 ...
Dieses Mal werde ich über die Fähigkeiten zur Ent...
1. ref wird kopiert, die Ansicht wird aktualisier...
Vorwort Das Docker-Image kann nicht gelöscht werd...
Inhaltsverzeichnis 1. Vorbereitung 2. Bereitstell...
Seien Sie nicht überrascht, wenn Sie im Bild eine ...
Nachdem die Quelle des Iframes auf „about:blank“ g...
Schauen Sie sich zuerst den Code an Code kopieren ...
Inhaltsverzeichnis Was ist wartbarer Code? Code-K...
Der ECS-Cloud-Server, der mit dem historischen Li...
Einführung Der Meta-Tag ist ein Hilfstag im HEAD-...