由于项目服务器在内网,没有任何外网环境,保密要求极高,离线安装redis非常繁琐,为了解决这一问题,造了个小轮子,手搓简单的redis实现代码。
import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.annotation.PostConstruct; import java.util.HashMap; import java.util.Map; @Service @Slf4j public class MyRedisService { public static Map<String, Object> RedisMerge = null; private String fileDat = ""; @Autowired EnvConfig envConfig; @PostConstruct public void init() { fileDat = envConfig.getDeepSeekRedisDatFile();//设置自己的数据存放路径,例如"/home/redis.dat" if (RedisMerge == null) { java.io.File file = new java.io.File(fileDat); if (file.exists()) { log.info("File {} exists.", fileDat); try (java.io.FileInputStream fis = new java.io.FileInputStream(file); java.io.ObjectInputStream ois = new java.io.ObjectInputStream(fis)) { RedisMerge = (Map<String, Object>) ois.readObject(); } catch (Exception e) { log.error("Error reading file {}: {}", fileDat, e.getMessage()); RedisMerge = new HashMap<>(); } } else { RedisMerge = new HashMap<String, Object>(); log.warn("File {} does not exist.", fileDat); } } } public void set(String key, Object value, Long time) { set(key, value); } public void set(String key, Object value){ RedisMerge.put(key, value); setMapToDat(); } private void setMapToDat(){ try (java.io.FileOutputStream fos = new java.io.FileOutputStream(fileDat); java.io.ObjectOutputStream oos = new java.io.ObjectOutputStream(fos)) { oos.writeObject(RedisMerge); } catch (Exception e) { log.error("Error writing to file {}: {}", fileDat, e.getMessage()); } } public Boolean hasKey(String key) { return RedisMerge.containsKey(key); } public <T> T get(final String key) { Object tmp = RedisMerge.get(key); return (T)tmp; } public Boolean hset(String key, String item, Object value, Long time) { return hset(key, item, value); } public Boolean hset(String key, String item, Object value) { if (!RedisMerge.containsKey(key)) { RedisMerge.put(key, new HashMap<String, Object>()); } Map<String, Object> map = (Map<String, Object>) RedisMerge.get(key); map.put(item, value); setMapToDat(); return true; } public Map<String, Object> hmget(final String key) { Map<String, Object> map = (Map<String, Object>) RedisMerge.get(key); return map; } }