Chapter 18. mod_perl Data-Sharing Techniques
In this chapter, we discuss the ways mod_perl makes it possible to share data between processes or even between different handlers.
Sharing the Read-Only Data in and Between Processes
If you need to access some data in your code that’s static and will not be modified, you can save time and resources by processing the data once and caching it for later reuse. Since under mod_perl processes persist and don’t get killed after each request, you can store the data in global variables and reuse it.
For example, let’s assume that you have a rather
expensive function, get_data( ), which returns
read-only data as a hash. In your code, you can do the following:
...
use vars qw(%CACHE);
%CACHE = get_data( ) unless %CACHE;
my $foo = $CACHE{bar};
...This code creates a global hash, %CACHE, which is
undefined when the code is executed for the first time. Therefore,
the get_data( ) method is called, which hopefully
populates %CACHE with some data. Now you can
access this data as usual.
When the code is executed for the second time within the same
process, the get_data( ) method will not be called
again, since %CACHE has the data already (assuming
that get_data( ) returned data when it was called
for the first time).
Now you can access the data without any extra retrieval overhead.
If, for example, get_data( ) returns a reference
to a list, the code will look like this:
.... use enum qw(FIRST SECOND THIRD); use vars qw($RA_CACHE); $RA_CACHE = get_data( ) unless ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access