Spring Boot와 Redis를 사용한 데이터 저장 및 관리

2024. 5. 3. 13:35·개발중/Spring Boot & Redis
728x90
반응형

 

Redis는 빠른 오픈 소스 인-메모리 키-값 데이터 스토어로, 다양한 데이터 구조를 지원합니다. 

Spring Boot 애플리케이션에서 Redis를 사용하면, 데이터 캐싱, 메시지 브로커 등 다양한 방식으로 활용할 수 있습니다. 

 

이 글에서는 Spring Boot를 이용하여 Redis 데이터 구조를 어떻게 조작하는지 보여드립니다.

 

설정 사항

먼저, Redis 서버가 설치되어 있어야 하며, application.properties 파일에 다음과 같이 Redis 서버 접속 정보를 설정해야 합니다:

spring.redis.host=localhost
spring.redis.port=6379

 

    •  

Redis 데이터 유형 및 조작

 

String

  • Redis CLI
127.0.0.1:6379> SET key value
OK
127.0.0.1:6379> GET key
"value"
127.0.0.1:6379> DEL key
(integer) 1
127.0.0.1:6379> GET key
(nil)

 

 

  • Spring Boot에서의 사용법
@Component
public class RedisTemplateString {

    @Autowired
    private RedisTemplate<String, String> redisTemplate;

    /**
     * Save String
     */
    public void saveStringType(String key, String value) {
        ValueOperations<String, String> stringStringValueOperations = redisTemplate.opsForValue();
        stringStringValueOperations.set(key, value);
    }

    /**
     * Read String
     */
    public String getStringType(String key) {
        ValueOperations<String, String> stringStringValueOperations = redisTemplate.opsForValue();
        return stringStringValueOperations.get(key);
    }

    /**
     * Delete String
     */
    public void deleteStringType(String key) {
        redisTemplate.delete(key);
    }
}

 

Map

  • Redis CLI
127.0.0.1:6379> HSET key field1 value1 field2 value2
(integer) 2
127.0.0.1:6379> HGETALL key
1) "field1"
2) "value1"
3) "field2"
4) "value2"
127.0.0.1:6379> DEL key
(integer) 1
127.0.0.1:6379> HGETALL key
(empty array)

 

 

  • Spring Boot에서의 사용법
@Component
public class HashOperationsMap {

    @Autowired
    private RedisTemplate<String, String> redisTemplate;
    private HashOperations<String, String, String> hashOperations;

    @PostConstruct
    private void init() {
        hashOperations = redisTemplate.opsForHash();
    }

    /**
     * Save Map<String, String>
     */
    public void saveMap(String key, Map<String, String> map) {
        hashOperations.putAll(key, map);
    }

    /**
     * Read Map<String, String>
     */
    public Map<String, String> getMap(String key) {
        return hashOperations.entries(key);
    }

    /**
     * Delete Map<String, String>
     */
    public void deleteMap(String key){
        hashOperations.getOperations().delete(key);
    }
}

 

List

 

  • Redis CLI
127.0.0.1:6379> RPUSH key value1 value2
(integer) 2
127.0.0.1:6379> LPUSH key value3 value4
(integer) 4
127.0.0.1:6379> LRANGE key 0 -1
1) "value4"
2) "value3"
3) "value1"
4) "value2"
127.0.0.1:6379> DEL key
(integer) 1
127.0.0.1:6379> LRANGE key 0 -1
(empty array)

 

  • Spring Boot에서의 사용법
@Component
public class RedisTemplateList {

    @Autowired
    private RedisTemplate<String, String> redisTemplate;

    /**
     * Save List<String> : Right Push
     */
    public void saveListRightPush(String key, List<String> list) {
        ListOperations<String, String> listOps = redisTemplate.opsForList();
        list.forEach(word -> listOps.rightPush(key, word));
    }

    /**
     * Read List<String> : Left Push
     */
    public void saveListLeftPush(String key, List<String> list) {
        ListOperations<String, String> listOps = redisTemplate.opsForList();
        list.forEach(word -> listOps.leftPush(key, word));
    }

    /**
     * Read List<String>
     */
    public List<String> getList(String key) {
        ListOperations<String, String> listOps = redisTemplate.opsForList();
        return listOps.range(key, 0, -1);
    }

    /**
     * Delete List<String>
     */
    public void deleteList(String key) {
        redisTemplate.delete(key);
    }
}

 

 

 

Set

 

  • Redis CLI
127.0.0.1:6379> SADD key value1 value2
(integer) 2
127.0.0.1:6379> SMEMBERS key
1) "value1"
2) "value2"
127.0.0.1:6379> SADD key value1 value3
(integer) 1
127.0.0.1:6379> SMEMBERS key
1) "value1"
2) "value2"
3) "value3"
127.0.0.1:6379> SREM key value2
(integer) 1
127.0.0.1:6379> SMEMBERS key
1) "value1"
2) "value3"
127.0.0.1:6379> SCARD key
(integer) 2

 

  • Spring Boot에서의 사용법
@Component
public class RedisTemplateSets {

