#Redis
# windows (๊ด๋ฆฌ์ ๋ชจ๋๋ก ์คํ)
# Redis ์๋ฒ ์ค์ง
NET STOP Redis
# Redis ์๋ฒ ์์
NET START Redis
์ค์ง ํด์ค ๋ค์ redis-server.exe ์คํ
์ค์ ํ์ผ๊ณผ ๊ฐ์ด ์คํ์์ผ์ค๋๋
redis-server redis.windows.conf
ํด๋ผ์ด์ธํธ ์ฌ์ฉ
redis-cli โh host โp port โp password
Redis ์๋ฒ ์๋น์ค๋ก ๋ฑ๋ก
# ์๋น์ค ๋ฑ๋ก
redis-server --service-install redis.windows.conf --loglevel notice
# ์์
redis-server --service-start
# ์ค์ง
redis-server --service-stop
# ์๋น์ค ๋ฑ๋ก ํด์
redis-server --service-uninstall
# ์๋น์ค ์ด๋ฆ ๋ณ๊ฒฝ
redis-server --service-install -service-name MyRedisServer
# ํฌํธ ๋ณ๊ฒฝ
redis-server --service-install -service-name MyRedisServer -port 10001
# ์ด๋ฆ์ ์ง์ ํ ์๋น์ค๋ฅผ ์์
redis-server โservice-start -service-name MyRedisServer<!-- Maven -->
<dependency>
<groupId>it.ozimov</groupId>
<artifactId>embedded-redis</artifactId>
<version>0.7.2</version>
</dependency>// gradle
compile group: 'it.ozimov', name: 'embedded-redis', version: '0.7.2'Jedis๋ Java์ ํ์ค Redis Client
Spring Boot 2.0 ์ดํ Lettuce๊ฐ ๊ธฐ๋ณธ ํด๋ผ์ด์ธํธ
dependencies {
compile group: 'it.ozimov', name: 'embedded-redis', version: '0.7.2'
// jedis
compile group: 'redis.clients', name: 'jedis'
compile group: 'org.apache.commons', name: 'commons-pool2', version: '2.6.2'
compile ('org.springframework.boot:spring-boot-starter-data-redis') {
exclude group: 'io.lettuce', module: 'lettuce-core'
}
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
// Jedis - Not Use Connection Poll
// TPS ๊ฐ ๋ฎ๊ฒ ๋์ค์ง๋ง CPU ๋ถํ์จ์ด ๋ฎ์
RequiredArgsConstructor
Configuration
@EnableRedisRepositories
public class RedisRepositoryConfig {
private final RedisProperties redisProperties;
@Bean
public RedisConnectionFactory redisConnectionFactory() {
RedisStandaloneConfiguration config =
new RedisStandaloneConfiguration(
redisProperties.getHost(),
redisProperties.getPort()
);
return new JedisConnectionFactory(config);
}
@Bean
public RedisTemplate<?, ?> redisTemplate() {
RedisTemplate<byte[], byte[]> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory());
return redisTemplate;
}
}// Jedis - Use Connection Poll
// TPS ๊ฐ ๋๊ฒ ๋์ค์ง๋ง CPU ๋ถํ์จ์ด ์ฌ๋ผ๊ฐ
@RequiredArgsConstructor
@Configuration
@EnableRedisRepositories
public class RedisRepositoryConfig {
private final RedisProperties redisProperties;
@Bean
public RedisConnectionFactory redisConnectionFactory() {
RedisStandaloneConfiguration config =
new RedisStandaloneConfiguration(
redisProperties.getHost(),
redisProperties.getPort()
);
JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory(config);
jedisConnectionFactory.setPoolConfig(jedisPoolConfig());
return jedisConnectionFactory;
}
private JedisPoolConfig jedisPoolConfig() {
final JedisPoolConfig poolConfig = new JedisPoolConfig();
poolConfig.setMaxTotal(128);
poolConfig.setMaxIdle(128);
poolConfig.setMinIdle(36);
poolConfig.setTestOnBorrow(true);
poolConfig.setTestOnReturn(true);
poolConfig.setTestWhileIdle(true);
poolConfig.setMinEvictableIdleTimeMillis(Duration.ofSeconds(60).toMillis());
poolConfig.setTimeBetweenEvictionRunsMillis(Duration.ofSeconds(30).toMillis());
poolConfig.setNumTestsPerEvictionRun(3);
poolConfig.setBlockWhenExhausted(true);
return poolConfig;
}
@Bean
public RedisTemplate<?, ?> redisTemplate() {
RedisTemplate<byte[], byte[]> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory());
return redisTemplate;
}
}
RedisTemplate๋ Redis Command ๋ฅผ ๋์์ฃผ๋ Template ํํ์ด๊ณ spring-data-redis๋ RedisTemplate์ ์ถ์ํ๋ฅผ ์ ๊ณต
Lettuce๋ Netty (๋น๋๊ธฐ ์ด๋ฒคํธ ๊ธฐ๋ฐ ๊ณ ์ฑ๋ฅ ๋คํธ์ํฌ ํ๋ ์์ํฌ) ๊ธฐ๋ฐ์ Redis ํด๋ผ์ด์ธํธ ๋น๋๊ธฐ๋ก ์์ฒญ์ ์ฒ๋ฆฌํ๊ธฐ ๋๋ฌธ์ ๊ณ ์ฑ๋ฅ์ ์๋
Jedis๋ณด๋ค ํจ์ฌ ๋น ๋ฅด๊ณ CPU ๋ถํ๋ ๋ํ๊ณ ๋ ์ ์ Connection์ผ๋ก ๋ ๋น ๋ฅธ ์๋ต์๋๋ฅผ ๋ธ๋ค.
dependencies {
compile group: 'it.ozimov', name: 'embedded-redis', version: '0.7.2'
// lettuce
compile ('org.springframework.boot:spring-boot-starter-data-redis')
implementation 'org.springframework.boot:spring-boot-starter-actuator'
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}@RequiredArgsConstructor
@Configuration
@EnableRedisRepositories
public class RedisRepositoryConfig {
private final RedisProperties redisProperties;
@Bean
public RedisConnectionFactory redisConnectionFactory() {
return new LettuceConnectionFactory(redisProperties.getHost(), redisProperties.getPort());
}
@Bean
public RedisTemplate<?, ?> redisTemplate() {
RedisTemplate<byte[], byte[]> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory());
return redisTemplate;
}
}