您当前的位置: 首页 >  redis

zmc@

暂无认证

  • 3浏览

    0关注

    142博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

重点-(测试通过)-redis实践

zmc@ 发布时间:2019-01-08 10:53:02 ,浏览量:3

 

重点是注释的部分:

使用redis:

package com.fangdd.esf.web.server.service.impl;

import com.fangdd.esf.customercommon.protocol.Entity.search.house.HouseFilterRequest;
import com.fangdd.esf.customercommon.protocol.Entity.search.house.HouseResult;
import com.fangdd.esf.customercommon.protocol.rest.response.SearchResponse;
import com.fangdd.esf.web.server.adapter.SearchAdapter;
import com.fangdd.esf.web.server.service.EstateSearchService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Component;
import java.util.List;


@Component
//@CacheConfig(cacheNames = "EstateSearchService")
public class EstateSearchServiceImpl implements EstateSearchService {

    private static final Logger logger = LoggerFactory.getLogger(EstateSearchServiceImpl.class);

    @Autowired
    private SearchAdapter searchAdapter;

//    @Autowired
//    private RedisTemplate objectRedisTemplate;

    @Override
    //@Cacheable(key = "'sectionsEstate_'+ #filter.getCompanyId()+'_'+#filter.getCityId()+'_'+#filter.getSectionIds()", condition = "#filter.getCompanyId() != null && #filter.getCityId() != null && #filter.getSectionIds() != null",value="EstateSearchService#180#60",unless = "#result == null")   //#${select.cache.timeout:1000}
    public SearchResponse searchHouseByFilter(HouseFilterRequest filter, Integer type) {
/*
        String key="sectionsEstate_"+ filter.getCompanyId()+"_"+filter.getCityId()+"_"+filter.getSectionIds();
        boolean hasKey = objectRedisTemplate.hasKey(key);
        if(hasKey){

            SearchResponse res=new SearchResponse();
            //反序列化成对象
            JSONObject obj=(JSONObject)objectRedisTemplate.opsForValue().get(key); //com.alibaba.fastjson.JSONObject
            JSONArray jsonArray = obj.getJSONArray("records");
            Long total=obj.getLong("total");
            Long recommendTotal=obj.getLong("recommendTotal");
            List li= Lists.newArrayList();
            for(int i=0;i {
            StringBuilder sb = new StringBuilder();
            sb.append(target.getClass().getName());
            sb.append(method.getName());
            for (Object obj : params) {
                sb.append(obj.toString());
            }
            return sb.toString();
        };
    }

    @SuppressWarnings("rawtypes")
    @Bean
    public CacheManager cacheManager(RedisTemplate redisTemplate) {

        RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate);
        String env = settings.getEnvironment();
        if ("dev".equals(env) || "test".equals(env) || "pre".equals(env)) {
            cacheManager.setDefaultExpiration(10);
        } else {
            cacheManager.setDefaultExpiration(1800);
            cacheManager.setExpires(ImmutableMap.of("wechatMiniProgram", 2 * 60 * 60L));
            cacheManager.setExpires(ImmutableMap.of("AgentAdapterCache", 1800L));
            cacheManager.setExpires(ImmutableMap.of("AgentServiceImplCache", 2 * 60 * 60L));
            cacheManager.setExpires(ImmutableMap.of("NccAdapterCache", 1800L));
            cacheManager.setExpires(ImmutableMap.of("BrandBlockListInfo", 1800L));
        }
        cacheManager.setUsePrefix(true);
        cacheManager.setCachePrefix(new CachePrefix(PREFIX, "_"));
        return cacheManager;
    }

    @Override
    public CacheErrorHandler errorHandler() {
        return new CacheErrorHandler() {
            @Override
            public void handleCacheGetError(RuntimeException exception, Cache cache, Object key) {
                logger.error("cache get error, key = {}, ex = ", key, exception);
            }

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

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

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

    @SuppressWarnings({ "rawtypes", "unchecked" })
    @Bean
    public RedisTemplate redisTemplate(RedisConnectionFactory 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);
        om.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        jackson2JsonRedisSerializer.setObjectMapper(om);
        template.setValueSerializer(jackson2JsonRedisSerializer);
        template.afterPropertiesSet();
        return template;
    }

/*
    @SuppressWarnings({ "rawtypes", "unchecked" })
    @Bean
    public RedisTemplate objectRedisTemplate(RedisConnectionFactory factory) {
        RedisTemplate template = new RedisTemplate();
        template.setConnectionFactory(factory);
        template.setKeySerializer(new StringRedisSerializer());

        template.setValueSerializer(new FastJsonRedisSerializer(Object.class));
        //template.setValueSerializer(new Jackson2JsonRedisSerializer(Object.class));
        return template;
    }
*/
    @Bean
    public RedisConnectionFactory redisConnectionFactory(
            @Value("${spring.redis.host}") String host,
            @Value("${spring.redis.port}") Integer port,
            @Value("${spring.redis.pool.max-idle}") Integer maxIdle,
            @Value("${spring.redis.pool.max-wait}") Long maxWaitMillis,
            @Value("${spring.redis.pool.max-active}") Integer maxTotal,
            @Value("${spring.redis.pool.min-idle}") Integer minIdle){
        JedisConnectionFactory factory = new JedisConnectionFactory();
        factory.setHostName(host);
        factory.setPort(port);

        JedisPoolConfig config = new JedisPoolConfig();
        config.setMaxIdle(maxIdle);
        config.setMaxWaitMillis(maxWaitMillis);
        config.setMaxTotal(maxTotal);
        config.setMinIdle(minIdle);
        factory.setPoolConfig(config);
        return factory;
    }

}

class CachePrefix implements RedisCachePrefix {

    private final RedisSerializer serializer = new StringRedisSerializer();
    private final String delimiter;
    private final String prefix;


    public CachePrefix(String prefix, String delimiter) {
        this.delimiter = delimiter;
        this.prefix = prefix;
    }

    @Override
    public byte[] prefix(String cacheName) {
        return serializer.serialize(String.join(delimiter, prefix, cacheName, ""));
    }
}

 

 

关注
打赏
1643271353
查看更多评论
立即登录/注册

微信扫码登录

0.0379s