redis的简单替换方案

由于项目服务器在内网,没有任何外网环境,保密要求极高,离线安装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;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值