有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

jsp如何实现java web应用程序属性缓存?

我用servlets 3.0和Ajax构建了一个简单的web应用程序,没有使用freamwork

应用程序从数据库呈现GUI组件。为了避免数据库故障导致应用程序无法工作的情况,我正在考虑使用一种缓存来为请求提供服务,而不是为每个HTTP GET请求访问数据库。如果请求的属性在该缓存中不可用,则从数据库获取,添加到缓存并为请求提供服务

我在阅读有关属性文件和内存缓存实现的内容时,遇到了无状态bean和会话bean,感到困惑。那么,实现这一目标的途径是什么

附言:我不喜欢使用任何freamwork


共 (2) 个答案

  1. # 1 楼答案

    恐怕你在这里混淆视听

    属性文件是包含键值对的纯文本文件,用于存储配置并在运行时读取它们。他们与你的问题几乎没有共同之处

    无状态bean和状态bean又是不同的。statefull bean可能有一个内部状态。也就是说,对同一方法的两次调用可能会产生不同的结果,即使上下文(db内容等)没有改变

    那么,实现缓存的方法是什么呢?没有用于缓存数据库请求的内置实用程序。最简单(但也是最幼稚)的方法是

    private final Map<String, String> componentCache = new HashMap<>();
    
    public String getComponentMarkup(String componentId, String... parameters){
        //Build a key for the parameters. Maybe simple stringconcatenation.
        String key=buildKey(componentId, parameters); 
        if (!componentCache.containsKey(key)){
            //Delegate the call to the "old" method which queries the database.
            String component = getComponentMarkupFromDb(componentId,parameters); 
            componentCache.put(key, component);
        }
        return componentCache.get(key);
    }
    

    但归根结底,您应该考虑为什么要自己实现缓存。对于你的问题(springhazelcastetc…)有很多经过测试的解决方案。 你的问题表明not invented here syndrom

  2. # 2 楼答案

    根据您想做什么,有几种方法:

    • 使用servlet过滤器在web层中缓存web请求
    • 在数据库访问层中缓存SQL请求

    web缓存将允许您基于URL模式和请求参数缓存请求,并允许您使用Cacheonix web缓存进行简单的操作。在web层中缓存的好处是,应用程序不必花费时间等待数据库和呈现响应

    缓存SQL请求有点复杂,但好处是您可以对数据库中的查询和缓存的结果集进行细粒度控制