관리형 Redis 인스턴스에 연결하는 Cloud 함수를 보여줍니다.
더 살펴보기
이 코드 샘플이 포함된 자세한 문서는 다음을 참조하세요.
코드 샘플
Go
// Package visitcount provides a Cloud Function that connects
// to a managed Redis instance.
package visitcount
import (
"errors"
"fmt"
"log"
"net/http"
"os"
"github.com/GoogleCloudPlatform/functions-framework-go/functions"
"github.com/gomodule/redigo/redis"
)
var redisPool *redis.Pool
func init() {
// Register the HTTP handler with the Functions Framework
functions.HTTP("VisitCount", visitCount)
}
// initializeRedis initializes and returns a connection pool
func initializeRedis() (*redis.Pool, error) {
redisHost := os.Getenv("REDISHOST")
if redisHost == "" {
return nil, errors.New("REDISHOST must be set")
}
redisPort := os.Getenv("REDISPORT")
if redisPort == "" {
return nil, errors.New("REDISPORT must be set")
}
redisAddr := fmt.Sprintf("%s:%s", redisHost, redisPort)
const maxConnections = 10
return &redis.Pool{
MaxIdle: maxConnections,
Dial: func() (redis.Conn, error) {
c, err := redis.Dial("tcp", redisAddr)
if err != nil {
return nil, fmt.Errorf("redis.Dial: %v", err)
}
return c, err
},
}, nil
}
// visitCount increments the visit count on the Redis instance
// and prints the current count in the HTTP response.
func visitCount(w http.ResponseWriter, r *http.Request) {
// Initialize connection pool on first invocation
if redisPool == nil {
// Pre-declare err to avoid shadowing redisPool
var err error
redisPool, err = initializeRedis()
if err != nil {
log.Printf("initializeRedis: %v", err)
http.Error(w, "Error initializing connection pool", http.StatusInternalServerError)
return
}
}
conn := redisPool.Get()
defer conn.Close()
counter, err := redis.Int(conn.Do("INCR", "visits"))
if err != nil {
log.Printf("redis.Int: %v", err)
http.Error(w, "Error incrementing visit count", http.StatusInternalServerError)
return
}
fmt.Fprintf(w, "Visit count: %d", counter)
}
Node.js
const functions = require('@google-cloud/functions-framework');
const redis = require('redis');
const REDISHOST = process.env.REDISHOST || 'localhost';
const REDISPORT = process.env.REDISPORT || 6379;
const redisClient = redis.createClient({
socket: {
host: REDISHOST,
port: REDISPORT,
},
});
redisClient.on('error', err => console.error('ERR:REDIS:', err));
redisClient.connect();
functions.http('visitCount', async (req, res) => {
try {
const response = await redisClient.incr('visits');
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end(`Visit count: ${response}`);
} catch (err) {
console.log(err);
res.status(500).send(err.message);
}
});
Python
import os
import functions_framework
import redis
redis_host = os.environ.get('REDISHOST', 'localhost')
redis_port = int(os.environ.get('REDISPORT', 6379))
redis_client = redis.StrictRedis(host=redis_host, port=redis_port)
@functions_framework.http
def visit_count(request):
value = redis_client.incr('visits', 1)
return 'Visit count: {}'.format(value)
다음 단계
다른 Google Cloud 제품의 코드 샘플을 검색하고 필터링하려면 Google Cloud 샘플 브라우저를 참조하세요.