Java redis存Map對象類型數(shù)據(jù)的實現(xiàn)
背景描述
項目需要將設備采集到的最新經(jīng)緯度信息存入redis緩存中,方便及時查詢檢索??紤]到根據(jù)檢索條件不同,所查詢的設備不同。采取將數(shù)據(jù)以map類型存入redis緩存,在此記錄一下。
實體類
注:一定要實現(xiàn)序列化接口
父類
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);
? ? }
}結果

參考
http://m.fzitv.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
到此這篇關于Java redis存Map對象類型數(shù)據(jù)的實現(xiàn)的文章就介紹到這了,更多相關Java redis存Map對象類型內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Spring-boot集成pg、mongo多數(shù)據(jù)源過程詳解
這篇文章主要介紹了Spring-boot集成pg、mongo多數(shù)據(jù)源過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-10-10
Spring中的DeferredImportSelector實現(xiàn)詳解
這篇文章主要介紹了Spring中的DeferredImportSelector實現(xiàn)詳解,兩個官方的實現(xiàn)類AutoConfigurationImportSelector和ImportAutoConfigurationImportSelector都是Spring Boot后新增的實現(xiàn),需要的朋友可以參考下2024-01-01
如何在 Linux 上搭建 java 部署環(huán)境(安裝jdk/tomcat/mys
這篇文章主要介紹了如何在 Linux 上搭建 java 部署環(huán)境(安裝jdk/tomcat/mysql) + 將程序部署到云服務器上的操作),本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-01-01
Java springboot項目jar發(fā)布過程解析
這篇文章主要介紹了Java springboot項目jar發(fā)布過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-09-09

