Skip to content

Commit

Permalink
feat($Gateway): add reactive Redis support
Browse files Browse the repository at this point in the history
  • Loading branch information
johnnymillergh committed Dec 20, 2020
1 parent f092c6b commit 2307c71
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 5 deletions.
Original file line number Diff line number Diff line change
@@ -1,15 +1,20 @@
package com.jmsoftware.maf.gateway.universal.configuration;

import lombok.extern.slf4j.Slf4j;
import lombok.val;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.ReactiveRedisConnectionFactory;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.core.ReactiveRedisTemplate;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializationContext;
import org.springframework.data.redis.serializer.StringRedisSerializer;

import java.io.Serializable;
Expand All @@ -22,6 +27,7 @@
* @author Johnny Miller (锺俊), email: johnnysviva@outlook.com
* @date 5/2/20 11:41 PM
**/
@Slf4j
@Configuration
@EnableCaching
@AutoConfigureAfter(RedisAutoConfiguration.class)
Expand All @@ -31,10 +37,27 @@ public class RedisClientConfiguration extends CachingConfigurerSupport {
*/
@Bean
public RedisTemplate<String, Serializable> redisFactory(LettuceConnectionFactory lettuceConnectionFactory) {
log.info("Initial bean: {}", RedisTemplate.class.getSimpleName());
val template = new RedisTemplate<String, Serializable>();
template.setKeySerializer(new StringRedisSerializer());
template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
template.setConnectionFactory(lettuceConnectionFactory);
return template;
}

/**
* Reactive redis template factory.
*
* @param factory the reactive redis connection factory
* @return the reactive redis template
*/
@Bean
ReactiveRedisTemplate<String, Serializable> reactiveRedisTemplate(ReactiveRedisConnectionFactory factory) {
log.info("Initial bean: {}", ReactiveRedisTemplate.class.getSimpleName());
Jackson2JsonRedisSerializer<Serializable> serializer = new Jackson2JsonRedisSerializer<>(Serializable.class);
RedisSerializationContext.RedisSerializationContextBuilder<String, Serializable> builder =
RedisSerializationContext.newSerializationContext(new StringRedisSerializer());
RedisSerializationContext<String, Serializable> context = builder.value(serializer).build();
return new ReactiveRedisTemplate<>(factory, context);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import cn.hutool.json.JSONUtil;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.data.redis.connection.RedisStringCommands;
import org.springframework.data.redis.core.ReactiveRedisTemplate;
import org.springframework.data.redis.core.RedisCallback;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.types.Expiration;
Expand All @@ -27,19 +28,22 @@
@Service
public class RedisServiceImpl implements RedisService {
private final RedisTemplate<String, Serializable> redisTemplate;
private final ReactiveRedisTemplate<String, Serializable> reactiveRedisTemplate;

public RedisServiceImpl(@Qualifier("redisFactory") RedisTemplate<String, Serializable> redisTemplate) {
public RedisServiceImpl(@Qualifier("redisFactory") RedisTemplate<String, Serializable> redisTemplate,
@Qualifier("reactiveRedisTemplate") ReactiveRedisTemplate<String, Serializable> reactiveRedisTemplate) {
this.redisTemplate = redisTemplate;
this.reactiveRedisTemplate = reactiveRedisTemplate;
}

@Override
public Boolean set(String key, String value, Long expirationTime, TimeUnit timeUnit) {
return redisTemplate.execute((RedisCallback<Boolean>) connection -> {
RedisSerializer<String> serializer = redisTemplate.getStringSerializer();
Boolean result = connection.set(Objects.requireNonNull(serializer.serialize(key)),
Objects.requireNonNull(serializer.serialize(value)),
Expiration.from(expirationTime, timeUnit),
RedisStringCommands.SetOption.upsert());
Objects.requireNonNull(serializer.serialize(value)),
Expiration.from(expirationTime, timeUnit),
RedisStringCommands.SetOption.upsert());
return ObjectUtil.isNotNull(result) ? result : false;
});
}
Expand All @@ -55,7 +59,7 @@ public Boolean set(String key, String value) {
return redisTemplate.execute((RedisCallback<Boolean>) connection -> {
RedisSerializer<String> serializer = redisTemplate.getStringSerializer();
Boolean result = connection.set(Objects.requireNonNull(serializer.serialize(key)),
Objects.requireNonNull(serializer.serialize(value)));
Objects.requireNonNull(serializer.serialize(value)));
return ObjectUtil.isNotNull(result) ? result : false;
});
}
Expand Down

0 comments on commit 2307c71

Please sign in to comment.