目录
  • 背景描述
  • 实体类
    • 父类
    • 子类
  • 方法1°
    • 方法2°

      背景描述

      项目需要将设备采集到的最新经纬度信息存入redis缓存中,方便及时查询检索。考虑到根据检索条件不同,所查询的设备不同。采取将数据以map类型存入redis缓存,在此记录一下。

      实体类

      注:一定要实现序列化接口

      父类

      public class Redis implements Serializable{
      
          private String name;
          private Integer age;
      
          public String getName() {
              return name;
          }
          public void setName(String name) {
              this.name = name;
          }
          public Integer getAge() {
              return age;
          }
          public void setAge(Integer age) {
              this.age = age;
          }
      }

      子类

      import java.io.Serializable;
      
      public class RedisCustom extends Redis {
      
          private String stuCode;
      
          public String getStuCode() {
              return stuCode;
          }
          public void setStuCode(String stuCode) {
              this.stuCode = stuCode;
          }
      }

      方法1°

      redisTemplate.opsForHash()
      

      示例代码

      @Controller
      @RequestMapping("/redis")
      public class RedisController {
      
          @Autowired
          private RedisTemplate redisTemplate;
      
          /**
           * @param
           * @return
           */
          @RequestMapping(value = "/setRedisData", method = RequestMethod.GET)
          @ResponseBody
          public Map<String, Object> setRedisData() {
      
              RedisCustom redis1 = new RedisCustom();
              redis1.setName("小明");
              redis1.setAge(12);
              redis1.setStuCode("36");
              RedisCustom redis2 = new RedisCustom();
              redis2.setName("小红");
              redis2.setAge(11);
              redis2.setStuCode("24");
      
              //构造存入redis中的map
              Map<String, RedisCustom> redisDataMap = new HashMap<String, RedisCustom>();
              redisDataMap.put(redis1.getName(), redis1);
              redisDataMap.put(redis2.getName(), redis2);
      
              //存入redis
              redisTemplate.opsForHash().putAll("redisTest",redisDataMap);
              //获取缓存内容
              Map<String,RedisCustom> resultMap = redisTemplate.opsForHash().entries("redisTest");
              
              //List<RedisCustom> reslutMapList = redisTemplate.opsForHash().values("redisTest");
              //Set<RedisCustom> resultMapSet = redisTemplate.opsForHash().keys("redisTest");
              //RedisCustom value = (RedisCustom)redisTemplate.opsForHash().get("redisTest","小明");
              
              return ResponseData.success(resultMap);
          }
      }

      结果

      Java redis存Map对象类型数据的实现

      参考
      https://www.jb51.net/article/246815.htm

      方法2°

      将对象转成byte[]

      序列化及反序列化工具类

      import java.io.*;
      
      /**
       * 序列化及反序列化工具类
       */
      public class SerializeObjectTool {
          //序列化
          public static byte[] serialize(Object obj) {
              ObjectOutputStream obi = null;
              ByteArrayOutputStream bai = null;
              try {
                  bai = new ByteArrayOutputStream();
                  obi = new ObjectOutputStream(bai);
                  obi.writeObject(obj);
                  byte[] byt = bai.toByteArray();
                  return byt;
              } catch (IOException e) {
                  e.printStackTrace();
              }
              return null;
          }
      
          // 反序列化
          public static Object unserizlize(byte[] byt) {
              ObjectInputStream oii = null;
              ByteArrayInputStream bis = null;
              bis = new ByteArrayInputStream(byt);
              try {
                  oii = new ObjectInputStream(bis);
                  Object obj = oii.readObject();
                  return obj;
              } catch (Exception e) {
                  e.printStackTrace();
              }
              return null;
          }
      }

      示例代码

      @Controller
      @RequestMapping("/redis")
      public class RedisController {
          /**
           * @param
           * @return
           */
          @RequestMapping(value = "/setRedisData", method = RequestMethod.GET)
          @ResponseBody
          public Map<String, Object> setRedisData() {
          
              RedisCustom redis1 = new RedisCustom();
              redis1.setName("小明");
              redis1.setAge(12);
              redis1.setStuCode("36");
              RedisCustom redis2 = new RedisCustom();
              redis2.setName("小红");
              redis2.setAge(11);
              redis2.setStuCode("24");
      
              //构造存入redis中的map
              Map<String, RedisCustom> redisDataMap = new HashMap<String, RedisCustom>();
              redisDataMap.put(redis1.getName(), redis1);
              redisDataMap.put(redis2.getName(), redis2);
      
              //连接redis
              Jedis redis = new Jedis("xx.xx.xxx.xx", 6379);
              redis.auth("xxxxxxxxxxx");
              
              //存
              byte[] personByte = SerializeObjectTool.serialize(redisDataMap);
              redis.set("redisData".getBytes(), personByte);
              //取
              byte[] byt = redis.get("redisData".getBytes());
              Object obj = SerializeObjectTool.unserizlize(byt);
      
              Map<String, RedisCustom> redisData = (Map<String, RedisCustom>) obj;
      
              return ResponseData.success(redisData);
          }
      }

      参考
      https://blog.csdn.net/chris_111x/article/details/85236458

      声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。