docker로 redis 설치 및 redis 기본적인 명령어를 알아보자
반응형

안녕하세요 😉

유유자적한 개발자 유로띠 입니다 😀

 

 

👏👏👏👏

 

 

 

 

이번 포스팅에서는

✅ Redis란?

✅ docker Redis 설치

✅ Redis 기본 명령어

✅  Spring boot에서 Redis 테스트

에 대해서 알아보겠습니다

 

 

🎉 REDIS


Redis 란

 

REmote DIctionary Server의 약자로

키-값 기반의 인 메모리 데이터 구조 저장소입니다

한 가지씩 살펴보겠습니다 👀

 

 

✅ 키-값 기반

비 관계형 데이터베이스 유형이며, 키를 사용하여 저장되고 검색되며 이를 통해 저장소에서 빠르게 찾을 수 있습니다.

 

✅ 인 메모리 데이터 저장소

Mysql, PostgreSQL, Oracle 등 대부분의 데이터 베이스는 디스크 또는 SSD에 저장하지만 모든 Redis는 서버의 주 메모리에 저장됩니다. 정보의 처리나 조회를 위해 디스크까지 왕복해야 하는 다른 데이터베이스와 달리 Redis와 같은 인 메모리 데이터 저장소는 이러한 단점이 없기 때문에 더 많은 작업을 처리하고 더 빠른 응답 시간을 지원할 수 있습니다.

 

그렇다면 Redis는 어떠한 특징들이 있을까요? 🧐

 

✅ 다양한 데이터 구조(Collection)

아래와 같은 7가지의 데이터 구조를 제공합니다

 

strings

키와 연결할 수 있는 가장 간단한 유형의 값으로 키-값 구조입니다. 값은 최대 512MB보다 클 수 없습니다.

hashes

값의 목록을 저장하는 구조입니다.

lists

순서가 유지되는 문자열 모음입니다.

sets

정렬되지 않은 문자열 모음입니다. 중복을 허용하지 않습니다.

sorted sets

값을 기준으로 순서가 정렬된 세트

bitmaps

실제 데이터 유형이 아닌 문자열 유형에 정의된 비트 지향 연산의 집합

hyperLogLogs(HLL)

데이터 세트 내 고유 항목을 추정하리 위한 확률적 데이터 구조

 

✅ 싱글 스레드

Redis는 싱글 스레드 형식의 Event Loop 방식이며,  I/O Multiplexing을 통해 처리됩니다.

 

 

 

 


📢 Redis 설치하기

사실 설치는 너무 간단하지만

docker 기반의 redis를 설치해 보도록 하겠습니다.

 

 

✅  redis 설치

 

redis 이미지를 다운받습니다. 👍

$ docker pull redis

docker 기반의 redis 설치가 완료되었습니다.

redis를 기동해 보도록 하겠습니다.

 

✅  redis 실행

 

redis는 6379를 기본 포트로 사용합니다.

$ sudo docker run -p 6379:6379 redis

 

✅  redis 접속

 

redis에 접속하기 전에 redis가 설치된 docker 컨테이너 내부로 접속합니다.

 

$ docker exec -it redis /bin/bash

 

💡 참고

만약 아래와 같은 에러가 발생한다면 다음과 같이 접속하시면 됩니다.

OCI runtime exec failed: exec failed: container_linux.go:380: starting container process caused: exec: "/bin/bash": stat /bin/bash: no such file or directory: unknown
$ docker exec -it redis /bin/sh

 

 

컨테이너 내부로 접속하였고 redis에 접속해 보겠습니다.

redis-cli 명령어를 이용하여 redis에 접속합니다.

접속이 완료되면 IP:port > 프롬프트로 변경됩니다.

 

/data# redis-cli

127.0.0.1:6379>

 

 

✅  redis 버전 확인

 

info 명령어를 사용하면 다양한 정보를 알 수 있으며, redis version도 확인 가능합니다.

127.0.0.1:6379> info
# Server
redis_version:4.0.14

 


📢 Redis 기본 명령어

앞서 소개한 redis의 데이터 구조 중 strings, list, set의 기본 명령어에 대해서 알아봅시다.

 

 

✅  strings

키-값 구조로 데이터를 저장하고 조회해보도록 하겠습니다.

set 명령어를 이용하여 key - value를 저장합니다.

get 명령어를 이용하여 key에 해당하는 value를 조회합니다.

del 명령어를 이용하여 key를 삭제합니다.

 

✅  list

순서가 유지되고 중복을 허용하는 문자열 모음입니다.

 

lpush:  [ lpush key value ]

left push이며 왼쪽부터 즉, index 0부터 데이터를 저장합니다.

 

lpop:  [ lpop key ]

left pop이며, list의 index 0 부터 데이터를 추출합니다.

 

rpush: [ rpush key value ]

right push이며 오른쪽부터 즉, index last부터 데이터를 저장합니다.

 

rpop:  [ rpop key ]

right pop이며, list의 index last 부터 데이터를 추출합니다.

 

lrange: [ lrange key start end ]

list의 데이터를 start부터 end까지의 데이터를 추출합니다.

lrange에서 end를 -1로 선언하면 해당 list의 데이터를 전부 추출합니다.

 

 

✅  set

정렬되지 않고 순서가 없는 문자열 모음입니다.

set에서는 value를 member로 표시합니다.

 

sadd: [ sadd key member ]

set의 key에  member를 추가합니다.

 

srem: [ srem key  member]

set의 key에 member를 삭제합니다.

 

smembers: [ smembers key ]

set의 key의 모든 member를 조회합니다.

 

 

 

 


📢 Spring boot에서 Redis 테스트 

 

spring boot에서 redis의 기본 명령어 중

push, pop에 대해서 테스트를 해보겠습니다. 😀

 

 

✅  build.gradle.kts

 

redis gradle 의존성을 주입합니다.

dependencies {
	implementation("org.springframework.boot:spring-boot-starter-data-redis")
}

 

 

✅  RedisTest.kt

 

leftPush를 통해 key-value 형식으로  foo: {bar: 123} 정보를 저장합니다.

rightPop을 통해 데이터를 가져옵니다.

이렇게 하면 마치 queue처럼 데이터를 가져오게 됩니다.

import org.junit.jupiter.api.Test
import org.junit.jupiter.api.extension.ExtendWith
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc
import org.springframework.boot.test.context.SpringBootTest
import org.springframework.data.redis.core.RedisTemplate
import org.springframework.test.context.ActiveProfiles
import org.springframework.test.context.junit.jupiter.SpringExtension
import org.assertj.core.api.Assertions.assertThat

@ActiveProfiles("local")
@ExtendWith(SpringExtension::class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@AutoConfigureMockMvc
class RedisTest @Autowired constructor(
    val redisTemplate: RedisTemplate<String, Any>
) {

    @Test
    fun `push and pop `() {
    	//given
        val data = "{bar:123}"
        redisTemplate.opsForList().leftPush("foo", data)
        
        //when
        val result = redisTemplate.opsForList().rightPop("foo")
        
        //then
        assertThat(data).isEqualTo(result)
    }
}

 

 

 

반응형

'Programming > redis' 카테고리의 다른 글

redis의 pub/sub 이란?  (0) 2021.07.14