Redis

민지킴·2021년 3월 10일
0

레디스란?

REDIS(REmote Dictionary Server)는 메모리 기반의 “키-값” 구조 데이터 관리 시스템이며,
모든 데이터를 메모리에 저장하고 조회하기에 빠른 Read, Write 속도를 보장하는 비 관계형 데이터베이스이다.

레디스는 크게 5가지< String, Set, Sorted Set, Hash, List >의 데이터 형식을 지원한다.
Redis는 빠른 오픈 소스 인 메모리 키-값 데이터 구조 스토어이며, 다양한 인 메모리 데이터 구조 집합을 제공하므로 사용자 정의 애플리케이션을 손쉽게 생성할 수 있다.

레디스 사용 목적

https://brunch.co.kr/@jehovah/20

레디스(Redis) 특징

영속성을 지원하는 인메모리 데이터 저장소.

읽기 성능 증대를 위한 서버 측 복제를 지원한다.
(Redis가 실행중인 서버가 충돌하는 경우 장애 조치 처리와 함께 더 높은 읽기 성능을 지원하기 위해 슬레이브가 마스터에 연결하고 전체 데이터베이스의 초기 복사본을 받는 마스터 / 슬레이브 복제를 지원한다. 마스터에서 쓰기가 수행되면 슬레이브 데이터 세트를 실시간으로 업데이트하기 위해 연결된 모든 슬레이브로 전송된다.)

쓰기 성능 증대를 위한 클라이언트 측 샤딩(Sharding)을 지원한다.

샤딩(Sharding)이란??? 파티셔닝(Partitionong)과 동일하다. 같은 테이블 스키마를 가진 데이터를 다수의 데이터베이스에 분산하여 저장하는 방법을 의미한다.

레디스의 장점

리스트, 배열과 같은 데이터를 처리하는데 유용하다.
value 값으로 문자열, 리스트, Set, Sorted set, Hash 등 여러 데이터 형식을 지원하기에, 다양한 방식으로 데이터를 활용할 수 있다.

리스트형 데이터 입력과 삭제가 MySQL에 비해서 10배정도 빠르다고 한다.
여러 프로세스에서 동시에 같은 key에 대한 갱신을 요청할 경우, Atomic 처리로 데이터 부정합 방지 Atomic처리 함수를 제공한다.(원자성을 잘 지킨다)

메모리를 활용하면서 영속적인 데이터 보존
명령어로 명시적으로 삭제, expires를 설정하지 않으면 데이터가 삭제되지 않는다.
스냅샷(기억장치) 기능을 제공하여 메모리의 내용을 *.rdb 파일로 저장하여 해당 시점으로 복구할 수 있다.

Redis Server는 1개의 싱글 쓰레드로 수행된다.
따라서 서버 하나에 여러개의 서버를 띄우는 것이 가능하다.
Master — Slave 형식으로 구성이 가능함, 데이터 분실 위험을 없애주는 것이 바로 Master — Slave 방식이다.

jedis, Medis

——————————————————————————————————————
jedis는 redis를 자바에서 쉽게 사용할 수 있게 도와주는 라이브러리이다.

medis 설치 페이지
https://dolsup.work/posts/how-to-build-medis-on-macos/

——————————————————————————————————————

자료형

문자열, 리스트, 해시, 셋, 정렬된 셋과 같은 다양한 데이터형을 지원한다.

저장소 : in memory storage

저장방식 : key-value

데이터 타입 : String, Set, Sorted Set, Hash, List

데이터 저장 : Memory, Disk

메모리 재사용 : 메모리 재사용 하지 않음

스레드 : 싱글 스레드

캐싱 용량 : key value 모두 512MB

  • Strings
    value에 문자,숫자 등을 저장한다
    저장시 별도로 형이 없다.
    숫자도 저장 가능하다. 그리고 숫자에 incr, incrby, decr, decrby 같은 atomic counter연산이 가능하다.

  • Lists
    value에 list를 저장한다.
    lrange: 값을 조회 이때 -1 dms ahen rkwudhfksms EMt
    ex) lrange test_lists 0 -1

  • Sets
    value를 set형태로 가지고 있음
    list는 중복이 되나 set은 중복이 안된다.

  • Hashes
    Hashs key/value 목록을 값으로 가진다.

  • Sorted sets
    value를 set 형태로 가지고 있으며, set처럼 중복은 안된다.
    score와 함께 저장되며 score를 기준으로 정렬된다.
    정렬이 가능하다는 장점이 있따.

  • Bitmaps
    bit값을 저장하며, boolean 옵션값을 저장하는 용도로 사용

Terminal 에서 Redis 사용

https://sungwookkang.com/1313?category=868126

spring boot에서 사용

참고 : https://sabarada.tistory.com/105

의존성 추가

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

RedisConfig

@Configuration
public class RedisConfig {
	private @Value("${spring.redis.host}") String redisHost;
	private @Value("${spring.redis.port}") int redisPort;

	@Bean
	public JedisConnectionFactory connectionFactory() {
		JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory();
		jedisConnectionFactory.setHostName(redisHost);
		jedisConnectionFactory.setPort(redisPort);
		jedisConnectionFactory.setUsePool(true);
		return jedisConnectionFactory;
	}

	@Bean(name = "red")
	public RedisTemplate<String, String> redisTemplate() {
		RedisTemplate<String, String> redisTemplate = new RedisTemplate<>();
		redisTemplate.setKeySerializer(new StringRedisSerializer());
		redisTemplate.setValueSerializer(new StringRedisSerializer());
		redisTemplate.setConnectionFactory(connectionFactory());

		return redisTemplate;
	}

}

값 세팅하기

	@Autowired
	@Resource(name = "red")
	RedisTemplate<String, String> redisTemplate;
    
    	redisTemplate.opsForValue().set(key, value, 10, TimeUnit.MINUTES);

값 가져오기

	String result = "";
	result = redisTemplate.opsForValue().get(stationId);
profile
하루하루는 성실하게 인생 전체는 되는대로

0개의 댓글