java:缓存 json格式

devtools/2024/10/21 23:08:02/

以下是修改后的代码:
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 字符串,再转换回实体类对象进行使用。这样可以方便地存储和组装数据。


http://www.ppmy.cn/devtools/122166.html

相关文章

学会这几个简单的bat代码,轻松在朋友面前装一波13[通俗易懂]

大家好&#xff0c;又见面了&#xff0c;我是你们的朋友全栈君。 这个标题是干什么用的? 最近看晚上某些人耍cmd耍的十分开心&#xff0c;还自称为“黑客”&#xff0c;着实比较搞笑.他们那些花里胡哨的东西在外行看来十分nb,但只要略懂一些&#xff0c;就会发现他们的那些十…

Flask+微信小程序实现Login+Profile

Python代码 首先flask的session用不了&#xff0c;只能用全局变量来实现。 import pymysql from flask import Flask, request, jsonify, session from flask_cors import CORS from flask import make_responseapp Flask(__name__) CORS(app, supports_credentialsTrue) #…

音视频入门基础:FLV专题(8)——FFmpeg源码中,解码Tag header的实现

一、引言 在《音视频入门基础&#xff1a;FLV专题&#xff08;7&#xff09;——Tag header简介》中对Tag header进行了简介&#xff0c;本文讲述FFmpeg源码中是怎样解码FLV文件的Tag header&#xff0c;拿到里面的信息。 二、FFmpeg源码中&#xff0c;解码Tag header的实现 …

08-Registry搭建docker私仓

08-Registry搭建docker私仓 Docker Registry Docker Registry是官方提供的工具&#xff0c;用于构建私有镜像仓库。 环境搭建 Docker Registry也是Docker Hub提供的一个镜像&#xff0c;可以直接拉取运行。 步骤&#xff1a; 拉取镜像 docker pull registry启动Docker R…

代码随想录一刷完结

非常偶然的机会让我看到这个算法训练营的存在&#xff0c;虽然我也没有多大的动力&#xff0c;但当时就觉得没什么事情&#xff0c;想着刷刷题&#xff0c;为以后找工作打打基础。 收获 提示&#xff1a;在刷题过程中的收获 第一次使用CSDN记录&#xff0c;每次有别人点赞和收…

C++面试速通宝典——10

177. #include <filename> 和 #include "filname.h" 有什么区别&#xff1f; ‌‌‌‌  对于 #include <filename> &#xff0c; 编译器从标准库路径开始搜索 filename.h。 ‌‌‌‌  对于 #include "filename.h&#xff0c;编译器从用户的工作…

decltype推导规则

decltype推导规则 当用decltype(e)来获取类型时&#xff0c;编译器将依序判断以下四规则&#xff1a; 1.如果e是一个没有带括号的标记符表达式(id-expression)或者类成员访问表达式&#xff0c;那么decltype(e)就是e所命名的实体的类型。此外&#xff0c;如果e是一个被重载的函…

计算机毕业设计 助农产品采购平台的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…