Transcript Document

SCCFUG Winter 2002 Conference
Advance Caching
Techniques
Keen Haynes
MKAD
[email protected]
Introduction
•
•
•
•
What is caching?
Why is it important to me?
What can I cache?
How do I leverage caching
Introduction (cont.)
•
•
•
•
Template Cache
Trusted Cache
Database Connection Cache or Pooling
Query Caching
Template Cache
• Cache the HTML generated by a template
• Cache for a specified period
• Caching can be client-side, server-side or
both
<CFCACHE>
• Speeds up page rendering when dynamic
content does not have to be retrieved each
time a user accesses the page. To
accomplish this, cfcache creates
temporary files that contain the static
HTML returned from a ColdFusion page.
<CFCACHE> (cont.)
<cfcache
action = "cache" or "flush" or "clientCache" or "optimal"
username = "username"
password = "password"
protocol = "protocol name"
timeout = “timeout date-time"
directory = "directory name for map file"
cacheDirectory =“directory name for cached pages"
expireURL = "wildcarded URL reference"
port = "port-number">
<CFCACHE> (cont.)
• Client-side caching
<CFCACHE ACTION=“CLIENTCACHE”
• Server-side caching
<CFCACHE ACTION=“CACHE”
• Optimal – combination of client & server
<CFCACHE ACTION=“OPTIMAL”
• Refresh a cached page
<CFCACHE ACTION=“FLUSH”
<CFCACHE> (cont.)
<CFCACHE ACTION=“CACHE”
TIMEOUT=“#DateAdd(“h”, “-4”,
Now())#”>
<CFCACHE ACTION=“FLUSH”
EXPIREURL=“Customer.cfm?*”
Trusted Cache
• When checked, any requested files
found to currently reside in the
template cache will not be inspected
for potential updates – recommended
for sites that do not update during the
life of the server.
Trusted Cache (cont.)
Refreshing the template cache
– Uncheck the 'Trusted Cache' option in the
ColdFusion Administrator.
– Click Apply.
– Check the "Trusted Cache" option.
– Click Apply.
Caching and CF Admin
Database Connection Caching
• If "Maintain Database Connections" is enabled
for a data source, CF keeps the connection
open after its first connection to the database.
It does not log out of the database after this
first connection.
• Will create a new connection if a request is
using a data source connection that is already
opened, and another request is received
• The connection pool can increase up to the
setting for simultaneous connections limit
which is set for each data source.
Database Connection Caching
(cont.)
Caching and database queries
• What does ColdFusion do when it sees a
query?
• <CFQUERY>
• Cachedwithin
• Cachedafter
Caching and database queries (cont)
What does ColdFusion do when it sees a
query?
– Passes SQL content to appropriate driver (handled
by a thread)
– Waits for results to return before processing rest of
tag
– Will use existing instance of driver if data source
already in use
– Will cache connection information if “Maintain
Database Connections” is selected
Caching and database queries (cont)
<CFQUERY Name=“States” DATASOURCE=“test”
CACHEDWITHIN=#CreateTimeSpan(0,1,0,0)#>
SELECT state_name FROM tbl_state
</CFQUERY>
• CACHEDWITHIN (TIMESPAN) – caches the
query results for a specified time
• CACHEDAFTER (DATE) – caches the query
based on a particular date and time
Caching and database queries (cont)
<CFQUERY Name=“us_states” DATASOURCE=“States”
SELECT *
FROM us_states
ORDER BY State
</CFQUERY>
Caching and database queries (cont)
<CFQUERY Name=“us_states” DATASOURCE=“States”
CACHEDWITHIN=#CreateTimeSpan(0,1,0,0)#>
SELECT *
FROM us_states
ORDER BY State
</CFQUERY>
Caching and database queries (cont)
Points to remember:
• Queries are cached on a server-wide basis
• Documentation states query must use same
SQL statement, data source, query name, user
name, password, and DBTYPE (I did not find
this to be true for query name )
• SQL statements must be exactly the same –
this includes even tabbing
Caching and database queries (cont)
<CFQUERY Name=“States” DATASOURCE=“test”
CACHEDWITHIN=#CreateTimeSpan(0,1,0,0)#>
SELECT state_name FROM tbl_state
</CFQUERY>
IS NOT THE SAME QUERY AS
<CFQUERY Name=“States” DATASOURCE=“test2”
CACHEDWITHIN=#CreateTimeSpan(0,1,0,0)#>
SELECT state_name FROM tbl_state
</CFQUERY>
Caching and database queries (cont)
<CFQUERY Name=“States” DATASOURCE=“test”
CACHEDWITHIN=#CreateTimeSpan(0,1,0,0)#>
SELECT state_name FROM tbl_state
</CFQUERY>
IS NOT THE SAME QUERY AS
<CFQUERY Name=“States” DATASOURCE=“test”
CACHEDWITHIN=#CreateTimeSpan(0,1,0,0)#>
SELECT state_name
FROM tbl_state
</CFQUERY>
Caching and database queries (cont)
<cfquery name="us_states" datasource="States"
CACHEDWITHIN=#CreateTimeSpan(0,1,0,0)#>
SELECT
* (Note: tabbing)
FROM us_states
ORDER BY State
</cfquery>
Caching and database queries (cont)
More points to remember:
• Queries containing dynamic values will result
in an instance of each record setting being
cached
• Max limit of 100 cached queries was removed
with CF4.5
• Cached queries will not reflect changes to the
database until the cache interval has expired.
Caching and database queries (cont)
• Forcing an update of cached queries
This can be accomplished by following queries that
effect changes with a CFQUERY that contains a negative
CACHEDWITHIN value
<CFQUERY Name=“Customers” DATASOURCE=“test”
CACHEDWITHIN=#CreateTimeSpan(0,0,0,-1)#>
SELECT customer_name FROM tbl_customer
</CFQUERY>
Caching and database queries (cont)
<CFQUERY Name=“UpdateCustomer DATASOURCE=“test”>
UPDATE
</CFQUERY>
<CFQUERY Name=“Customers” DATASOURCE=“test”
CACHEDWITHIN=#CreateTimeSpan(0,0,0,-1)#>
SELECT customer_name FROM tbl_customer
</CFQUERY>
Advance Security Caching and
CF Admin
• Security Server Policy Store Cache caches Advanced
security information. By default, it is notified of
administrative changes to the policy store once every
minute. Using this cache provides the most noticeable
performance improvements with Advanced security.
• Security Server Authorization Cache caches each
unique isAuthorized call.
• ColdFusion Server Cache caches isAuthorized and
isProtected requests.
Advance Security Caching and
CF Admin (cont.)
Advance Security Caching and
CF Admin (cont.)
<CFOBJECTCACHE>
• The CFML Language Reference ommits[sic] a
new ColdFusion Server 5 tag, cfobjectcache. It
clears, or flushes, the entire query cache.
<cfobjectcache action="clear">
The action attribute must be set to clear. No
other values are supported.
• http://livedocs.macromedia.com/cf50docs/CF
ML_Reference/Tags78.jsp#1102316
Summary
• Things to consider
– Overhead
– Need for “current” information
• Identify candidates for caching – both long
running and frequently called queries and
templates
• Testing to verify expected results
<CFQUESTIONS>
?
</CFQUESTIONS>