• Post Reply Bookmark Topic Watch Topic
  • New Topic
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other all forums
this forum made possible by our volunteer staff, including ...
Marshals:
  • Campbell Ritchie
  • Bear Bibeault
  • Devaka Cooray
  • Liutauras Vilda
  • Jeanne Boyarsky
Sheriffs:
  • Knute Snortum
  • Junilu Lacar
  • paul wheaton
Saloon Keepers:
  • Ganesh Patekar
  • Frits Walraven
  • Tim Moores
  • Ron McLeod
  • Carey Brown
Bartenders:
  • Stephan van Hulst
  • salvin francis
  • Tim Holloway

hibernate cache mode - put vs refresh  RSS feed

 
author & internet detective
Posts: 38906
684
Eclipse IDE Java VI Editor
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
The JavaDoc for CacheMode.PUT and CacheMode.REFRESH have the same first sentence "The session will never read items from the cache, but will add items to the cache as it reads them from the database."

REFRESH adds "In this mode, the effect of hibernate.cache.use_minimal_puts is bypassed, in order to force a cache refresh ". Presumably this sentence is the difference between the two.

I'm not sure I understand the difference. Is it that REFRESH forces a cache update and PUT only does it sometimes? (I do have a book, but it describes it in essentially the same way and I don't follow that either.)
 
Mark Spritzler
ranger
Posts: 17314
11
IntelliJ IDE Mac Spring
  • Likes 1
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
On a serious note.

I think it makes a little more sense in thinking in terms of using CacheMode on a query by query use case. In some cases you don't need to check the cache for data, you might be just adding stuff to the cache. Like lets say at startup we load the 50 states into our cache. Either PUT or REFRESH will load all 50 states into the cache. We don't need to read from the cache here, we are just loading into cache for our app to use later. In those later queries to get the states to present to the user, we don't need either PUT or REFRESH because we know the entire 50 states are already in the cache.

OK, now lets say we have some task that runs once a day, and it is to update some data that we put into the cache, that changes a little bit every 24 hours, and now we want to update that data that is now stale in the cache. Do we want to flush and refresh the entire cache region for this data or just update the things that changed. This I believe is the distinction between PUT and REFRESH. Put will just update the things that are changed, and refresh will clear out the entire cache region and reload everything. In the reload/REFRESH scenario is probably a bit faster if there is a lot of difference, and therefore doesn't have code that compares the new loaded data versus what is in the cache, which I think PUT would do.

Sounds like it now makes sense to me, but I can't guarantee it's accuracy. ;)

Mark
 
Jeanne Boyarsky
author & internet detective
Posts: 38906
684
Eclipse IDE Java VI Editor
 
Ranch Hand
Posts: 53
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
hi all,
As Mark has written

I think it makes a little more sense in thinking in terms of using CacheMode on a query by query use case. In some cases you don't need to check the cache for data, you might be just adding stuff to the cache.


This does make sense.
But my question is if the CacheMode.GET signifies :The session may read items from the cache, but will not add items, except to invalidate items when updates occur ;how on earth is it possible to have the objects in the cache in the first place if the session does not allow the data to be added to the Second level cache?

The same question pertains to CacheMode.PUT : The session will never read items from the cache, but will add items to the cache as it reads them from the database.. If the session does not allow items to be read from the cache then why would anybody read them to the second level cache in the first place?
Your response is appreciated.
Thank you all
Brendon
 
It is sorta covered in the JavaRanch Style Guide.
  • Post Reply Bookmark Topic Watch Topic
  • New Topic
Boost this thread!