有时候,为了减少数据库表的关联,提高查询效率,我们会把码表的数据在程序加载的时候加载进redis里,下面就是一个简单的存取代码
1,启动类:注意加粗加线的部分,表示启动的时候会执行的方法。
public class StartUp extends SpringBootServletInitializer implements CommandLineRunner {
@Autowired(required = false)
SpringInitRedisService springInitRedisService;
public static void main(String[] args) {
SpringApplication.run(StartUp.class,args);
}
@Override
public void run(String... args) {
springInitRedisService.findSystemParamToRedis();
}
}
2,其他略过,直接看方法,为了便于理解,直接把存储和获取的代码放进一个方法里了。具体过程就是把model数据转成json存进redis里,然后在获取。转成model。根据关联的字段获取想要的值。
一般来讲,项目组会把存储的过程会封装一下在使用,翻译码值的时候也会使用自定义的方法进行翻译,这里为了简便,略过。
/**
* 获取码表保存到redis
* @return
*/
private void findCode(){
// 获取码表的数据
List<ShopCodeModel> shopCodeModels = shopCodeMapper.findSysCodes();
// 放进map里
Map<String, String> maps = new HashMap<>(16);
for (int i = 0; i < shopCodeModels.size(); i++) {
// 转成json import com.alibaba.fastjson.JSON;
maps.put(shopCodeModels.get(i).getCode(), JSON.toJSONString(shopCodeModels.get(i)));
}
Jedis jedis = new Jedis("localhost");
// 存入redis
jedis.hmset("cece", maps);
// 获取redis的数据
Map<String, String> map = jedis.hgetAll("cece");
if (null != map && !map.isEmpty() && map.size() > 0) {
// 需要翻译的字段。也就是需要关联码表的字段。 import cn.hutool.json.JSONObject;
JSONObject json = new JSONObject(map.get("fruit_1"));
// 把 JSONObject 转成 model
ShopCodeModel stu = json.toBean(ShopCodeModel.class);
System.out.println("结果:" + stu);
// 结果:ShopCodeModel(code=fruit_1, codeName=榴莲, codeSort=1)
}
}