java - 在哪里缓存: Database cache or App server using SessionScoped managed beans?

标签 java session caching jsf

我正在使用 Casssandra DB 和 Java 以及 JSF 2.0 构建 Web 应用程序。

Cassandra 有自己的缓存层,我还可以使用 JSF 中的 SessionsScoped 托管 bean 进行缓存。我想知道实现不同类型数据缓存的好方法是什么:要缓存的数据有时对于一种数据来说相当大,有时又很小(第二种)。

由于 Cassandra 行中的缓存数据列将以序列化格式和整个列结构存储数据,我想我最好将它们存储在应用程序服务器的 session 范围 bean 中,这样我还可以更好地控制缓存数据和缓存数据可能是最相关的,我想这两种情况下的硬件要求没有区别:- (1) 当我使用 sessionscoped beans 实现它时 (2) 如果我使用数据库缓存。

请列出这两种缓存实现可能带来的好处的任何差异。

最佳答案

不要(ab)使用 session 范围作为大型数据集的缓存。您基本上是为每个访问者复制缓存。您应该有一个缓存。数据库缓存完全没问题。

至于数据的大小,您应该有效地拥有一个请求或 View 作用域 bean,其中包含最终用户在特定请求中需要了解的数据。例如。当您通过分页显示包含 1000 个对象的数据集(每页 10 个对象)时,请求作用域 bean 应恰好包含这 10 个对象,并且剩余部分应保留在 DB/DB 缓存中。代码也应该这样编写,使其准确检索这 10 个对象(因此不要检索 1000 个对象,然后从中过滤出所需的 10 个对象)。

关于java - 在哪里缓存: Database cache or App server using SessionScoped managed beans?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5505275/

相关文章:

ios - 使用 AFNetworking 时,应用程序未下载最新的 plist。缓存?

android - 自定义 ListView 适配器,奇怪的 ImageView 行为

c# - 如何使用 C# 上传文件并将其保存到流中以供进一步预览?

java - 如何故意导致自定义 java 编译器警告消息?

java - jboss5 类加载器问题,spring 和 hibernate 尝试解析 applicationContext.xml

java - Java语言规范中synchronized中的synchronized是什么意思以及如何使用它来产生死锁?

PHP 用户级 session 持久化

asp.net - 如何使用 AJAX 从服务器获取信息而不重置 session 超时?

android - 使用 ETag 的 Volley 缓存

java - 我应该使用什么数组复制方法?