Codebeispiel für die Clientbibliothek für die Verschlüsselung während der Übertragung

Dieses Codebeispiel zeigt eine go-redis-Clientbibliothek. Konfiguration zum Herstellen einer Verbindung zu einer Memorystore for Redis-Instanz mit Verschlüsselung während der Übertragung aktiviert.

Verbindung zu einer Instanz herstellen

Im folgenden Beispiel wird gezeigt, wie ein Client instanziiert, eine Zertifizierungsstelle für die Verschlüsselung während der Übertragung geladen und ein Verbindungspool eingerichtet wird.

Go

import (
	"context"
	"crypto/tls"
	"crypto/x509"
	"errors"
	"fmt"
	"io"
	"time"

	memorystore "cloud.google.com/go/redis/apiv1"
	redispb "cloud.google.com/go/redis/apiv1/redispb"
	"github.com/go-redis/redis/v8"
)

// ConnectToDatabase demonstrates how to use go-redis library to connect to a
// Memorystore Redis instance.
func ConnectToDatabase(w io.Writer, projectID, location, instanceID string) error {

	// Instantiate a Redis administrative client
	ctx := context.Background()
	adminClient, err := memorystore.NewCloudRedisClient(ctx)
	if err != nil {
		return err
	}
	defer adminClient.Close()

	req := &redispb.GetInstanceRequest{
		Name: fmt.Sprintf("projects/%s/locations/%s/instances/%s", projectID, location, instanceID),
	}

	instance, err := adminClient.GetInstance(ctx, req)
	if err != nil {
		return err
	}

	fmt.Fprintln(w, instance)

	// Load CA cert
	caCerts := instance.GetServerCaCerts()
	if len(caCerts) == 0 {
		return errors.New("memorystore: no server CA certs for instance")
	}

	caCertPool := x509.NewCertPool()
	caCertPool.AppendCertsFromPEM([]byte(caCerts[0].Cert))

	// Setup Redis Connection pool
	client := redis.NewClient(&redis.Options{
		Addr:         fmt.Sprintf("%s:%d", instance.Host, instance.Port),
		Password:     "PASSWORD",
		PoolSize:     1,
		MinIdleConns: 1,
		PoolTimeout:  0,
		IdleTimeout:  20 * time.Second,
		DialTimeout:  2 * time.Second,
		TLSConfig: &tls.Config{
			RootCAs: caCertPool,
		},
	})

	p, err := client.Ping(ctx).Result()
	if err != nil {
		return err
	}
	fmt.Fprintf(w, "Response:\n%s", p)

	return nil
}

Nächste Schritte