这篇文章主要介绍“Java redis存Map对象类型数据怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java redis存Map对象类型数据怎么实现”文章能帮助大家解决问题。
项目需要将设备采集到的最新经纬度信息存入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;
}
}
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);
}
}
结果
参考
https://www.yisu.com/article/246815.htm
将对象转成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);
}
}
关于“Java redis存Map对象类型数据怎么实现”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注亿速云行业资讯频道,小编每天都会为大家更新不同的知识点。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。