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?
Kendi hızınızda ortam kurulumu
Henüz bir Google Hesabınız (Gmail veya Google Apps) yoksa oluşturmanız gerekir. Google Cloud Platform Console'da (console.cloud.google.com) oturum açın ve yeni bir proje oluşturun:
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 size birkaç dolardan fazla maliyet getirmemelidir. Ancak daha fazla kaynak kullanmaya karar verirseniz veya kaynakları çalışır durumda bırakırsanız maliyet daha yüksek olabilir (bu belgenin sonundaki "temizleme" bölümüne bakın).
Google Cloud Platform'un yeni kullanıcıları 300 ABD doları değerindeki ücretsiz deneme sürümünden yararlanabilir.
Google Cloud Shell'i etkinleştir
GCP Console'da sağ üstteki araç çubuğunda Cloud Shell simgesini tıklayın:
Ardından "Cloud Shell'i başlat"ı tıklayın:
Ortamın sağlanması ve bağlantının kurulması yalnızca birkaç saniye sürer:
Bu sanal makine, ihtiyaç duyacağınız tüm geliştirme araçlarını içerir. 5 GB boyutunda kalıcı bir ana dizin sunar ve Google Cloud üzerinde çalışır. Bu sayede ağ performansı ve kimlik doğrulama önemli ölçüde iyileştirilir. Bu laboratuvardaki çalışmalarınızın neredeyse tamamını yalnızca bir tarayıcı veya Google Chromebook'unuzla yapabilirsiniz.
Cloud Shell'e bağlandıktan sonra kimliğinizin zaten doğrulandığını ve projenin PROJECT_ID'nize göre ayarlandığını görürsünüz.
Kimliğinizin doğrulandığını onaylamak için Cloud Shell'de aşağıdaki komutu çalıştırın:
gcloud auth list
Komut çıkışı
Credentialed accounts: - <myaccount>@<mydomain>.com (active)
gcloud config list project
Komut çıkışı
[core] project = <PROJECT_ID>
Değilse aşağıdaki komutla ayarlayabilirsiniz:
gcloud config set project <PROJECT_ID>
Komut çıkışı
Updated property [core/project].
Cloud Shell'i başlatın.
Cloud Shell başlatıldıktan sonra yeni bir Memorystore örneği oluşturmak için komut satırını kullanabilirsiniz.
$ gcloud redis instances create myinstance --size=1 --region=us-central1
Memorystore API etkinleştirilmemişse etkinleştirmek isteyip istemediğiniz sorulur. y yanıtını verin.
API [redis.googleapis.com] not enabled on project [204466653457]. Would you like to enable and retry (this will take a few minutes)? (y/N)? y Enabling service redis.googleapis.com on project 204166153457... Waiting for async operation operations/tmo-acf.c8909997-1b4e-1a62-b6f5-7da75cce1416 to complete... Operation finished successfully. The following command can describe the Operation details: gcloud services operations describe operations/tmo-acf.c8909997-1b4e-1a62-b6f5-7da75cce1416 Create request issued for: [myinstance] Waiting for operation [operation-1538645026454-57763b937ad39-2564ab37-3fea7701] to complete...done. Created instance [myinstance].
İşlem tamamlandıktan sonra örneğiniz kullanıma hazır olur.
Aşağıdaki komutu çalıştırarak örneğin redis host ip-address değerini 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 Depolama > Memorystore'a giderseniz örneğinizi "hazır" durumunda görebilirsiniz :
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.
Compute > Compute Engine > VM instances'a (Sanal makine örnekleri) gidip Connect (Bağlan) sütununda SSH'ı tıklayarak SSH üzerinden örneğinize bağlanın:
Sanal makine örneği kabuğunda (Cloud Shell değil) OpenJDK, Maven ve telnet'i yükleyin:
$ sudo apt-get install openjdk-8-jdk-headless maven telnet
Yüklemenin tamamlanmasını bekleyin ve ardından sonraki adıma geçin.
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 \ | 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
Aşağıdaki satırı, Memorystore for Redis IP adresinizle (birkaç adım önceki) birlikte ekleyin:
spring.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, ilerleyen bölümlerdeki kod laboratuvarında göreceksiniz.
Ayrıca, Spring Boot uygulama sınıfında önbelleğe almayı etkinleştirmeniz gerekir.
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 ek açıklama 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); } }
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ülüp sonucun önbelleğe yerleştirilmesidir. Sonraki her çağrı, sonucu doğrudan önbellekten döndürür.
Uygulamanın tam olarak neyi önbelleğe aldığını görebilirsiniz. Önceki adımda kullandığınız terminalden telnet kullanarak Redis için Memorystore ana makinesine bağlanın:
$ telnet <memorystore-host-ip-address> 6379
Önbellek anahtarlarının listesini görmek için aşağıdaki komutu kullanın:
KEYS * hello::bob
Gördüğünüz gibi, anahtar için ön ek olarak önbellek adı, ikinci bölüm olarak ise parametre değeri kullanılır.
Değeri almak için GET
komutunu kullanın:
$ GET hello::bob Hello bob!
Çıkmak için QUIT
komutunu kullanın.
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
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
- Spring Boot Caching
- Memorystore
- Google Cloud'daki Spring projesi
- Google Cloud GitHub deposunda Spring
- Google Cloud'da Java
Lisans
Bu çalışma, Creative Commons Attribution 2.0 Genel Amaçlı Lisans ile lisans altına alınmıştır.