关于使用RedisTemplate缓存hashMap的使用小结

在实际项目中我们经常需要使用到Redis缓存来持久化一些我们需要的数据。很多时候这些数据是使用HashMap存储的一些对象集合,这样形式的数据我们如何正确从Redis中存取呢?
在我实际使用的过程中使用了一个形式是Map 的HashMap。而JobProperty是一个内部类,这个内部类的结构如下:

static class JobProperty {//Notice: 因为是内部类必须添加static关键字,不然会抛异常,如:找不到可以使用的构造器之类的。
        @JsonProperty
        private String applicationId;

        @JsonProperty
        private JobStatus jobStatus;

        @JsonProperty
        private long startTime;

        public String getApplicationId() {
            return applicationId;
        }

        public void setApplicationId(String applicationId) {
            this.applicationId = applicationId;
        }

        public JobStatus getJobStatus() {
            return jobStatus;
        }

        public void setJobStatus(JobStatus jobStatus) {
            this.jobStatus = jobStatus;
        }

        public long getStartTime() {
            return startTime;
        }

        public void setStartTime(long startTime) {
            this.startTime = startTime;
        }

        @Override
        public String toString() {
            return "applicationId : " + applicationId + ", jobStatus : " + jobStatus + ", startTime : " + startTime;
        }
    }

注意: 用Redis只能存取静态内部类,不然找不着构造器,没法将对象从Redis缓存中按照你定义的格式反序列化成为object对象。
如何存入Redis缓存, 代码如下:

void updateRedisTemplate(String key, Map<String, JobProperty> map) {
        redisTemplate.opsForValue().set(key, JsonUtils.serialize(map), 7, TimeUnit.DAYS);
    }

如何从Redis缓存取出数据, 代码如下:

Map<String, JobProperty> getMap(String key) {
        if (redisTemplate.opsForValue().get(key) == null) {
            Map<String, JobProperty> newMap = new HashMap<>();
            redisTemplate.opsForValue().set(key, newMap, 7, TimeUnit.DAYS);
            return newMap;
        }
        ObjectMapper mapper = JsonUtils.getObjectMapper();
        Map<String, JobProperty> redisMap;
        try {
            redisMap = mapper.readValue((String) redisTemplate.opsForValue().get(key),
                    new TypeReference<Map<String, JobProperty>>() {
                    });
        } catch (IOException e) {
            log.error("get map from redisCache fail.", e);
            redisMap = new HashMap<>();
        }
        return redisMap;
    }

这样数据就可以正确的还原成你存入Redis之前的样子了~
其他的使用方法,其他大大们都有写文章,我就不在此赘述了。
欢迎有更好的方法一起交流~

你可能感兴趣的:(java)