标签: session-cache

Hibernate查询缓存 - 对于不在二级缓存中的对象 - 有风险吗?有用?不好的做法?

与此问题相关

前提:

这些是我的假设,根据我的阅读,经验和理解,他们可能是错的,如果他们是,请评论,我会编辑问题.

  • 查询缓存主要与二级缓存一起使用
  • 查询缓存缓存查询+参数的标识符结果
  • 如果数据库已更改,则查询缓存存在风险,并且未将其反映到缓存中

题:

我有一个不在二级缓存中的对象.由于一些糟糕的编程或其他约束,加载对象的代码在同一个休眠会话中被多次调用.回顾是使用HQL查找查询,例如

 hibernateTemplate.find("from Foo f where f.bar > ?", bar);
Run Code Online (Sandbox Code Playgroud)

在添加查询缓存之前,如果上述代码在同一个Hibernate会话中被调用了N次,那么数据库就会有N次命中

然后我想看看如果添加查询缓存会发生什么:

 Query query = session.createQuery("from Foo f where f.bar > ?");
 query.setCacheable(true);
 query.setParameter(bar);
 query.list();
Run Code Online (Sandbox Code Playgroud)

当我添加查询缓存时,我注意到在同一个会话期间,hibernate不会再次访问数据库N次,每个会话只有一次.

  1. 所以我的第一个假设是Hibernate首先在Session Cache中搜索,然后在2nd Level Cache中搜索.这个假设是否正确?
  2. 我还假设如果Foo不在第二级缓存中的object()在数据库中被更改,那么查询缓存(跨会话范围)将返回错误的标识符,从而返回错误的对象.那是对的吗?
  3. 那么,对于包含不可变信息的查询,即使对于非2L缓存对象,使用查询缓存是否安全可行?(例如,其where子句包含将始终返回相同结果的条件的查询,例如,当ser_num和id对在创建后不更改时,"select p.ser_num where p.id =?")

顺便说一下,在相关问题中声称查询缓存不适用于会话缓存范围.我想知道这个说法或其他什么吗?

hibernate second-level-cache session-cache query-cache

10
推荐指数
1
解决办法
6470
查看次数

Hibernate HQL只能访问会话缓存

我在理解HQL查询从哪里获取信息时遇到了一些麻烦.我的项目使用不同的线程,每个线程读/写数据库.线程不共享Session对象,而是使用HibernateUtil为我创建会话的类.

直到最近,我只会在写完后关闭一个会议,但不会在阅读后关闭.对数据的更改将立即在数据库中看到,但是当读取其他线程(与用于写入的对象不同的Session对象)时,我会得到陈旧的信息.读取和写入总是发生在不同的线程上,这意味着不同的Session对象和不同的会话缓存.

我一直认为通过使用HQL而不是Criteria,我会始终瞄准数据库(或二级缓存)而不是会话缓存,但在调试我的代码时,我清楚地知道HQL正在寻找会话缓存中的对象并检索一个旧的过时的对象.

假设HQL总是以数据库为目标,我错了吗?或者至少是二级缓存?

PS:我只使用一个SessionFactory物体.

database hibernate hql session-cache

7
推荐指数
1
解决办法
3582
查看次数

如何在会话级别启用hibernate查询缓存?

如果我在一个线程中多次调用一个查询,我只想为该线程缓存该查询(及其结果)(或者因为我每个线程使用一个会话,因为该会话),该怎么办?我这样做?

注意:我的第二级缓存已打开,但它主要用于session.get(...).但是我不想将它用于我的查询缓存,因为我只需要它在我的线程(/ session)期间存活.

谢谢

session multithreading hibernate session-cache query-cache

6
推荐指数
2
解决办法
4297
查看次数

Django项目寻找"属性'_session_cache'"

所以我有一个不使用数据库的Django项目('DATABASES'设置被注释掉了).我选择使用Django,因为我将来可能需要数据库功能.无论如何,我已经在这个项目上工作了几个月而没有任何问题.我正在运行Linux Mint,python manage.py runserver到目前为止使用该命令并没有遇到麻烦.

好吧,今天我启动了应用程序并启动了本地服务器没有任何问题.然后我尝试在浏览器中打开应用程序并收到相当可怕的错误消息:

Traceback (most recent call last):
  File "/home/peter/.virtualenvs/vis_it/lib/python3.3/site-packages/django/contrib/sessions/backends/base.py", line 170, in _get_session
    return self._session_cache
AttributeError: 'SessionStore' object has no attribute '_session_cache'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/peter/.virtualenvs/vis_it/lib/python3.3/site-packages/django/core/handlers/base.py", line 87, in get_response
    response = middleware_method(request)
  File "/home/peter/.virtualenvs/vis_it/lib/python3.3/site-packages/django/contrib/auth/middleware.py", line 34, in process_request
    if user and hasattr(user, 'get_session_auth_hash'):
  File "/home/peter/.virtualenvs/vis_it/lib/python3.3/site-packages/django/utils/functional.py", line 224, in inner
    self._setup()
  File "/home/peter/.virtualenvs/vis_it/lib/python3.3/site-packages/django/utils/functional.py", line 357, in _setup
    self._wrapped = self._setupfunc()
  File "/home/peter/.virtualenvs/vis_it/lib/python3.3/site-packages/django/contrib/auth/middleware.py", line …
Run Code Online (Sandbox Code Playgroud)

python database django session-cache

6
推荐指数
3
解决办法
5833
查看次数