栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

springboots2+lettuce 将List<T>、复杂json传入redis

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

springboots2+lettuce 将List<T>、复杂json传入redis

本人需将查询结果处理拼接成jsonObject传入js,echarts生成图表
每个图表所需拼接返回的json数据格式不一样。
比如如下格式json 和List
存储数据格式

{
  "@class": "com.alibaba.fastjson.JSONObject",
  "result_data": [
    "java.util.ArrayList",
    [
      {
        "@class": "com.alibaba.fastjson.JSONObject",
        "title": "TOP5省份地区"
      },
      [
        "java.util.ArrayList",
        [
          "TOP5公司"
        ]
      ],
      [
        "java.util.ArrayList",
        [
          {
            "@class": "com.alibaba.fastjson.JSONObject",
            "max": 548015,
            "name": "上海市"
          },
          {
            "@class": "com.alibaba.fastjson.JSONObject",
            "max": 548015,
            "name": "浙江省"
          },
          {
            "@class": "com.alibaba.fastjson.JSONObject",
            "max": 548015,
            "name": "江苏省"
          }
        ]
      ],
      [
        "java.util.ArrayList",
        [248015,71583,51219,28074,17511]
      ]
    ]
  ]
}

List
"[{"sfdq":"上海市","numbers":248015},{"sfdq":"浙江省","numbers":71583},{"sfdq":"江苏省","numbers":51219},{"sfdq":"广州市","numbers":28074},{"sfdq":"北京市","numbers":17511}]"

本人使用springboot2+lettuce 连接redis

1. pom.xml文件增加 redis
        
            org.springframework.boot
            spring-boot-starter-data-redis
        
        
            org.apache.commons
            commons-pool2
        
2. 增加redis配置类

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
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.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.*;
import org.springframework.cache.interceptor.KeyGenerator;

import javax.annotation.Resource;
import java.time.Duration;
import java.util.HashMap;
import java.util.Map;

@Configuration
public class RedisTemplateConfig {


    @Configuration
    public class RedisConfig {

        @Resource
        private LettuceConnectionFactory lettuceConnectionFactory;
                private Logger logger= LoggerFactory.getLogger(RedisConfig.class);
        private Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
        //缓存生存时间

        private Duration timeToLive = Duration.ofDays(1);

        @Bean
        public RedisCacheManager cacheManager(RedisConnectionFactory connectionFactory) {

            //redis缓存配置
            RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
                    .entryTtl(this.timeToLive)
                    .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(keySerializer()))
                    .serializevaluesWith(RedisSerializationContext.SerializationPair.fromSerializer(valueSerializer()))
                    .disableCachingNullValues();
            Map cacheConfigurationMap = new HashMap<>();
            cacheConfigurationMap.put("users", config);
            cacheConfigurationMap.put("default", config);
            RedisCacheManager redisCacheManager = RedisCacheManager.builder(connectionFactory)
                    .cacheDefaults(config)
                    .transactionAware()
                    .withInitialCacheConfigurations(cacheConfigurationMap)
                    .build();
//            logger.debug("自定义RedisCacheManager加载完成");
            return redisCacheManager;
        }

        @Bean(name = "redisTemplate")
        public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) {
            RedisTemplate redisTemplate = new RedisTemplate<>();
            redisTemplate.setConnectionFactory(redisConnectionFactory);
            redisTemplate.setKeySerializer(keySerializer());
            redisTemplate.setHashKeySerializer(keySerializer());
            redisTemplate.setValueSerializer(valueSerializer());
            redisTemplate.setHashValueSerializer(valueSerializer());
            logger.debug("自定义RedisTemplate加载完成");
            return redisTemplate;
        }

        private RedisSerializer keySerializer() {
            return new StringRedisSerializer();
        }

        private RedisSerializer valueSerializer() {
            return new GenericJackson2JsonRedisSerializer();
        }

        @Bean
        public KeyGenerator myKeyGenerator() {
            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();
            };

        }
    }
}

 
3. 自动装配redisTemplate 
@Controller
public class XXXController {
    @Autowired
    private RedisTemplate redisTemplate;

}
4. 将数据存、取redis

对应方法内调用redusTemplate方法

//k-v
//存
List provinceDatas = mysql查询结果生成的List;
redisTemplate.opsForValue().set("provinceTop5", JSON.toJSON(provinceDatas).toString());
//取
String result = redisTemplate.opsForValue().get("provinceTop5").toString();
List provinceTop5 = JSON.parseArray(result, ProvinceData.class);
//------------------------------------------------------------------------------------------------
//hash
//存
redisTemplate.opsForHash().put("mv", "sumofyesterday", sumofyesterday);
//取
String rateofpredict = redisTemplate.opsForHash().get("mv", "sumofyesterday").toString();

转载请注明:文章转载自 www.mshxw.com
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号