当前位置: 首页 > article >正文

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 连接正确。


http://www.kler.cn/news/330520.html

相关文章:

  • 机器学习-聚类
  • Android数据存储
  • 指针 (5)
  • 想学道家智慧,误打误撞被儒家引导读《道德经》?这是怎么回事?
  • Valhalla实现 -Docker部署利用OSM(Mapbox)地图实现路径规划可视化
  • 【Java】static-静态变量、静态方法、工具类、注意事项、args数组的使用
  • Cocotb 学习记录--V01
  • 【python面试宝典2】内存管理
  • Python编码系列—Python访问者模式:为对象结构添加新功能的艺术
  • uniapp实战教程:如何封装一个可复用的表单组件
  • wpf如何进行数据绑定与动态数据操作?
  • 力扣 —— 跳跃游戏
  • 以太网交换安全:MAC地址表安全
  • 关于邻域粗糙集的性质及自我理解
  • CMake所学
  • 【分布式微服务云原生】gRPC vs RPC:深入探索远程过程调用的现代与经典
  • SpringBoot与校园健康信息管理的融合
  • golang grpc进阶
  • Node.js 中使用 bcrypt 对密码进行哈希处理
  • C题(二)字符串转数字 --- atoi