1. Genel Bakış
Redis için Memorystore, Google Cloud için 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 düzeyde ölçeklenebilir, kullanılabilir ve güvenli Redis hizmetinden yararlanarak olağanüstü performans elde edebilir. Spring Boot uygulamalarının performansını artırmak için veri önbelleğe alma işlemi için arka uç olarak kullanılabilir. Codelab'de bu özelliğin nasıl ayarlanacağı açıklanmaktadır.
Neler öğreneceksiniz?
- Memorystore'u Spring Boot uygulaması için önbellek arka ucu olarak kullanma.
Gerekenler
- Bir Google Cloud projesi
- Google Chrome gibi bir tarayıcı
- Vim, Emacs ve GNU Nano gibi standart Linux metin düzenleyicileri hakkında bilgi
Codelab'i nasıl kullanacaksınız?
Google Cloud hizmetleriyle ilgili deneyiminizi nasıl değerlendirirsiniz?
2. Kurulum ve Gereksinimler
Kendi hızınızda ortam kurulumu
- Cloud Console'da oturum açıp 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.)
Tüm Google Cloud projelerinde benzersiz bir ad olan proje kimliğini unutmayın (yukarıdaki ad zaten alınmış ve size uygun olmayacaktır!). Bu kod laboratuvarın ilerleyen bölümlerinde PROJECT_ID
olarak adlandırılacaktır.
- Sonraki adımda, Google Cloud kaynaklarını kullanmak için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir.
Bu codelab'i çalıştırmanın maliyeti, yüksek değildir. "Temizleme" bölümündeki talimatları izlediğinizden emin olun. bölümünde, bu eğiticinin dışında faturalandırmayla karşılaşmamanız için kaynakları nasıl kapatacağınız konusunda tavsiyelerde bulunuyoruz. Yeni Google Cloud kullanıcıları 300 ABD doları ücretsiz deneme programından yararlanabilir.
Cloud Shell'i etkinleştirme
- Cloud Console'da, Cloud Shell'i etkinleştir simgesini tıklayın.
Cloud Shell'i daha önce hiç çalıştırmadıysanız ne olduğunu açıklayan bir ara ekran (ekranın alt kısmında) gösterilir. Bu durumda Devam'ı tıklayın (bunu bir daha görmezsiniz). Tek seferlik ekran şöyle görünür:
Temel hazırlık ve Cloud Shell'e bağlanmak yalnızca birkaç dakika sürer.
İhtiyacınız olan tüm geliştirme araçlarını bu sanal makinede bulabilirsiniz. 5 GB boyutunda kalıcı bir ana dizin sunar ve Google Cloud'da çalışarak ağ performansını ve kimlik doğrulamasını büyük ölçüde iyileştirir. Bu codelab'deki çalışmalarınızın tamamı olmasa bile büyük bir kısmı yalnızca bir tarayıcı veya Chromebook'unuzla yapılabilir.
Cloud Shell'e bağlandıktan sonra kimliğinizin doğrulandığını ve projenin proje kimliğinize ayarlandığını görürsünüz.
- Kimlik doğrulamanızın tamamlandığını onaylamak için Cloud Shell'de aşağıdaki 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>
Doğru değilse aşağıdaki 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 komut satırını kullanarak Memorystore API'yi etkinleştirin ve yeni bir Memorystore örneği oluşturun.
$ 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 hale gelir.
Aşağıdaki komutu çalıştırarak örneğin redis ana makine ip adresini alın. Daha sonra Spring Boot uygulamanızı yapılandırırken bu kodu tekrar kullanacaksınız.
$ gcloud redis instances describe myinstance --region=us-central1 \ | grep host host: 10.0.0.4
Google Cloud Console'da Veritabanları'na gidin > Memorystore > Redis olarak değiştirin. Örneğiniz "hazır" durumda olmalıdır durum :
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 hale gelir.
Aşağıdaki komutu kullanarak SSH üzerinden örneğinize bağlanın:
$ gcloud compute ssh instance-1 --zone us-central1-c
Alternatif olarak İşlem > Compute Engine > Sanal makine örnekleri ve Bağlan sütunundaki SSH'yi tıklayın:
Sanal makine (VM) örnek kabuğuna (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ı kurma
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 adresinizle (birkaç adımdan önce) aşağıdaki satırı ekleyin:
spring.data.redis.host=<memorystore-host-ip-address>
Bu satırdan sonra yeni bir satır ekleyin ve REST denetleyicisi Java sınıfı oluşturun:
$ nano src/main/java/com/example/demo/HelloWorldController.java
Dosyaya şu içeriği yerleştirin:
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 gösterir ve yolun bir bölümünü bir yöntem parametresiyle (@PathVariable
ek açıklamasıyla belirtildiği gibi) eşleştirir.
@Cacheable("hello")
ek açıklaması, yöntem yürütme işleminin önbelleğe alınması gerektiğini ve önbellek adının "hello
" olduğunu belirtir. Önbellek anahtarı olarak parametre değeriyle birlikte kullanılır. Daha sonra kod laboratuvarı için bir örnek göreceksiniz.
Sonra, Spring Boot uygulama sınıfında önbelleğe almayı etkinleştireceğiz. DemoApplication.java
öğesini düzenle:
$ nano src/main/java/com/example/demo/DemoApplication.java
org.springframework.cache.annotation.EnableCaching
dosyasını içe aktarın ve sınıfa bu ek açıklamayla 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ırma ve uç noktaya erişme
JAVA_HOME
uygulaması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, "bob
" parametresini ileterek /hello/
uç noktasına birden çok kez erişin girin.
$ 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
İlk istek beş saniye sürüyorken bir sonrakinin yöntemde Thread.sleep(5000)
çağrı olmasına rağmen çok daha hızlı olduğuna dikkat edin. Bunun nedeni, gerçek yöntemin yalnızca bir kez yürütülmesi ve sonucun önbelleğe alınmış olmasıdır. Sonraki her çağrı, sonucu doğrudan önbellekten döndürür.
7. Önbelleğe alınan nesneleri inceleme
Aslında uygulamanın tam olarak neyi önbelleğe aldığını görebilirsiniz. Önceki adımda kullandığınız terminalden redis-cli kullanarak Memorystore for Redis 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 ön ek, 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 Cloud Shell'den Compute Engine ve Memorystore örneklerini 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şturdunuz. Ayrıca, bir Spring Boot uygulaması sayesinde Memorystore'u Spring Boot önbelleğe alma özelliğiyle kullanacak şekilde 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.