1. Genel Bakış
Redis için Memorystore, Google Cloud'a yönelik tümüyle yönetilen bir Redis hizmetidir. Google Cloud'da çalışan uygulamalar, karmaşık Redis dağıtımlarını yönetme yükü olmadan yüksek oranda ölçeklenebilir, kullanılabilir ve güvenli Redis hizmetinden yararlanarak üstün performans elde edebilir. Spring Boot uygulamalarının performansını artırmak için veri önbelleğe alma işleminin arka ucu olarak kullanılabilir. Bu codelab'de, nasıl ayarlayacağınız açıklanmaktadır.
Neler öğreneceksiniz?
- Memorystore'u Spring Boot uygulaması için önbellek arka ucu olarak kullanma
Gerekenler
- Google Cloud projesi
- Google Chrome gibi bir tarayıcı
- Vim, Emacs ve GNU Nano gibi standart Linux metin düzenleyicileri hakkında bilgi sahibi olmanız gerekir.
Codelab'i nasıl kullanacaksınız?
Google Cloud hizmetleriyle ilgili deneyiminizi nasıl değerlendirirsiniz?
2. Kurulum ve Gereksinimler
Yönlendirmesiz ortam kurulumu
- Cloud Console'da oturum açın ve yeni bir proje oluşturun veya mevcut bir projeyi yeniden kullanın. (Gmail veya G Suite hesabınız yoksa hesap oluşturmanız gerekir.)
Proje kimliğini unutmayın. Bu kimlik, tüm Google Cloud projelerinde benzersiz bir addır (Yukarıdaki ad zaten alınmış olduğundan sizin için çalışmayacaktır). Bu codelab'in ilerleyen kısımlarında PROJECT_ID olarak adlandırılacaktır.
- Ardından, Google Cloud kaynaklarını kullanmak için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir.
Bu codelab'i tamamlamak neredeyse hiç maliyetli değildir. Bu eğitimin ötesinde faturalandırma ücreti alınmaması için kaynakları nasıl kapatacağınız konusunda size tavsiyelerde bulunan "Temizleme" bölümündeki talimatları uyguladığınızdan emin olun. Google Cloud'un yeni kullanıcıları 300 ABD doları değerinde ücretsiz deneme programından yararlanabilir.
Cloud Shell'i etkinleştirme
- Cloud Console'da Cloud Shell'i etkinleştir 'i
tıklayın.
Cloud Shell'i daha önce hiç başlatmadıysanız ne olduğunu açıklayan bir ara ekran (ekranın alt kısmı) gösterilir. Bu durumda Devam'ı tıkladığınızda bu ekranı bir daha görmezsiniz. Bu tek seferlik ekran aşağıdaki gibi görünür:
Cloud Shell'in temel hazırlığı ve bağlanması yalnızca birkaç dakikanızı alır.
Bu sanal makine, ihtiyaç duyacağınız tüm geliştirme araçlarını içerir. 5 GB boyutunda kalıcı bir ana dizin bulunur ve Google Cloud'da çalışır. Bu sayede ağ performansı ve kimlik doğrulama önemli ölçüde güçlenir. Bu codelab'deki çalışmalarınızın neredeyse tamamını yalnızca bir tarayıcı veya Chromebook'unuzla yapabilirsiniz.
Cloud Shell'e bağlandıktan sonra kimliğinizin doğrulandığını ve projenin, proje kimliğinize ayarlandığını görürsünüz.
- Kimliğinizin doğrulandığını onaylamak için Cloud Shell'de şu komutu çalıştırın:
gcloud auth list
Komut çıkışı
Credentialed Accounts
ACTIVE ACCOUNT
* <my_account>@<my_domain.com>
To set the active account, run:
$ gcloud config set account `ACCOUNT`
gcloud config list project
Komut çıkışı
[core] project = <PROJECT_ID>
Değilse şu komutla ayarlayabilirsiniz:
gcloud config set project <PROJECT_ID>
Komut çıkışı
Updated property [core/project].
3. Memorystore for Redis örneği oluşturma
Cloud Shell'i başlatın.
Cloud Shell başlatıldıktan sonra, Memorystore API'yi etkinleştirmek ve yeni bir Memorystore örneği oluşturmak için komut satırını kullanın.
$ gcloud services enable redis.googleapis.com $ gcloud redis instances create myinstance --size=1 --region=us-central1
İşlem tamamlandıktan sonra örneğiniz kullanıma hazır olur.
Aşağıdaki komutu çalıştırarak örneğin redis ana makine IP adresini alın. Bu kimliği daha sonra Spring Boot uygulamanızı yapılandırırken tekrar kullanacaksınız.
$ gcloud redis instances describe myinstance --region=us-central1 \ | grep host host: 10.0.0.4
Google Cloud Console'da Veritabanları > Memorystore > Redis'e gidin. Örneğiniz "hazır" durumunda olmalıdır :

4. Compute Engine örneği oluşturma
Aynı bölgede bir Compute Engine örneği oluşturun.
$ gcloud compute instances create instance-1 --zone us-central1-c
İşlem tamamlandıktan sonra örneğiniz kullanıma hazır olur.
Aşağıdaki komutu kullanarak SSH üzerinden örneğinize bağlanın:
$ gcloud compute ssh instance-1 --zone us-central1-c
Alternatif olarak Compute > Compute Engine > VM instances'a (Sanal makine örnekleri) gidin ve Bağlan sütununda SSH'ı tıklayın:

