背景描述项目需要将设备采集到的最新经纬度信息存入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); }}
结果
参考
https://www.yisu.com/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); }}
以上就是java redis存map对象类型数据怎么实现的详细内容。