    @Autowired
    private RedisTemplate<String, String> redisTemplate;
    private SetOperations<String, String> setOperations;

    @PostConstruct
    private void init() {
        this.setOperations = redisTemplate.opsForSet();
    }

    /**
     * Save Set<String>
     */
    public void addToSet(String key, String... values) {
        setOperations.add(key, values);
    }

    /**
     * Read Set<String>
     */
    public Set<String> getMembers(String key) {
        return setOperations.members(key);
    }

    /**
     * Delete Set<String>
     */
    public void removeFromSet(String key, String... values) {
        setOperations.remove(key, (Object[])values);
    }

    /**
     * Read Set Size
     */
    public Long setSize(String key) {
        return setOperations.size(key);
    }
}
728x90
반응형
저작자표시 (새창열림)

'개발중 > Spring Boot & Redis' 카테고리의 다른 글

Spring Boot 3와 Redis: 로컬 도커 환경에서 시작하기  (0) 2024.05.08
Spring Boot 3.x 및 Security 6.x를 이용한 중복 로그인 관리 방법  (0) 2024.05.03
Spring Boot 2.x.x에서 3.x.x로 업그레이드 후 Redis에 Java 객체 저장 문제 발생  (0) 2024.04.16
Spring boot 3.2.2 & Redis & GenericJackson2JsonRedisSerializer  (0) 2024.04.15
클래스 변경과 직렬화: Spring Redis 환경에서의 serialVersionUID 관리  (0) 2023.11.17
'개발중/Spring Boot & Redis' 카테고리의 다른 글
  • Spring Boot 3와 Redis: 로컬 도커 환경에서 시작하기
  • Spring Boot 3.x 및 Security 6.x를 이용한 중복 로그인 관리 방법
  • Spring Boot 2.x.x에서 3.x.x로 업그레이드 후 Redis에 Java 객체 저장 문제 발생
  • Spring boot 3.2.2 & Redis & GenericJackson2JsonRedisSerializer
Binsoo
Binsoo
내 트러블 슈팅
  • Binsoo
    정수빈 기술블로그임.
    Binsoo
  • 전체
    오늘
    어제
    • 빈수 개발자 개발 일기 (949)
      • 개발중 (635)
        • Spring Boot (95)
        • Spring Security (2)
        • Spring Batch (6)
        • Spring Boot & Redis (13)
        • Java Persistence API (JPA) (28)
        • Web (42)
        • Rest Api (7)
        • Spring Concurrency Control (3)
        • Redis (8)
        • Kubernetes (k8s) (4)
        • MYSQL (35)
        • AirFlow (15)
        • Docker (2)
        • Git (22)
        • Linux (9)
        • JSON Web Tokens (JWT) (4)
        • Troubleshooting (88)
        • Swagger (0)
        • Vue.js (52)
        • Java (74)
        • html (12)
        • C (5)
        • jQuery (15)
        • JavaServer Pages (JSP) (17)
        • Arduino (1)
        • JavaScript (35)
        • Amazon Web Services (AWS) (11)
        • Algorithm (9)
        • 참고 기능 (18)
        • mongo (2)
      • PROJECT (27)
        • 스프링부트+JPA+몽고 API 개발 (3)
        • MINI (2)
        • 게시판 (3)
        • vue 프로젝트 (1)
        • JPA 사이드 프로젝트 기록 (17)
      • TEAM STUDY (156)
        • 가상 면접 사례로 배우는 대규모 시스템 설계 기초 (8)
        • 한 권으로 읽는 컴퓨터 구조와 프로그래밍 (12)
        • NAVER DEVELOPER (4)
        • LINUX (23)
        • PYTHON (19)
        • SERVER (8)
        • 알고리즘 코딩 테스트 스터디 (31)
        • 쿠버네티스 (40)
        • 대세는 쿠버네티스 [초급~중급] (11)
      • BOOK (0)
      • 자격증 (61)
        • 리눅스 1급 - 필기 기록 (19)
        • 네트워크 관리사 (2)
        • 네트워크 관리사 2급 - 실기 기록 (21)
        • 네트워크 관리사 2급 - 필기 기록 (16)
        • 정보처리 (2)
      • 직장인 대학원 (28)
        • 기록 (3)
        • 캐글 스터디 (3)
        • R (12)
        • MLOps (10)
      • 논문 (5)
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    알고리즘
    BackendDevelopment
    네트워크 관리사 학점
    리눅스 마스터 1급 정리
    파이썬 알고리즘
    리눅스 1급 요약
    REST API
    네트워크 관리사
    쿠버네티스 스터디
    redis
    쿠버네티스
    springboot
    스프링
    java
    네트워크 관리사 자격증
    리눅스 마스터
    네트워크 관리사 2급 실기
    docker
    리눅스 마스터 요약
    네트워크 관리사 요약
    jpa
    파이썬
    리눅스 마스터 1급 요약
    Git 저장소
    git
    네트워크 관리사 2급
    리눅스 마스터 1급
    네트워크 관리사 실기
    Spring
    VUE
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
Binsoo
Spring Boot와 Redis를 사용한 데이터 저장 및 관리
상단으로

티스토리툴바