[Redis] Redis SET 명령어

JINJI·2024년 3월 16일
0

https://redis.io/commands/set/

Syntax

SET key value [NX | XX] [GET] [EX seconds | PX milliseconds |
  EXAT unix-time-seconds | PXAT unix-time-milliseconds | KEEPTTL]
  • 키에 string 값을 저장한다.
  • 키에 이미 값이 있는 경우 덮어쓴다.
  • 키와 연관된 이전의 TTL값은 SET 연산이 성공하면 삭제된다.

Options

  • EX seconds -- 지정된 만료 시간을 초 단위(양의 정수)로 설정한다.
  • PX milliseconds -- 지정된 만료 시간을 밀리초(양의 정수) 단위로 설정한다.
  • EXAT timestamp-seconds -- 키가 만료되는 지정된 유닉스 시간을 초 단위(양의 정수)로 설정한다.
  • PXAT timestamp-milliseconds -- 키가 만료되는 지정된 유닉스 시간을 밀리초(양의 정수) 단위로 설정한다.
  • NX -- 키가 이미 존재하지 않는 경우에만 값 설정한다.
  • XX -- 키가 이미 존재하는 경우에만 값 설정한다.
  • KEEPTTL -- 키와 연관된 생존 시간을 유지한다.
  • GET -- 키에 저장된 이전 문자열을 반환하거나, 키가 존재하지 안으면 nil을 반환한다. 키에 저장된 값이 문자열이 아닌 경우 오류가 반환되고 SET이 중단된다.

참고: SET 명령 옵션은 SETNX, SETEX, PSETEX, GETSET을 대체할 수 있으므로, 향후 버전의 Redis에서는 이러한 명령이 더 이상 사용되지 않고 제거될 수 있다.

Example

redis> SET mykey "Hello"
"OK"
redis> GET mykey
"Hello"
redis> SET anotherkey "will expire in a minute" EX 60
"OK"
redis> GET anotherkey
(nil)

Code Example

package example_commands_test

import (
    "context"
    "fmt"
    "github.com/redis/go-redis/v9"
)

func ExampleClient_Set_and_get() {
    ctx := context.Background()

    rdb := redis.NewClient(&redis.Options{
    	Addr:     "localhost:6379",
    	Password: "", // no password docs
    	DB:       0,  // use default DB
    })

    err := rdb.Set(ctx, "bike:1", "Process 134", 0).Err()
    if err != nil {
    	panic(err)
    }

    fmt.Println("OK")

    value, err := rdb.Get(ctx, "bike:1").Result()
    if err != nil {
    	panic(err)
    }
    fmt.Printf("The name of the bike is %s", value)

}

만료 옵션 사용 사례

Redis의 대표적인 용도는 캐싱이다. 만료 옵션을 사용하여 오래된 데이터를 캐싱해 유지하는 것을 막고 메모리가 부족하지 않도록 데이터를 삭제할 수 있다.

  • 뉴스 헤드라인 API 캐싱

    1. Request 발생시 Redis에 캐시된 데이터 확인
    2. 캐시된 데이터가 존재하는 경우 해당 데이터 반환
    3. 데이터가 만료되었거나 캐시된 데이터가 없는 경우 DB (eg. postgreSQL, MariaDB 등)에 접근하여 값을 가져온 다음 Redis에 캐싱

결론

Redis의 SET 명령어를 사용하면 string값을 key-value 형태로 저장할 수 있으며, 다양한 옵션을 통해 만료 시간을 설정하거나 조건에 따라 동작을 변경할 수 있다. 이를 통해 데이터를 효율적으로 관리하고 캐싱하는 등의 다양한 용도로 활용할 수 있다.

0개의 댓글