java8 缓存对比并存值

可以使用 MyBatis 获取数据库数据为列表,然后使用 Java 8 的 Stream 流来对比 Redis 值。以下是一个示例实现:

import org.apache.ibatis.session.SqlSession;

import redis.clients.jedis.Jedis;

import java.util.List;

import java.util.stream.Collectors;

import java.util.logging.Logger;

public class OfferingCacheWithMyBatisAndStream {

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

private static final String REDIS_KEY = "cache";

public static void main(String\[\] args) {

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

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

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

try (Jedis jedis = new Jedis("localhost", 6379)) {

offeringList.stream()

.forEach(offering -> {

String name = offering.getName();

String code = offering.getCode();

String id = offering.getId();

String cachedValue = jedis.hget(REDIS_KEY, name);

if (cachedValue == null ||!cachedValue.equals(code + "," + id)) {

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

jedis.hset(REDIS_KEY, name, code + "," + id);

logger.info("Updated cache. Name: " + name + ", Code: " + code + ", ID: " + id);

}

});

}

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;

}

}

}

在上述代码中,首先使用 MyBatis 从数据库中查询数据得到一个列表,然后使用 Stream 流遍历列表中的每个元素,对比 Redis 中的缓存值,如果不同则更新缓存并记录日志。

请注意,你需要根据实际情况配置 MyBatis 的映射文件和数据库连接信息,并确保 Redis 连接正确。

相关推荐
李福春7 分钟前
斗破Google ADK Java苍穹-第5境斗灵-凝物通脉-Context与State
java·开发语言·人工智能·java-ee·google adk·深圳同盟·腾讯云架构师技术同盟
十年Java程序媛8 分钟前
Java 接口和抽象类对比|抛弃老旧八股,正确选型
java·开发语言·spring boot·后端
范中勤11 分钟前
OSS 多文件打包回流上传:流式管道无落地 VS 临时磁盘落地,两种工业方案深度对比
java·高并发·zip·oss·架构选型
无毁的湖光-Al12 分钟前
解Bug之路-隔离故障点后业务不恢复?-热点Key处理与亚稳态故障
java·数据库·mysql
Eyfcom19 分钟前
快递管理系统中的电子围栏实战:高德与谷歌双平台技术选型与实现
java·后端·快递管理系统
Rain的Java大神之路19 分钟前
Java PDF导出,90%的人选错库!11个生产坑+选型+代码,一次讲透
java·后端·面试
y1su21 分钟前
Leetcode 单调栈模板
java·开发语言·数据结构·算法·leetcode
郑州光合科技余经理34 分钟前
出海外卖平台:支付对接为什么要和下单收款分开
android·java·开发语言·前端·后端·php·ai编程
我是人✓40 分钟前
Spring框架的事务管理
java·后端·spring
javachen__1 小时前
JsonView:一套VO实现多角色字段返回
java·linux·服务器