REDIS(REmote Dictionary Server)는 메모리 기반의 “키-값” 구조 데이터 관리 시스템이며,
모든 데이터를 메모리에 저장하고 조회하기에 빠른 Read, Write 속도를 보장하는 비 관계형 데이터베이스이다.
레디스는 크게 5가지< String, Set, Sorted Set, Hash, List >의 데이터 형식을 지원한다.
Redis는 빠른 오픈 소스 인 메모리 키-값 데이터 구조 스토어이며, 다양한 인 메모리 데이터 구조 집합을 제공하므로 사용자 정의 애플리케이션을 손쉽게 생성할 수 있다.
https://brunch.co.kr/@jehovah/20
영속성을 지원하는 인메모리 데이터 저장소.
읽기 성능 증대를 위한 서버 측 복제를 지원한다.
(Redis가 실행중인 서버가 충돌하는 경우 장애 조치 처리와 함께 더 높은 읽기 성능을 지원하기 위해 슬레이브가 마스터에 연결하고 전체 데이터베이스의 초기 복사본을 받는 마스터 / 슬레이브 복제를 지원한다. 마스터에서 쓰기가 수행되면 슬레이브 데이터 세트를 실시간으로 업데이트하기 위해 연결된 모든 슬레이브로 전송된다.)
쓰기 성능 증대를 위한 클라이언트 측 샤딩(Sharding)을 지원한다.
샤딩(Sharding)이란??? 파티셔닝(Partitionong)과 동일하다. 같은 테이블 스키마를 가진 데이터를 다수의 데이터베이스에 분산하여 저장하는 방법을 의미한다.
리스트, 배열과 같은 데이터를 처리하는데 유용하다.
value 값으로 문자열, 리스트, Set, Sorted set, Hash 등 여러 데이터 형식을 지원하기에, 다양한 방식으로 데이터를 활용할 수 있다.
리스트형 데이터 입력과 삭제가 MySQL에 비해서 10배정도 빠르다고 한다.
여러 프로세스에서 동시에 같은 key에 대한 갱신을 요청할 경우, Atomic 처리로 데이터 부정합 방지 Atomic처리 함수를 제공한다.(원자성을 잘 지킨다)
메모리를 활용하면서 영속적인 데이터 보존
명령어로 명시적으로 삭제, expires를 설정하지 않으면 데이터가 삭제되지 않는다.
스냅샷(기억장치) 기능을 제공하여 메모리의 내용을 *.rdb 파일로 저장하여 해당 시점으로 복구할 수 있다.
Redis Server는 1개의 싱글 쓰레드로 수행된다.
따라서 서버 하나에 여러개의 서버를 띄우는 것이 가능하다.
Master — Slave 형식으로 구성이 가능함, 데이터 분실 위험을 없애주는 것이 바로 Master — Slave 방식이다.
——————————————————————————————————————
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 옵션값을 저장하는 용도로 사용
https://sungwookkang.com/1313?category=868126
참고 : 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);