Learn More





DNN Community Blog

The Community Blog is a personal opinion of community members and by no means the official standpoint of DNN Corp or DNN Platform. This is a place to express personal thoughts about DNNPlatform, the community and its ecosystem. Do you have useful information that you would like to share with the DNN Community in a featured article or blog? If so, please contact .

The use of the Community Blog is covered by our Community Blog Guidelines - please read before commenting or posting.

Cache Persistence - Just for Web Farms?

Last week I was asked to help troubleshoot some performance issues with a large site running on a Web Farm.  In order to support Web Farms there are two settings in the web.config AppSettings.

  • WebFarmEnabled
  • CachePersistence

What do these settings do?  Well, in short they are used to help the memory-based caches remain in sync with each other in a Load Balanced situation.

If both settings are set to false, then the Cache is saved in the memory of the server processing the request.  If the Cache is cleared, for whatever reason, then the other servers are not "informed" of this so their Caches remain out of sync.

If the first setting "WebFarmEnabled" is set to true, then the Cache is still just saved in the memory of the server processing the request.  However, a Cache Dependency is applied to the Cache which is dependent on a file which is persisted in the common Portal Home Directory.  As each server's cache has a dependency on the same file, if the file is modified - then the cache is invalidated and the object will be reloaded from the database, and recached.

This file ONLY affects the cache IF it is changed - this the servers manage their own memory cache and the common file is used to invalidate - and keep in sync - memory caches if there is a change.

If the second setting "CachePersistence" is set to true then the same common file is created, except that the cached object is actually serialized to this file.  This allows the cache to be persisted across Application Restarts.  As long as the cache has not been explicitly cleared, then the cache provider can load (deserialize) this object back to the cache if the memory based cache has expired - which would be the case if the Application restarts.

So far so good.   However, the real point I want to make in this Blog is that this second setting can even help in situations where a web farm is not being used.  If you enable Cache Persistence and the memory cache expires then the Caching Provider first tries to load the object from the file saved in the common Portal Home Directory, and only if this has been explicitly cleared does it load from the database.

If you are in a situation where the database is a "Gating Resource" then you should consider using the setting.

Note: Not all cached objects are "persisted" in this way.  In addition to the AppSetting, the code has to call a specific method of the DataCache class.  Cached collections that are persisted in the core include:

  • Portals
  • Tabs
  • Modules 
  • TabPermissions
  • ModulePermissions


endrit pasho
hi Charles,
I have DNN pre-compiled and deployed on one serves which is on the DMZ. I have another server that has the DNN code - not complied seating behind the firewall which the purpose is to securely manage the site through a private URL locally and to have the Marketing staff approve the changes prior release. Both sites run fine, but when I make changes (add / remove module, change content...etc.), they appear on the local server but they don't on the other site. Both sites have one db in common so the content of pages should come from one db. This let me think that there is a caching mechanism on the application that I am not aware. I don't have output caching setup on neither servers. Can you point me to the right direction to solve this issue?

endrit pasho Tuesday, November 19, 2013 12:37 PM (link)

Comment Form

Only registered users may post comments.


2sic Daniel Mettler (124)
Aderson Oliveira (15)
Alec Whittington (11)
Alex Shirley (10)
Andrew Nurse (30)
Anthony Glenwright (5)
Antonio Chagoury (28)
Ash Prasad (21)
Ben Schmidt (1)
Benjamin Hermann (25)
Benoit Sarton (9)
Beth Firebaugh (12)
Bill Walker (36)
Bob Kruger (5)
Brian Dukes (2)
Brice Snow (1)
Bruce Chapman (20)
Bryan Andrews (1)
cathal connolly (55)
Charles Nurse (163)
Chris Hammond (203)
Chris Paterra (55)
Clinton Patterson (28)
Cuong Dang (21)
Daniel Bartholomew (2)
Dave Buckner (2)
David Poindexter (3)
David Rodriguez (2)
Doug Howell (11)
Erik van Ballegoij (30)
Ernst Peter Tamminga (74)
Geoff Barlow (6)
Gifford Watkins (3)
Gilles Le Pigocher (3)
Ian Robinson (7)
Israel Martinez (17)
Jan Blomquist (2)
Jan Jonas (3)
Jaspreet Bhatia (1)
Jenni Merrifield (6)
Joe Brinkman (269)
John Mitchell (1)
Jon Henning (14)
Jonathan Sheely (4)
Jordan Coopersmith (1)
Joseph Craig (2)
Kan Ma (1)
Keivan Beigi (3)
Ken Grierson (10)
Kevin Schreiner (6)
Leigh Pointer (31)
Lorraine Young (60)
Malik Khan (1)
Matthias Schlomann (15)
Mauricio Márquez (5)
Michael Doxsey (7)
Michael Tobisch (3)
Michael Washington (202)
Mike Horton (19)
Mitchel Sellers (28)
Nathan Rover (3)
Navin V Nagiah (14)
Néstor Sánchez (31)
Nik Kalyani (14)
Peter Donker (52)
Philip Beadle (135)
Philipp Becker (4)
Richard Dumas (22)
Robert J Collins (5)
Roger Selwyn (8)
Ruben Lopez (1)
Ryan Martinez (1)
Salar Golestanian (4)
Sanjay Mehrotra (9)
Scott McCulloch (1)
Scott S (11)
Scott Wilkinson (3)
Scott Willhite (97)
Sebastian Leupold (80)
Shaun Walker (237)
Shawn Mehaffie (17)
Stefan Cullmann (12)
Stefan Kamphuis (12)
Steve Fabian (31)
Timo Breumelhof (24)
Tony Henrich (3)
Torsten Weggen (2)
Vicenç Masanas (27)
Vincent Nguyen (3)
Vitaly Kozadayev (6)
Will Morgenweck (37)
Will Strohl (163)
William Severance (5)
Try Evoq
For Free
Start Free Trial
a Demo
See Evoq Live
Need More Information?