Twitter Youtube Github
Burak Kutbay'ın Kişisel Blog'u |

Type and hit Enter to search

  • Eğitim
  • Quarkus
  • Spring Cloud
  • Spring Boot
  • Spring JDBC Template
  • Spring MVC
  • RabbitMQ
  • Hibernate
  • Java Server Pages
  • Java Server Faces
  • PrimeFaces
  • Servlet
  • JDBC
  • JSTL
  • Java 8
  • / Diğer
    • Ünlü Bilişimciler
    • C Sharp
    • Kütüphane
    • Makale
RedisSpring Boot

Spring Boot Data Redis Nedir? Distributed Cache Kullanımı

Paylaş

Spring Boot Dersleri‘ne devam ediyorum.

İçindekiler

  • Cache Neden İhtiyaç Duyarız?
  • Cache Çeşitleri
    • In-Memory-Cache
    • Distributed Cache
  • Redis Nedir?
  • Docker ile Redis Kurulumu
  • Spring Data Redis Uygulama Örneği
    • Test
  • Spring Data Redis Entegrasyonu
    • application.yml config
    • Spring Boot Cache Anotasyonları?
      • @EnableCaching
      • @Cacheable
      • @CachePut
      • @CacheEvict

Cache Neden İhtiyaç Duyarız?

Verilerimizi önbelleğe alarak veritabanına gidecek olan sorgulama işlemlerini en aza indirerek hem kaynak kullanımını azaltıyoruz hem de performans artışı sağlayabilmekteyiz. Değişmeyecek verilerimizde cevap hep aynı kalacağı için veritabanına gitme maaliyetini en aza indiriyoruz.

Cache Çeşitleri

In-Memory-Cache

Önceki derslerde In-Memory-Cache yöntemi ile bir örnek yapmıştım. Aşağıdaki linkten ulaşabilirsiniz.

İlgini Çekebilir: Spring Cache Nasıl Yapılır?

Distributed Cache

Distributed Cache ise cache mekanızmasını dağıtık yapıda kullanmak istediğimizde ortaya çıkan bir teknolojidir. Distributed Cache için projemize bu dağıtık yapıyı yönetebilmek için bir ara teknolojiye ihtiyaç vardır. Bunlardan en bilinenler Redis ve Hazelcast diyebilirim.

Redis Nedir?

Redis key-value nosql veritabanıdır ve genellikle caching, session yönetimi, pub/sub, message broker amacıyla kullanılmaktadır.

Docker ile Redis Kurulumu

Redis’i docker üzerinden ayağa kaldıralım. Aşağıdaki adımları yapalım. Öncelikle docker run diyerek redisi indirip bilgisayarımızda 6379 portundan çalıştırmış oluyoruz.

docker run --name my-redis -p 6379:6379 --restart always --detach redisCode language: CSS (css)

Spring Data Redis Uygulama Örneği

Öğrencilerin CRUD işlemlerini yapan basit bir Spring Boot Uygulaması yapalım.

Bağımlılıklarımız aşağıdaki gibi olacak.

  • spring-boot-starter-data-jpa
  • spring-boot-starter-data-redis
  • spring-boot-starter-web
  • h2
  • lombok

Student Entity

@Table
@Entity
@Data
public class Student {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;
    private String nameSurname;
    private int schoolNumber;
    private String branch;
}Code language: PHP (php)

Student Repository Oluşturalım.

@Repository
public interface StudentRepository extends CrudRepository<Student,Integer> {
}Code language: PHP (php)

Student Service kısmını oluşturalım.

@Service
@AllArgsConstructor
public class StudentService {

    private StudentRepository studentRepository;

    public void saveStudent(Student student) {
        studentRepository.save(student);
    }

    public void updateStudent(Student student) {
        studentRepository.save(student);
    }

    public void deleteStudent(Integer id) {
        studentRepository.deleteById(id);
    }

    public Student findById(Integer id) {
        return studentRepository.findById(id).get();
    }

    public List<Student> getAllStudent() {
        List<Student> books = new ArrayList<Student>();
        studentRepository.findAll().forEach(student -> books.add(student));
        return books;
    }
}
Code language: PHP (php)

Student Controllerimizi oluşturalım. Bu controller bir rest api olacak.

@RestController
@AllArgsConstructor
public class StudentController {
    @Autowired
    private StudentService studentService;
    
    @GetMapping("/student")
    private List<Student> getAllStudent() {
        return studentService.getAllStudent();
    }

    @GetMapping("/student/{id}")
    private Student getStudent(@PathVariable("id") Integer id) {
        return studentService.findById(id);
    }

    @DeleteMapping("/student/{id}")
    private void deleteStudent(@PathVariable("id") Integer id) {
        studentService.deleteStudent(id);
    }

    @PostMapping("/student")
    private void saveStudent(@RequestBody Student student) {
        studentService.saveStudent(student);
    }

    @PostMapping("/student/update")
    private void updateStudent(@RequestBody Student student) {
        studentService.updateStudent(student);
    }
}Code language: CSS (css)

Test

Postman üstünden işlmlerimizi gerçekleştirelim. Öncelikle bir kayıt oluşturalım.

Spring Boot CRUD Example

Listeyelim

Spring Boot List Example

Listeleme örneğinde uygulama konsoluna baktığımızda ise listeleme işlemi için veritabanı sorgusu yapıldığını görüyoruz.

Hibernate: 
select s1_0.id,s1_0.branch,s1_0.name_surname,s1_0.school_number 
from student s1_0Code language: CSS (css)

Her sorgu işlemi yaptığımızda veritabanı sorgusu veritabanına gitmektedir.

Spring Data Redis Entegrasyonu

