spring boot 集成redis实现查询cache

修改POM文件,增加redis的配置,这里只需要redis的配置,不需要cache的maven配置

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

修改启动类,增加启动缓存的注解

//开启缓存注解
@EnableCaching
//启用feignclient
@EnableFeignClients
@EnableEurekaClient
//定时任务的注解
@EnableScheduling
@SpringBootApplication
public class CTIApplication {
	public static void main(String[] args) throws Exception {
		SpringApplication.run(CTIApplication.class, args);
	}
}

修改redis配置

@Configuration
public class RedisConfig{
	  // 注入 RedisConnectionFactory
    @Autowired
    private RedisConnectionFactory redisConnectionFactory;

    @Bean
    public RedisTemplate<String, Object> functionDomainRedisTemplate() {
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        initDomainRedisTemplate(redisTemplate, redisConnectionFactory);
        return redisTemplate;
    }

    /**
     * 重写Redis序列化方式,使用Json方式:
     * 当我们的数据存储到Redis的时候,我们的键(key)和值(value)都是通过Spring提供的Serializer序列化到数据库的。
     * RedisTemplate默认使用的是JdkSerializationRedisSerializer,StringRedisTemplate默认使用的是StringRedisSerializer。
     * Spring Data JPA为我们提供了下面的Serializer:
     * GenericToStringSerializer、Jackson2JsonRedisSerializer、JacksonJsonRedisSerializer、JdkSerializationRedisSerializer、OxmSerializer、StringRedisSerializer。
     * 在此我们将自己配置RedisTemplate并定义Serializer。
     * @param redisConnectionFactory
     * @return
     */
    private void initDomainRedisTemplate(RedisTemplate<String, Object> redisTemplate, RedisConnectionFactory factory) {
    	Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<Object>(Object.class);
        ObjectMapper om = new ObjectMapper();
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);  
        jackson2JsonRedisSerializer.setObjectMapper(om);
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashValueSerializer(new JdkSerializationRedisSerializer());
        redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
        redisTemplate.setConnectionFactory(factory);
        redisTemplate.afterPropertiesSet();
    }
    
     /**
     * 实例化 HashOperations 对象,可以使用 Hash 类型操作
     * @param redisTemplate
     * @return
     */
    @Bean
    public HashOperations<String, String, Object> hashOperations(RedisTemplate<String, Object> redisTemplate) {
        return redisTemplate.opsForHash();
    }

    /**
     * 实例化 ValueOperations 对象,可以使用 String 操作
     * @param redisTemplate
     * @return
     */
    @Bean
    public ValueOperations<String, Object> valueOperations(RedisTemplate<String, Object> redisTemplate) {
        return redisTemplate.opsForValue();
    }

    /**
     * 实例化 ListOperations 对象,可以使用 List 操作
     * @param redisTemplate
     * @return
     */
    @Bean
    public ListOperations<String, Object> listOperations(RedisTemplate<String, Object> redisTemplate) {
        return redisTemplate.opsForList();
    }

    /**
     * 实例化 SetOperations 对象,可以使用 Set 操作
     * @param redisTemplate
     * @return
     */
    @Bean
    public SetOperations<String, Object> setOperations(RedisTemplate<String, Object> redisTemplate) {
        return redisTemplate.opsForSet();
    }
    
    /**
     * 实例化 ZSetOperations 对象,可以使用 ZSet 操作
     * @param redisTemplate
     * @return
     */
    @Bean
    public ZSetOperations<String, Object> zSetOperations(RedisTemplate<String, Object> redisTemplate) {
        return redisTemplate.opsForZSet();
    }
    
}

修改rediscache配置

@Configuration
public class RedisCacheConf extends CachingConfigurerSupport{

    @Bean
    public CacheManager cacheManager(RedisTemplate<String, Object> redisTemplate) {
        RedisCacheManager redisCacheManager = new RedisCacheManager(redisTemplate);
        redisCacheManager.setDefaultExpiration(30000);
        return redisCacheManager;
    }

    @Bean
    public CacheErrorHandler errorHandler() {
        return new RedisCacheErrorHandler();
    }
    /**
     * 自定义生成redis-key
     *
     * @return
     */
    @Override
    public KeyGenerator keyGenerator() {
        return new KeyGenerator() {
            @Override
            public Object generate(Object o, Method method, Object... objects) {
                StringBuilder sb = new StringBuilder();
                sb.append(o.getClass().getName()).append(".");
                sb.append(method.getName()).append(".");
                for (Object obj : objects) {
                    sb.append(obj.toString());
                }
                System.out.println("keyGenerator=" + sb.toString());
                return sb.toString();
            }
        };
    }
    @Slf4j
    private static class RedisCacheErrorHandler extends SimpleCacheErrorHandler {

        @Override
        public void handleCacheGetError(RuntimeException exception, Cache cache, Object key) {
            log.error("handleCacheGetError key = {}, value = {}", key, cache);
            log.error("cache get error", exception);
        }

