在SpringBoot中添加Redis及配置方法

网友投稿 438 2023-01-21


在SpringBoot中添加Redis及配置方法

在实际的开发中,会有这样的场景。有一个微服务需要提供一个查询的服务,但是需要查询的数据库表的数据量十分庞大,查询所需要的时间很长。 此时就可以考虑在项目中加入缓存。

引入依赖

在maven项目中引入如下依赖。并且需要在本地安装redis。

org.springframework.boot

spring-boot-starter-data-redis

2.0.5.RELEASE

配置redis

在SpringBoot的配置文件中添加如下代码。

redis:

host: 127.0.0.1

port: 6379

timeout: 5000

database: 0

jedis:

pool:

max-idle: 8

max-wait:

min-idle: 0MKdJB

添加redis配置文件

新建名为RedisConfig的配置类。

import com.fasterxml.jackson.annotation.jsonAutoDetect;

import com.fasterxml.jackson.annotation.PropertyAccessor;

import com.fasterxml.jackson.databind.ObjectMapper;

import org.springframework.cache.CacheManager;

import org.springframework.cache.annotation.CachingConfigurerSupport;

import org.springframework.cache.annotation.EnableCaching;

import org.springframework.cache.interceptor.KeyGenerator;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import org.springframework.data.redis.cache.RedisCacheConfiguration;

import org.springframework.data.redis.cache.RedisCacheManager;

import org.springframework.data.redis.cache.RedisCacheWriter;

import org.springframework.data.redis.connection.RedisConnectionFactory;

import org.springframework.data.redis.core.RedisTemplate;

import org.springframework.data.redis.core.StringRedisTemplate;

import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;

import java.time.Duration;

/**

* RedisConfig

*

* @author detectiveHLH

* @date 2018-10-11 14:39

**/

@Configuration

@EnableCaching

public class RedisConfig extends CachingConfigurerSupport {

@Bean

@Override

public KeyGenerator keyGenerator() {

return (target, method, params) -> {

StringBuilder sb = new StringBuilder();

sb.append(target.getClass().getName());

sb.append(method.getName());

for (Object obj : params) {

sb.append(obj.toString());

}

return sb.toString();

};

}

@Bean

public RedisTemplate redisTemplate(RedisConnectionFactory factory) {

ObjectMapper om = new ObjectMapper();

om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);

om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);

//redis序列化

Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);

jackson2JsonRedisSerializer.setObjectMapper(om);

StringRedisTemplate template = new StringRedisTemplate(factory);

template.setValueSerializer(jackson2JsonRedisSerializer);

template.afterPropertiesSet();

return template;

}

/**

* 自定义CacheManager

*/

@Bean

public CacheManager cacheManager(RedisTemplate redisTemplate) {

//全局redis缓存过期时间

RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofDays(1));

RedisCacheWriter redisCacheWriter = RedisCacheWriter.nonLockingRedisCacheWriter(redisTemplate.getConnectionFactory());

return new RedisCacheManager(redisCacheWriter, redisCacheConfiguration);

}

}

添加缓存配置

在项目的service层中的实现类中,添加@Cacheable注解。

import java.util.HashMap;

/**

* UserLoginServiceImpl

*

* @author detectiveHLH

* @date 2018-10-10 17:20

**/

@Service

public class UserLoginServiceImpl implements UserLoginService {

@Autowired

private UserLoginMapper userLoginMapper;

@Override

@Cacheable(value = "usercache")

public HashMap getByUserName(String userName) {

System.out.println("此时没有走缓存");

return userLoginMapper.getByUserName(userName);

}

}

然后调用一次该接口。就可以在redis中看到如下的key。

"usercache::com.detectiveHLH.api.service.impl.UserLoginServiceImplgetByUserNameSolarFarm"

同时,可以在控制台中看到有"此时没有走缓存"的输出。然后再次调用该接口,就可以看到返回的速度明显变快,并且没有"此时没有走缓存"输出。说明 此时的接口走的是缓存。

总结

以上所述是给大家介绍的在SpringBoot中添加Redis及配置方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,会及时回复大家的。在此也非常感谢大家对我们网站的支持!


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:rap接口文档管理工具(RAP生成器)
下一篇:服装研发管理平台网站(中国服装行业平台)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~