• spring boot项目集成Redis


    1、在common模块添加依赖

    由于redis缓存是公共应用,所以我们把依赖与配置添加到了common模块下面,在common模块pom.xml下添加以下依赖

           <!-- redis -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-redis</artifactId>
            </dependency>
             <!--spring2.X集成redis所需common-pool2-->
            <dependency>
                <groupId>org.apache.commons</groupId>
               <artifactId>commons-pool2</artifactId>
                <version>2.6.0</version>
            </dependency>

    2、在service-base模块添加redis配置类

    RedisConfig.java

    @EnableCaching //开启注解
    @Configuration//配置类
    public class RedisConfig extends CachingConfigurerSupport {
    
        @Bean
        public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
            RedisTemplate<String, Object> template = new RedisTemplate<>();
            RedisSerializer<String> redisSerializer = new StringRedisSerializer();
            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.setConnectionFactory(factory);
            //key序列化方式
            template.setKeySerializer(redisSerializer);
            //value序列化
            template.setValueSerializer(jackson2JsonRedisSerializer);
            //value hashmap序列化
            template.setHashValueSerializer(jackson2JsonRedisSerializer);
            return template;
        }
    
        @Bean
        public CacheManager cacheManager(RedisConnectionFactory factory) {
            RedisSerializer<String> redisSerializer = new StringRedisSerializer();
            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);
            // 配置序列化(解决乱码的问题),过期时间600秒
            RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
                    .entryTtl(Duration.ofSeconds(600))
                    .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(redisSerializer))
                    .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer))
                    .disableCachingNullValues();
            RedisCacheManager cacheManager = RedisCacheManager.builder(factory)
                    .cacheDefaults(config)
                    .build();
            return cacheManager;
        }
    }

    3、在接口中添加redis缓存

    由于首页数据变化不是很频繁,而且首页访问量相对较大,所以我们有必要把首页接口数据缓存到redis缓存中,减少数据库压力和提高访问速度。

    改造service-cms模块首页banner接口,首页课程与讲师接口类似

    3.1 Spring Boot缓存注解

    (1)缓存@Cacheable

    根据方法对其返回结果进行缓存,下次请求时,如果缓存存在,则直接读取缓存数据返回;如果缓存不存在,则执行方法,并把返回的结果存入缓存中。一般用在查询方法上。

    查看源码,属性值如下:

    属性/方法名

    解释

    value

    缓存名,必填,它指定了你的缓存存放在哪块命名空间

    cacheNames

    与 value 差不多,二选一即可

    key

    可选属性,可以使用 SpEL 标签自定义缓存的key

    (2)缓存@CachePut

    使用该注解标志的方法,每次都会执行,并将结果存入指定的缓存中。其他方法可以直接从响应的缓存中读取缓存数据,而不需要再去查询数据库。一般用在新增方法上。

    查看源码,属性值如下:

    属性/方法名

    解释

    value

    缓存名,必填,它指定了你的缓存存放在哪块命名空间

    cacheNames

    与 value 差不多,二选一即可

    key

    可选属性,可以使用 SpEL 标签自定义缓存的key

    (3)缓存@CacheEvict

    使用该注解标志的方法,会清空指定的缓存。一般用在更新或者删除方法上

    查看源码,属性值如下:

    属性/方法名

    解释

    value

    缓存名,必填,它指定了你的缓存存放在哪块命名空间

    cacheNames

    与 value 差不多,二选一即可

    key

    可选属性,可以使用 SpEL 标签自定义缓存的key

    allEntries

    是否清空所有缓存,默认为 false。如果指定为 true,则方法调用后将立即清空所有的缓存

    beforeInvocation

    是否在方法执行前就清空,默认为 false。如果指定为 true,则在方法执行前就会清空缓存

    3.2 启动redis服务  banner接口改造

    (1)在service-cms模块配置文件添加redis配置

    spring.redis.host=127.0.0.1
    spring.redis.port=6379
    spring.redis.password=12345
    spring.redis.database= 0
    spring.redis.timeout=1800000
    spring.redis.lettuce.pool.max-active=20
    spring.redis.lettuce.pool.max-wait=-1
    #最大阻塞等待时间(负数表示没限制)
    spring.redis.lettuce.pool.max-idle=8
    spring.redis.lettuce.pool.min-idle=0

    (2)修改CrmBannerServiceImpl,添加redis缓存注解

    @Service
    public class CrmBannerServiceImpl extends ServiceImpl<CrmBannerMapper, CrmBanner> implements CrmBannerService {
    
        @Cacheable(value = "banner", key = "'selectIndexList'")
        @Override
        public List<CrmBanner> selectAllBanner() { //查前两条banner
            //根据id进行升序 显示排列之后的前两条记录
            QueryWrapper<CrmBanner> queryWrapper = new QueryWrapper();
            queryWrapper.orderByAsc("id");
            queryWrapper.last("limit 2");//拼接sql
            List<CrmBanner> crmBanners = baseMapper.selectList(queryWrapper);
            return crmBanners;
        }
    }
  • 相关阅读:
    【转载】时域信号的频谱、功率谱和功率谱密度计算
    【转载】Chaotic Time-Series Prediction
    【转载】Restarting an analysis in ANSYS
    Interpolation in MATLAB
    【转载】ANSYS 动力分析 (9)
    在oracle中 将一个以逗号隔开的String字符串转换成以单引号逗号隔开的集合
    在java中获取时间,单位毫秒。主要用于查看执行时间效率
    比较两个数组元素是否相等
    oracle 从一张表的数据复制到另一张表中 mapper.xml
    打印错误栈信息:可以捕获具体错误信息
  • 原文地址:https://www.cnblogs.com/fxzemmm/p/14421476.html
Copyright © 2020-2023  润新知