        @Override
        public void handleCachePutError(RuntimeException exception, Cache cache, Object key, Object value) {
            log.error("handleCachePutError key = {}, value = {}", key, cache);
            log.error("cache put error", exception);
        }

        @Override
        public void handleCacheEvictError(RuntimeException exception, Cache cache, Object key) {
            log.error("handleCacheEvictError key = {}, value = {}", key, cache);
            log.error("cache evict error", exception);
        }

        @Override
        public void handleCacheClearError(RuntimeException exception, Cache cache) {
            log.error("handleCacheClearError value = {}", cache);
            log.error("cache clear error", exception);
        }
    }
}

在service层添加注解:

@Cacheable(value="pageList")//缓存查询结果
	public PageInfo<QueryCallRecords> getOutCallRecordList(ParamCallRecord paramCallRecord) {
		// 销售人员
		String userName = Pub_Tools.getString_TrimZeroLenAsNull(paramCallRecord.getUserName());
		// 客户电话
		String customerNumber = Pub_Tools.getString_TrimZeroLenAsNull(paramCallRecord.getCustomerNumber());
		// 呼叫类型
		String callType = Pub_Tools.getString_TrimZeroLenAsNull(paramCallRecord.getCallType());
		// 结果
		String status = Pub_Tools.getString_TrimZeroLenAsNull(paramCallRecord.getStatus());
		// 时间段
		String startTime = Pub_Tools.getString_TrimZeroLenAsNull(paramCallRecord.getStartTime());
		String endTime = Pub_Tools.getString_TrimZeroLenAsNull(paramCallRecord.getEndTime());
		// 页码
		Integer pageNum = 1;
		String pageNumStr = Pub_Tools.getString_TrimZeroLenAsNull(paramCallRecord.getPageNum());
		if (pageNumStr != null) {
			pageNum = Integer.parseInt(pageNumStr);
		}
		// 每页数量
		Integer pageSize = 10;
		String pageSizeStr = Pub_Tools.getString_TrimZeroLenAsNull(paramCallRecord.getPageSize());
		if (pageSizeStr != null) {
			pageSize = Integer.parseInt(pageSizeStr);
		}
		PageHelper.startPage(pageNum, pageSize, true);
		List<QueryCallRecords> list = crmCallRecordsDao.findBylist(userName, customerNumber, callType, status,
				startTime, endTime);
		PageInfo<QueryCallRecords> pageInfo = new PageInfo<>(list);
		return pageInfo;
	}

第一次查询结果:

