Java redis存Map对象类型数据的实现(java哥)

网友投稿 464 2022-07-30


目录背景描述实体类父类子类方法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 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 redisDataMap = new HashMap();

redisDataMap.put(redis1.getName(), redis1);

redisDataMap.put(redis2.getName(), redis2);

//存入redis

redisTemplate.opsForHash().putAll("redisTest",redisDataMap);

//获取缓存内容

Map resultMap = redisTemplate.opsForHash().entries("redisTest");

//List reslutMapList = redisTemplate.opsForHash().values("redisTest");

//Set resultMapSet = redisTemplate.opsForHash().keys("redisTest");

//RedisCustom value = (RedisCustom)redisTemplate.opsForHash().get("redisTest","小明");

return ResponseData.success(resultMap);

}

}

结果

参考https://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

* @rethttp://urn

*/

@RequestMapping(value = "/setRedisData", method = RequestMethod.GET)

@ResponseBody

public Map 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 redisDataMap = new HashMap();

redisDataMap.put(redis1.getName(), redis1);

redisDataMap.put(redis2.getName(), redis2);

//连接redis

Jedis redis = new Jedis("xx.xx.xxx.xx", 6379);

redis.auth("xxxxxxxxxxx");

//存

BTbhngwG byte[] personByte = SerializeObjectTool.serialize(redisDataMap);

redis.set("redisData".getBytes(), personByte);

//取

byte[] byt = redis.get("redisData".getBytes());

Object obj = SerializeObjectTool.unserizlize(byt);

Map redisData = (Map) obj;

return ResponseData.success(redisData);

}

}

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


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Spring之@Aspect中通知的5种方式详解(spring aspect使用)
下一篇:汇总Java中List 去重的 6 种方法(java百度文库)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~