Sanal makine (VM) örneği kabuğunda (Cloud Shell değil) OpenJDK, Maven ve Redis araçlarını yükleyin:
$ sudo apt-get install openjdk-17-jdk-headless maven redis-tools
Yüklemenin tamamlanmasını bekleyin ve ardından sonraki adıma geçin.
5. Spring Boot uygulaması oluşturma
web, redis ve cache bağımlılıklarıyla yeni bir Spring Boot projesi oluşturun:
$ curl https://start.spring.io/starter.tgz \ -d dependencies=web,redis,cache -d language=java -d baseDir=cache-app \ -d type=maven-project \ | tar -xzvf - && cd cache-app
Uygulamayı, Redis ana makinesi için Memorystore örneğinin IP adresini kullanacak şekilde yapılandırmak üzere application.properties dosyasını düzenleyin.
$ nano src/main/resources/application.properties
Memorystore for Redis IP adresinizi (birkaç adım önceki) kullanarak aşağıdaki satırı ekleyin:
spring.data.redis.host=<memorystore-host-ip-address>
Bundan sonra yeni bir satır ekleyin ve bir REST denetleyicisi Java sınıfı oluşturun:
$ nano src/main/java/com/example/demo/HelloWorldController.java
Dosyaya aşağıdaki içeriği ekleyin:
package com.example.demo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloWorldController {
@Autowired
private StringRedisTemplate template;
@RequestMapping("/hello/{name}")
@Cacheable("hello")
public String hello(@PathVariable String name) throws InterruptedException {
Thread.sleep(5000);
return "Hello " + name;
}
}
@RequestMapping ek açıklaması, yöntemi bir HTTP uç noktası olarak kullanıma sunar ve yolun bir bölümünü bir yöntem parametresiyle eşler (@PathVariable ek açıklamasıyla belirtildiği gibi).
@Cacheable("hello") notu, yöntem yürütmenin önbelleğe alınması gerektiğini ve önbellek adının "hello" olduğunu gösterir. Önbellek anahtarı olarak parametre değeriyle birlikte kullanılır. Örneği kod laboratuvarının ilerleyen bölümlerinde göreceksiniz.
Ardından, Spring Boot uygulama sınıfında önbelleğe almayı etkinleştireceğiz. DemoApplication.java öğesini düzenleyin:
$ nano src/main/java/com/example/demo/DemoApplication.java
İçe aktarın org.springframework.cache.annotation.EnableCaching ve bu ek açıklamayla sınıfa not ekleyin. Sonuç şu şekilde görünmelidir:
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;
@SpringBootApplication
@EnableCaching
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
6. Uygulamayı çalıştırın ve uç noktaya erişin
JAVA_HOME cihazının doğru sürüme ayarlandığından emin olun:
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64/
Artık uygulamayı çalıştırmaya hazırsınız.
$ mvn spring-boot:run
Daha önce yaptığınız gibi örneğinize başka bir SSH bağlantısı açın. Yeni SSH penceresinde, /hello/ uç noktasına birden çok kez erişerek ad olarak "bob" değerini iletin.
$ time curl http://localhost:8080/hello/bob Hello bob! real 0m5.408s user 0m0.036s sys 0m0.009s $ time curl http://localhost:8080/hello/bob Hello bob! real 0m0.092s user 0m0.021s sys 0m0.027s
İsteğin ilk seferde beş saniye sürdüğünü, ancak yöntemde Thread.sleep(5000)invocation olmasına rağmen bir sonraki isteğin önemli ölçüde daha hızlı olduğunu fark edin. Bunun nedeni, gerçek yöntemin yalnızca bir kez yürütülmüş ve sonucun önbelleğe yerleştirilmiş olmasıdır. Sonraki her çağrı, sonucu doğrudan önbellekten döndürür.
7. Önbelleğe alınan nesneleri inceleme
Uygulamanın tam olarak neyi önbelleğe aldığını görebilirsiniz. Önceki adımda kullandığınız terminalden redis-cli kullanarak Redis için Memorystore ana makinesine bağlanın:
$ redis-cli -h <memorystore-host-ip-address>
Önbellek anahtarlarının listesini görmek için aşağıdaki komutu kullanın:
:6379> KEYS * 1) "hello::bob"
Gördüğünüz gibi, önbellek adı anahtar için önek olarak, parametre değeri ise ikinci bölüm olarak kullanılır.
Değeri almak için GET komutunu kullanın:
:6379> GET hello::bob Hello bob!
Çıkmak için exit komutunu kullanın.
8. Temizleme
Temizlemek için Compute Engine ve Memorystore örneklerini Cloud Shell'den silin.
Compute örneğini silin:
$ gcloud compute instances delete instance-1 --zone us-central1-c
Memorystore for Redis örneğini silin:
$ gcloud redis instances delete myinstance --region=us-central1
9. Tebrikler!
Redis için Memorystore ve bir Compute Engine örneği oluşturmuş olmanız gerekir. Ayrıca, Spring Boot önbelleğe alma ile Memorystore'u kullanmak için bir Spring Boot uygulaması yapılandırdınız.
Daha Fazla Bilgi
Lisans
Bu çalışma, Creative Commons Attribution 2.0 Genel Amaçlı Lisans ile lisans altına alınmıştır.