17:36:15.225 default [http-nio-7004-exec-7] INFO  c.x.sato.controller.CTIController - 开始时间:1542101775225
keyGenerator=com.xuebaclass.sato.service.impl.CTIServiceImpl.getOutCallRecordList.ParamCallRecord(userName=null, customerNumber=null, callType=null, status=null, startTime=null, endTime=null, pageNum=null, pageSize=null)
keyGenerator=com.xuebaclass.sato.service.impl.CTIServiceImpl.getOutCallRecordList.ParamCallRecord(userName=null, customerNumber=null, callType=null, status=null, startTime=null, endTime=null, pageNum=null, pageSize=null)
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@615132f7] was not registered for synchronization because synchronization is not active
JDBC Connection [io.shardingsphere.core.jdbc.core.connection.MasterSlaveConnection@656eaa05] will not be managed by Spring
==>  Preparing: SELECT count(0) FROM call_records r LEFT JOIN crm_call_bind cb ON r.cno = cb.cno AND cb.use_status = 1 WHERE cb.dr = 1 
==> Parameters: 
<==    Columns: count(0)
<==        Row: 146
<==      Total: 1
==>  Preparing: SELECT r.ID as id,r.CUSTOMER_NUMBER as customerNumber,r.CUSTOMER_PROVINCE as customerProvince,r.CUSTOMER_CITY as customerCity,r.STATUS as status,r.CALL_TYPE as callType,r.NUMBER_TRUNK as numberTrunk,r.CLIENT_NUMBER as clientNumber,cb.name as name,r.START_TIME as startTime,r.BRIDGE_TIME as bridgeTime,r.BRIDGE_DURATION as bridgeDuration,r.TOTAL_DURATION as totalDuration,r.RECORD_FILE as recordFile,r.USER_FIELD as customerId,r.SALES_ID as salesId FROM call_records r left join crm_call_bind cb ON r.cno = cb.cno and cb.use_status = 1 where cb.dr = 1 order by r.ID desc limit ?,? 
==> Parameters: 0(Integer), 10(Integer)
<==    Columns: id, customerNumber, customerProvince, customerCity, status, callType, numberTrunk, clientNumber, name, startTime, bridgeTime, bridgeDuration, totalDuration, recordFile, customerId, salesId
<==        Row: 389745, 13252808069, 辽宁, 沈阳市, 双方接听 , 点击外呼, 01053579500, 01042654511, 大仙, 2018-10-21 22:22:53, 2018-10-21 22:23:19, 00:00:0-26, 00:00:00, http://api.clink.cn/20181113/3004850-20181021222253-13315863006-01042654511-record-10.10.60.148-1540131773.187944.mp3, test, 4
<==        Row: 389744, 13252808069, 辽宁, 沈阳市, 双方接听 , 点击外呼, 01053579500, 01042654511, 大仙, 2018-10-21 22:22:53, 2018-10-21 22:23:19, 00:00:0-26, 00:00:00, http://api.clink.cn/20181113/3004850-20181021222253-13315863006-01042654511-record-10.10.60.148-1540131773.187944.mp3, test, 4
<==        Row: 389743, 13252808069, 辽宁, 沈阳市, 双方接听 , 点击外呼, 01053579500, 01042654511, 大仙, 2018-10-21 22:22:53, 2018-10-21 22:23:19, 00:00:0-26, 00:00:00, http://api.clink.cn/20181113/3004850-20181021222253-13315863006-01042654511-record-10.10.60.148-1540131773.187944.mp3, test, 4
<==        Row: 389742, 13022455262, 辽宁, 沈阳市, 双方接听 , 点击外呼, 01053579500, 01042654511, 大仙, 2018-10-21 22:22:53, 2018-10-21 22:23:19, 00:00:0-26, 00:00:00, http://api.clink.cn/20181113/3004850-20181021222253-13315863006-01042654511-record-10.10.60.148-1540131773.187944.mp3, test, 4
<==        Row: 389741, 13022455262, 辽宁, 沈阳市, 双方接听 , 点击外呼, 01053579500, 01042654511, 大仙, 2018-10-21 22:22:53, 2018-10-21 22:23:19, 00:00:0-26, 00:00:00, http://api.clink.cn/20181113/3004850-20181021222253-13315863006-01042654511-record-10.10.60.148-1540131773.187944.mp3, test, 4
<==        Row: 389740, 13315863006, 河北, 衡水市, 双方接听 , 点击外呼, 01053579500, 01042654511, 大仙, 2018-10-21 22:22:53, 2018-10-21 22:23:19, 00:00:0-26, 00:00:00, http://api.clink.cn/20181113/3004850-20181021222253-13315863006-01042654511-record-10.10.60.148-1540131773.187944.mp3, test, 4
<==        Row: 389739, 13315863006, 河北, 衡水市, 双方接听 , 点击外呼, 01053579500, 01042654511, 大仙, 2018-10-21 22:22:53, 2018-10-21 22:23:19, 00:00:0-26, 00:00:00, http://api.clink.cn/20181113/3004850-20181021222253-13315863006-01042654511-record-10.10.60.148-1540131773.187944.mp3, test, 4
<==        Row: 389738, 13000117464, 北京, 北京, 双方接听 , 点击外呼, 01053579500, 01042654511, 大仙, 2018-10-21 22:22:53, null, null, 00:00:00, http://api.clink.cn/20181109/3004850-20181021222253-13315863006-01042654511-record-10.10.60.148-1540131773.187944.mp3, null, 4
<==        Row: 389737, 13000117464, 北京, 北京, 双方接听 , 点击外呼, 01053579500, 01042654511, 大仙, 2018-10-21 22:22:53, null, null, 00:00:00, http://api.clink.cn/20181109/3004850-20181021222253-13315863006-01042654511-record-10.10.60.148-1540131773.187944.mp3, null, 4
<==        Row: 389736, 13000117464, 北京, 北京, 双方接听 , 点击外呼, 01053579500, 01042654511, 大仙, 2018-10-21 22:22:53, null, null, 00:00:00, http://api.clink.cn/20181109/3004850-20181021222253-13315863006-01042654511-record-10.10.60.148-1540131773.187944.mp3, null, 4
<==      Total: 10
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@615132f7]
17:36:15.387 default [http-nio-7004-exec-7] INFO  c.x.sato.controller.CTIController - 结束时间:1542101775387

第二次查询结果:

17:37:04.522 default [http-nio-7004-exec-9] INFO  c.x.sato.controller.CTIController - 开始时间:1542101824522
keyGenerator=com.xuebaclass.sato.service.impl.CTIServiceImpl.getOutCallRecordList.ParamCallRecord(userName=null, customerNumber=null, callType=null, status=null, startTime=null, endTime=null, pageNum=null, pageSize=null)
17:37:04.563 default [http-nio-7004-exec-9] INFO  c.x.sato.controller.CTIController - 结束时间:1542101824563

说明缓存起了作用。

查看redis的存储结果:

点击查看value的结果

 

对于cache的说明,推荐一篇文章:https://www.cnblogs.com/yueshutong/p/9381540.html

猜你喜欢

转载自blog.csdn.net/zhuwei_clark/article/details/84032647