Springboot2.X中使用Redis

Posted 追枫狼

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Springboot2.X中使用Redis相关的知识,希望对你有一定的参考价值。

  使用redis之前,首先要安装redis服务,确保服务正常启动,redis-cli客户端能连接上。springboot集成redis上手快,简单几步就可以搞定。

  首先,引入springboot集成redis的依赖:

springboot集成redis依赖坐标:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>

  其次,在项目的配置文件中配置redis:

redis:
    host: IP地址
    port: 6379
    timeout: 60s
    database: 1
    pool:
      max-active: 100
      max-idle: 10
      max-wait: 100000

  此处配置根据自身实际情况配置,在安装redis如果不是使用默认配置,可根据自己修改的内容进行配置。在springboot项目中使用RedisTemplate就可使用。

@Autowired
    private RedisTemplate redisTemplate;

  但是这个调用的是redis自带的RedisTemplate,redistemplate默认key-value都是object类型,使用时都需要序列化使用,然而我们在开发过程中使用的多是key:String、value:object的类型,所以我们可以自己写个配置类,自定义RedisTemplate模板:

@Configuration
public class RedisConfig {
	@SuppressWarnings("all")
	public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
	// 我们为了自己开发方便,一般直接使用 <String, Object>
	RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
	template.setConnectionFactory(factory);
	// Json序列化配置
	Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
	ObjectMapper om = new ObjectMapper();
	om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
	om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
	jackson2JsonRedisSerializer.setObjectMapper(om);
	// String 的序列化
	StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
	// key采用String的序列化方式
	template.setKeySerializer(stringRedisSerializer);
	// hash的key也采用String的序列化方式
	template.setHashKeySerializer(stringRedisSerializer);
	// value序列化方式采用jackson
	template.setValueSerializer(jackson2JsonRedisSerializer);
	// hash的value序列化方式采用jackson
	template.setHashValueSerializer(jackson2JsonRedisSerializer);
	template.afterPropertiesSet();
	return template;
	}
}

  为了更加方便,我们还可以自己写个Redis工具类:

@Slf4j
@Component
public class RedisUtil {
	@Autowired
	private RedisTemplate redisTemplate;

	/**
	 * SET操作
	 *
	 * @param key   KEY
	 * @param value VALUE
	 * @return 是否成功
	 */
	public boolean set(String key, String value) {
		try {
			redisTemplate.opsForValue().set(key, value);
			return true;
		} catch (Exception e) {
			log.error("redis set操作异常:" + e.getMessage());
			return false;
		}
	}

	/**
	 * GET操作
	 *
	 * @param key KEY
	 * @return VALUE
	 */
	public String get(String key) {
		try {
			String value = redisTemplate.opsForValue().get(key);
			return value;
		} catch (Exception e) {
			log.error("redis get操作异常:" + e.getMessage());
			return null;
		}
	}
}

  使用示例:

@Slf4j
@Service
public class getTokenServiceImpl implements GetTokenService {
	@Autowired
	private RedisUtil redis;

	@Value("${xzqdm}")
	private String xzqdm;

	@Value("${ausername}")
	private String ausername;

	@Value("${password}")
	private String password;

	@Value("${url.getToken}")
	private String urlGetToken;

	@Override
	public ResTokenMes getToken() throws IOException {
		HttpClientUtil https= new HttpClientUtil();
		GetHeadMes headMes = new GetHeadMes();
		........................此处省略若干代码
		String result = https.sendHttpClient(url, tokenmap);
		ResTokenMes resTokenMes = JSONUtil.toBean(JSONUtil.toJsonStr(result), ResTokenMes.class);
		String token = resTokenMes.getData().getToken();
		redis.set("token", token);
		return resTokenMes;
	}
}



@Slf4j
@Service
public class PushServiceImpl implements PushService {

	@Autowired
	private RedisUtil redis;

	@Autowired
	InfoMapper infoMapper;

	@Autowired
	@Qualifier("batchKafkaTemplate")
	private KafkaTemplate<Object, Object> batchKafkaTemplate;

	@Value("${kafka.topic.batch}")
	private String topic;

	@Value("${xzqdm}")
	private String xzqdm;

	@Value("${url.postXF}")
	private String urlPostXF;

	@Value("${url.postFK}")
	private String urlPostFK;

	@Override
	public R getApply() {
		//获取token
		String token = redis.get("token");
                ....................此处省略若干代码
        }
}        

  

以上是关于Springboot2.X中使用Redis的主要内容,如果未能解决你的问题,请参考以下文章

springboot2.x版本整合redis(单机/集群)(使用lettuce)

SpringBoot2.x 整合Redis和使用Redis缓存

Springboot2.x整合Redis以及连接哨兵模式/集群模式

Springboot2.x集成Redis哨兵模式

SpringBoot2.X整合Redis

Redis的集成-SpringBoot2.X