java:缓存 json格式

以下是修改后的代码:

import org.apache.ibatis.session.SqlSession;

import org.springframework.data.redis.core.RedisTemplate;

import com.alibaba.fastjson.JSON;

import java.util.List;

import java.util.stream.Collectors;

import java.util.logging.Logger;

public class OfferingCacheWithMyBatisAndRedisTemplate {

private static final Logger logger = Logger.getLogger(OfferingCacheWithMyBatisAndRedisTemplate.class.getName());

private static final String REDIS_KEY = "Cache_key";

public static void main(String[] args) {

try (SqlSession sqlSession = MyBatisUtil.getSqlSessionFactory().openSession()) {

// 使用 MyBatis 查询数据库数据并获取列表

List<OfferingEntity> offeringList = sqlSession.selectList("mapper.OfferingMapper.selectOfferings");

RedisTemplate<String, String> redisTemplate = new RedisTemplate<>();

// 假设你已经正确配置了连接工厂

redisTemplate.setConnectionFactory(redisConnectionFactory);

offeringList.stream()

.forEach(offering -> {

String name = offering.getName();

boolean hasField = redisTemplate.opsForHash().hasKey(REDIS_KEY, name);

String cachedValue = hasField? (String) redisTemplate.opsForHash().get(REDIS_KEY, name) : null;

String jsonEntity = JSON.toJSONString(offering);

if (!hasField || (cachedValue!= null &&!cachedValue.equals(jsonEntity))) {

// 如果数据不同或者未缓存,更新缓存并记录日志

redisTemplate.opsForHash().put(REDIS_KEY, name, jsonEntity);

logger.info("Updated cache. Name: " + name);

}

});

sqlSession.commit();

} catch (Exception e) {

logger.severe("Error in cache update: " + e.getMessage());

}

}

// 假设的数据库实体类

static class OfferingEntity {

private String name;

private String code;

private String id;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getCode() {

return code;

}

public void setCode(String code) {

this.code = code;

}

public String getId() {

return id;

}

public void setId(String id) {

this.id = id;

}

}

}

在这段代码中,将实体类转换为 JSON 格式字符串进行存储。当需要获取数据时,可以从缓存中取出 JSON 字符串,再转换回实体类对象进行使用。这样可以方便地存储和组装数据。

相关推荐
BullSmall4 分钟前
SEDA (Staged Event-Driven Architecture, 分阶段事件驱动架构
java·spring·架构
Coder_Boy_32 分钟前
基于SpringAI的在线考试系统-DDD(领域驱动设计)核心概念及落地架构全总结(含事件驱动协同逻辑)
java·人工智能·spring boot·微服务·架构·事件驱动·领域驱动
黎雁·泠崖1 小时前
Java&C语法对比:分支与循环结构核心全解析
java·c语言
鹿角片ljp1 小时前
Java IO流案例:使用缓冲流恢复《出师表》文章顺序
java·开发语言·windows
毕设源码-郭学长1 小时前
【开题答辩全过程】以 广告投放管理系统为例,包含答辩的问题和答案
java
小北方城市网1 小时前
SpringBoot 集成 RabbitMQ 实战(消息队列解耦与削峰):实现高可靠异步通信
java·spring boot·python·微服务·rabbitmq·java-rabbitmq·数据库架构
java_t_t1 小时前
Maven插件apiscan介绍与使用
java·maven·api文档·maven插件
带刺的坐椅1 小时前
FastJson2 与 SnackJson4 有什么区别?
java·jsonpath·fastjon2·snack4
linweidong1 小时前
C++如何避免 ODR(One Definition Rule)冲突?
java·jvm·c++
毅炼1 小时前
hot100打卡——day09
java·leetcode