Skip to content

Latest commit

ย 

History

History
204 lines (163 loc) ยท 5.59 KB

File metadata and controls

204 lines (163 loc) ยท 5.59 KB

#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

redis-window_service

Embeded Redis

<!-- 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

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

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;
    }
}