Package github.com/DeNA/cloud-datastore-interceptor
provides gRPC interceptors for Cloud Datastore(cloud.google.com/go/datastore).
This will use in-memory cache on Client.Get and Client.GetMulti.
opts := []option.ClientOption{
option.WithGRPCDialOption(
grpc.WithUnaryInterceptor(
cache.UnaryClientInterceptor(memory.NewCache(1 * time.Minute)),
),
),
}
client, err := datastore.NewClient(ctx, projID, opts...)
cache.UnaryClientInterceptor does not use the cache for Query(e.g., Client.GetAll, Client.Run), but by using transform.QueryToLookupWithKeysOnly, it is transformed to gRPC equivalent to Client.GetMulti and the cache is used.
opts := []option.ClientOption{
option.WithGRPCDialOption(
grpc.WithChainUnaryInterceptor(
transform.QueryToLookupWithKeysOnly(),
cache.UnaryClientInterceptor(memory.NewCache(1*time.Minute)),
),
),
}
client, err := datastore.NewClient(ctx, projID, opts...)
Same as In-Memory cache, but the backend is Redis using redisClient.
opts := []option.ClientOption{
option.WithGRPCDialOption(
grpc.WithUnaryInterceptor(
cache.UnaryClientInterceptor(redis.NewCache(1*time.Minute, redisClient)),
),
),
}
client, err := datastore.NewClient(ctx, projID, opts...)