Bu sorgulama işlemlerini en aza indirmek için Redis sayesinde cache işlemlerini projeye ekleyeceğiz.

Projemizde Cache kullanacağımız için aktif etmemiz gerekiyor bunun için;

@SpringBootApplication
@EnableCaching
public class SpringDataRedisProjectApplication {
	public static void main(String[] args) {
		SpringApplication.run(SpringDataRedisProjectApplication.class, args);
	}
}
Code language: PHP (php)

application.yml config

Projemizin redis’e bağlanamabilmesi gerekli cache tipini, hostu ve portunu application.yaml dosyasına belirtiyoruz.

spring.cache.type=redis
spring.data.redis.host=localhost
spring.data.redis.port=6379


Spring Boot Cache Anotasyonları?

@EnableCaching

Spring Boot uygulamasında Cache özelliğini projemizde etkinleştirmek için kullanacağımız bir anotasyondur.

@Cacheable

İlgili metodun üzerine konan bu anotasyon sayesinde tanımlanmış bir cache varsa bu değeri cache’den alabilmek için kullanılır.

@Cacheable(value = "student", key = "#id")
@GetMapping("/student/{id}")
public Student getStudent(@PathVariable("id") Integer id) {
  return studentService.findById(id);
}
Code language: Java (java)

İlk sorgulamamızı yaptıktan sonra veritabanına sorgulama işlemini görürüz ve bu ilk sorgulama sayesinde redis cache alır ve sonraki sorgulamalardan sonra veritabanına uğramaz.

blank
Spring Data Redis Listemeleme

@CachePut

Cache’de bulunan bir değeri yenilemek için kullanılır. Verilerimizde bir güncelleme geldiği zaman cache’deki bu değerinde güncellenmesini sağlıyoruz. Eğer bu işlemi güncelleme metotunda yazmaksak redisimizdeki verinin güncel hali olmaz.

@CachePut(value = "student", key = "#student.id")
@PostMapping("/student/update")
public void updateStudent(@RequestBody Student student) {
  studentService.updateStudent(student);
}
Code language: Java (java)

@CacheEvict

Verimizi sildiğimizde cache’den de silinmesini sağlamak için bu anotasyonu kullanıyoruz.

@CacheEvict(value = "student", key="#id")
@DeleteMapping("/student/{id}")
public void deleteStudent(@PathVariable("id") Integer id) {
  studentService.deleteStudent(id);
}
Code language: Java (java)

Redis ile Spring Boot Data Redis pojesi ile Cache mekanizmasını bu şekilde kolaylıkla kullanabilmekteyiz ve veritabanı ihtiyacını en aza indiriyoruz.


Projenin Kaynak Kodlarına Ulaş
Önceki Ders: Spring Boot Projelerinde Tomcat Yerine Jetty Kullanmak
Spring Boot Dersleri
Sonraki Ders: Spring Boot Interceptor Nedir

Tags:

redis kullanımıspring boot derslerispring data redis

Paylaş

Diğer Yazılar

blank
Previous

MongoDB Nedir?

Spring Data MongoDB Dersleri Uygulama Örnekleri
Next

MongoDB & MongoDB Express Docker Compose Kurulumu

Next
Spring Data MongoDB Dersleri Uygulama Örnekleri
10 Nisan 2023

MongoDB & MongoDB Express Docker Compose Kurulumu

Previews
12 Mart 2023

MongoDB Nedir?

blank

No Comment! Be the first one.

Bir cevap yazın Cevabı iptal et

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

İlgini Çekebilir

Spring Boot Dersleri Content Negotiation Uygulama Örneği

Spring Boot Content Negotiation XML – JSON Uygulama Örneği

Spring Boot Interceptor Nedir Kullanım Uygulama Örneği

Spring Boot Interceptor Nedir? Uygulama Örneği

Spring Boot Dersleri

Spring Boot Projelerinde Tomcat Yerine Jetty Kullanmak

Spring Boot Dersleri Rest Template

Spring Boot RestTemplate Nedir ve Kullanımı

Burak Kutbay'ın Kişisel Blog'u |

© 2008 - ∞, Her hakkı saklıdır.

Link

  • Hakkımda
  • İletişim
  • Arşiv

Kategori

Cloud
Amazon Web Services
Vue.js
Gradle
Node.js
Android
Struts
Röportaj
Spring Cloud Stream
Redis
Debezium
XCode
Video
Spring Native
Mikroservis Mimarisi
iPhone Uygulama Geliştirme
MongoDB
PostgreSQL
Spring Security
JPA
Objective C
Spring Data
Apache Kafka
Git
Servlet
Yaptığım Projeler
Maven
Design Patterns
DevOps
Linux
JDBC
RabbitMQ
PrimeFaces
Spring Jdbc Template
Spring
Google
Manset
Spring MVC
Spring Cloud
OCA Java SE 8
Spring Core
Quarkus
Microsoft
Veritabanı
Java SE
Tanıyalım
Hibernate
Teknoloji
Okuduğum Kitaplar
Java Server Faces
Yazılım Mühendisliği
C Sharp
Spring Boot
Java
Günlüğüm
Java Server Page
Makale

Takip Et

Twitter Youtube Github
  • Eğitim
  • Quarkus
  • Spring Cloud
  • Spring Boot
  • Spring JDBC Template
  • Spring MVC
  • RabbitMQ
  • Hibernate
  • Java Server Pages
  • Java Server Faces
  • PrimeFaces
  • Servlet
  • JDBC
  • JSTL
  • Java 8
  • / Diğer
    • Ünlü Bilişimciler
    • C Sharp
    • Kütüphane
    • Makale