Skip to content

Commit 3b617db

Browse files
committed
update redis, h2 configuration
1 parent 85921d5 commit 3b617db

File tree

4 files changed

+80
-27
lines changed

4 files changed

+80
-27
lines changed
Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,20 @@
11
package com.redis.cluster;
22

3+
import com.redis.cluster.common.CacheKey;
34
import org.springframework.boot.SpringApplication;
45
import org.springframework.boot.autoconfigure.SpringBootApplication;
56
import org.springframework.cache.annotation.EnableCaching;
67
import org.springframework.context.annotation.Bean;
7-
import org.springframework.security.crypto.factory.PasswordEncoderFactories;
8-
import org.springframework.security.crypto.password.PasswordEncoder;
8+
import org.springframework.data.redis.cache.CacheKeyPrefix;
9+
import org.springframework.data.redis.cache.RedisCacheConfiguration;
10+
import org.springframework.data.redis.cache.RedisCacheManager;
11+
import org.springframework.data.redis.connection.RedisConnectionFactory;
12+
import org.springframework.data.redis.serializer.RedisSerializationContext;
13+
import org.springframework.data.redis.serializer.StringRedisSerializer;
14+
15+
import java.time.Duration;
16+
import java.util.HashMap;
17+
import java.util.Map;
918

1019
@SpringBootApplication
1120
@EnableCaching
@@ -15,8 +24,21 @@ public static void main(String[] args) {
1524
SpringApplication.run(RedisClusterApplication.class, args);
1625
}
1726

18-
@Bean
19-
public PasswordEncoder passwordEncoder() {
20-
return PasswordEncoderFactories.createDelegatingPasswordEncoder();
27+
// https://stackoverflow.com/questions/51660160/set-expire-key-at-specific-time-when-using-spring-caching-with-redis
28+
@Bean(name = "cacheManager")
29+
public RedisCacheManager cacheManager(RedisConnectionFactory connectionFactory) {
30+
31+
RedisCacheConfiguration configuration = RedisCacheConfiguration.defaultCacheConfig()
32+
.disableCachingNullValues()
33+
.entryTtl(Duration.ofSeconds(CacheKey.DEFAULT_EXPIRE_SEC))
34+
.computePrefixWith(CacheKeyPrefix.simple())
35+
.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()));
36+
37+
Map<String, RedisCacheConfiguration> cacheConfigurations = new HashMap<>();
38+
cacheConfigurations.put(CacheKey.USER_SINGLE, RedisCacheConfiguration.defaultCacheConfig()
39+
.entryTtl(Duration.ofSeconds(CacheKey.USER_SINGLE_EXPIRE_SEC)));
40+
41+
return RedisCacheManager.RedisCacheManagerBuilder.fromConnectionFactory(connectionFactory).cacheDefaults(configuration)
42+
.withInitialCacheConfigurations(cacheConfigurations).build();
2143
}
2244
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package com.redis.cluster.common;
2+
3+
public class CacheKey {
4+
5+
private CacheKey() {
6+
}
7+
8+
public static final int DEFAULT_EXPIRE_SEC = 60;
9+
public static final String USER_SINGLE = "user-single";
10+
public static final int USER_SINGLE_EXPIRE_SEC = 180;
11+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.redis.cluster.config;
2+
3+
import org.h2.tools.Server;
4+
import org.springframework.context.annotation.Bean;
5+
import org.springframework.context.annotation.Configuration;
6+
import org.springframework.context.annotation.Profile;
7+
8+
import java.sql.SQLException;
9+
10+
@Configuration
11+
@Profile("local")
12+
public class EmbededH2Config {
13+
@Bean
14+
public Server h2TcpServer() throws SQLException {
15+
return Server.createTcpServer()
16+
.start();
17+
}
18+
}
Lines changed: 24 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,47 @@
11
package com.redis.cluster.controller;
22

3+
import com.redis.cluster.common.CacheKey;
34
import com.redis.cluster.entity.User;
45
import com.redis.cluster.repo.UserJpaRepo;
56
import lombok.RequiredArgsConstructor;
6-
import org.springframework.data.redis.core.RedisTemplate;
7-
import org.springframework.data.redis.core.ValueOperations;
8-
import org.springframework.security.crypto.password.PasswordEncoder;
7+
import org.springframework.cache.annotation.CachePut;
8+
import org.springframework.cache.annotation.Cacheable;
99
import org.springframework.web.bind.annotation.*;
1010

11-
import java.util.ArrayList;
12-
import java.util.Collection;
1311
import java.util.Collections;
14-
import java.util.List;
1512

1613
@RequiredArgsConstructor
1714
@RequestMapping("/redis")
1815
@RestController
1916
public class RedisController {
2017

21-
private final RedisTemplate<String, String> redisTemplate;
2218
private final UserJpaRepo userJpaRepo;
23-
private final PasswordEncoder passwordEncoder;
24-
25-
@GetMapping("/ops/value")
26-
public List<String> redisClusterTest() {
27-
ValueOperations<String, String> valueOps = redisTemplate.opsForValue();
28-
Collection<String> keys = new ArrayList<>();
29-
for (int i = 0; i < 10; i++) {
30-
keys.add("valueOps_" + i);
31-
valueOps.set("valueOps_" + i, String.valueOf(i));
32-
}
33-
return valueOps.multiGet(keys);
19+
private static final String UID = "strongdaddy@naver.com";
20+
21+
@Cacheable(value = CacheKey.USER_SINGLE, key = "#uid", unless = "#result == null")
22+
@GetMapping("/user/{uid}")
23+
public User findOne(@PathVariable String uid) {
24+
return userJpaRepo.findByUid(uid).orElse(null);
3425
}
3526

36-
@PostMapping("/post/user")
37-
public void redisClusterPostUser() {
27+
@PostMapping("/user")
28+
@ResponseBody
29+
public User postUser() {
3830
userJpaRepo.save(User.builder()
39-
.uid("strongdaddy@naver.com")
40-
.password(passwordEncoder.encode("1234"))
31+
.uid(UID)
32+
.password("1234")
4133
.name("strongdaddy")
4234
.roles(Collections.singletonList("ROLE_USER"))
4335
.build());
36+
37+
return userJpaRepo.findByUid(UID).orElse(null);
38+
}
39+
40+
@CachePut(value = CacheKey.USER_SINGLE, key = "#user.uid")
41+
@PutMapping("/user")
42+
@ResponseBody
43+
public User putUser(@RequestBody User user) {
44+
userJpaRepo.save(user);
45+
return userJpaRepo.findByUid(UID).orElse(null);
4446
}
4547
}

0 commit comments

Comments
 (0)