LoginSignup
0
0

More than 3 years have passed since last update.

Go の gRPC で Redis のデータを削除 (Delete)

Last updated at Posted at 2020-02-12

設定ファイル、サーバープログラム、クライアントプログラムの3つが必要です。

$ tree
.
├── redis_delete
│   └── redis_delete.proto
├── redis_delete_client
│   └── main.go
└── redis_delete_server
    └── main.go

設定ファイル

redis_delete/redis_delete.proto
こちらと同じ
Python の gRPC で Redis のデータを削除 (Delete)

サーバープログラム

redis_delete_server/main.go
// ---------------------------------------------------------------
//
//  redis_delete_server/main.go
//
//                  Feb/11/2020 
// ---------------------------------------------------------------
package main

import (
    "context"
    "log"
    "net"
    "fmt"
    "os"

    "google.golang.org/grpc"
    pb "../redis_delete"
)

const (
    port = ":50051"
)

type server struct {
    pb.UnimplementedGreeterServer
}

// ---------------------------------------------------------------
func redis_delete_proc (key_in string) string {
    rvalue := key_in

    hostname := "localhost"
    port := "6379"

    conn, err := net.Dial ("tcp", hostname + ":" + port)
    if err != nil {
        fmt.Println(err)
        return rvalue
        }

    _, err = conn.Write ([]byte("del " + key_in + "\r\n"))
    if err != nil {
        fmt.Println(err)
        return rvalue
        }

    conn.Close ()

    return rvalue
}
// ---------------------------------------------------------------
func (s *server) RedisDelete(ctx context.Context, in *pb.RedisRequest) (*pb.RedisReply, error) {
    fmt.Fprintf (os.Stderr,"*** check aaa ***\n")
    key := in.GetKey()
    fmt.Fprintf (os.Stderr,"key = " + key + "\n")
    rvalue := redis_delete_proc (key)
    return &pb.RedisReply{Key: rvalue }, nil
}

// ---------------------------------------------------------------
func main() {
    lis, err := net.Listen("tcp", port)
    if err != nil {
        log.Fatalf("failed to listen: %v", err)
    }
    s := grpc.NewServer()
    pb.RegisterGreeterServer(s, &server{})
    if err := s.Serve(lis); err != nil {
        log.Fatalf("failed to serve: %v", err)
    }
}

// ---------------------------------------------------------------

クライアントプログラム

redis_delete_client/main.go
// ---------------------------------------------------------------
//
//  redis_delete_client/main.go
//
//                  Feb/11/2020
//
// ---------------------------------------------------------------
package main

import (
    "context"
    "log"
    "os"
    "time"

    "google.golang.org/grpc"
    pb "../redis_delete"
)

const (
    address     = "localhost:50051"
    defaultKey = "t0001"
)

// ---------------------------------------------------------------
func main() {
    // Set up a connection to the server.
    conn, err := grpc.Dial(address, grpc.WithInsecure(), grpc.WithBlock())
    if err != nil {
        log.Fatalf("did not connect: %v", err)
    }
    defer conn.Close()
    c := pb.NewGreeterClient(conn)

    // Contact the server and print out its response.
    key := defaultKey
    if len(os.Args) > 1 {
        key = os.Args[1]
    }
    ctx, cancel := context.WithTimeout(context.Background(), time.Second)
    defer cancel()
    r, err := c.RedisDelete(ctx, &pb.RedisRequest{Key: key})
    if err != nil {
        log.Fatalf("could not greet: %v", err)
    }
    rvalue := r.GetKey()
    log.Printf("Rvalue: %s", rvalue)

}

// ---------------------------------------------------------------

gRPC のコードを作成します。

スクリプト

protoc -I redis_delete redis_delete/redis_delete.proto --go_out=plugins=grpc:redis_delete

サーバープログラムの起動

go run redis_delete_server/main.go

クライアントプログラムの実行

$ go run redis_delete_client/main.go t1852
2020/02/12 13:33:08 Rvalue: t1852
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0