springBoot上集成redis缓存

来源:互联网 发布:vivo的软件商店 编辑:程序博客网 时间:2024/06/01 08:17

springBoot上集成redis

1.pom.xml引入jar包,如下

        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-data-redis</artifactId>        </dependency>

2.修改项目启动类,增加注解@EnableCaching,开启缓存功能,如下:

package springboot;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cache.annotation.EnableCaching;import org.springframework.scheduling.annotation.EnableScheduling;@SpringBootApplication@EnableScheduling@EnableCachingpublic class SpringbootApplication{    public static void main(String[] args) {        SpringApplication.run(SpringbootApplication.class, args);    }}

3.application.properties中配置Redis连接信息,如下:

# Redis数据库索引(默认为0)spring.redis.database=0# Redis服务器地址spring.redis.host=172.31.19.222# Redis服务器连接端口spring.redis.port=6379# Redis服务器连接密码(默认为空)spring.redis.password=# 连接池最大连接数(使用负值表示没有限制)spring.redis.pool.max-active=8# 连接池最大阻塞等待时间(使用负值表示没有限制)spring.redis.pool.max-wait=-1# 连接池中的最大空闲连接spring.redis.pool.max-idle=8# 连接池中的最小空闲连接spring.redis.pool.min-idle=0# 连接超时时间(毫秒)spring.redis.timeout=0

4.新建Redis缓存配置类RedisConfig,如下:

package springboot.config;import org.springframework.beans.factory.annotation.Value;import org.springframework.cache.CacheManager;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.cache.RedisCacheManager;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 com.fasterxml.jackson.annotation.JsonAutoDetect;import com.fasterxml.jackson.annotation.PropertyAccessor;import com.fasterxml.jackson.databind.ObjectMapper;/** * Redis缓存配置类 * @author szekinwin * */@Configuration@EnableCachingpublic class RedisConfig extends CachingConfigurerSupport{    @Value("${spring.redis.host}")    private String host;    @Value("${spring.redis.port}")    private int port;    @Value("${spring.redis.timeout}")    private int timeout;    //自定义缓存key生成策略    @Bean    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 CacheManager cacheManager(RedisTemplate redisTemplate) {        RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate);        //设置缓存过期时间(秒)         cacheManager.setDefaultExpiration(10000);        return cacheManager;    }    //序列化反序列化    @Bean    public RedisTemplate<String, String> redisTemplate(JedisConnectionFactory factory) {        StringRedisTemplate template = new StringRedisTemplate(factory);        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);        template.setValueSerializer(jackson2JsonRedisSerializer);        template.afterPropertiesSet();        return template;    }}

5.注解含义如下:

   @Cacheable将查询结果缓存到redis中,(key="#p0")指定传入的第一个参数作为redis的key。  @CachePut,指定key,将更新的结果同步到redis中  @CacheEvict,指定key,删除缓存数据,allEntries=true,方法调用后将立即清除缓存

6.具体使用如下:

@CacheConfig(cacheNames = "users")public interface UserRepository extends JpaRepository<User, Long> {    @Cacheable(key = "#p0")    User findByName(String name);    @CachePut(key = "#p0.name")    User save(User user);}
原创粉丝点击