Schema caching

Schema caching – How to enable schema caching

Net_LDAP2s schema caching facility

Net_LDAP2 features an easy schema caching facility. Caching the schema can gain some performance, especially with slow servers or connections. The facility works with an plugin object that must be passed to Net_LDAP2s registerSchemaCache() method. The cache object can be registered (or unregistered) at any time, but of course it is the best time right after initializing Net_LDAP2.

Enabling/disabling Net_LDAP2s schema caching facility

<?php
// registering a valid schema cache object is enough to enable the caching facility:
$ldap->registerSchemaCache($myCacheObject);

// unregistering is easy too: just supply null as schema cache object:
$ldap->registerSchemaCache(null);
?>

The object that gets passed to registerSchemaCache() must implement the Net_LDAP2_SchemaCache interface which demands two methods. Initialisation of the cache object is dependent on the class itself but should be handled inside the cache class constructor, however this may vary. Please refer to the cache class documentation for those details.

Net_LDAP2_SchemaCache interface methods
Method Parameter Return value Description
loadSchema() none Net_LDAP2_Schema, Net_LDAP2_Error or false Returns the cached schema object. Net_LDAP2 will consider anything returned invalid, except a valid Net_LDAP2_Schema object. In case you return a Net_LDAP2_Error, this error will be routed to the return of the $ldap->schema() call. If you return something else, Net_LDAP2 will fetch a fresh Schema object from the LDAP server and tries to cache it via store(). You may also want to implement a cache aging mechanism here too.
storeSchema() Net_LDAP2_Schema object true or (in special cases) Net_LDAP2_Error Stores a schema object in the cache. This method will be called, if Net_LDAP2 has fetched a fresh schema object from LDAP and wants to init or refresh the cache. In case of errors you may return a Net_LDAP2_Error which will be routet to the client. Note that doing this prevents, that the schema object fetched from LDAP will be given back to the client, so only return errors if storing of the cache is something crucial (e.g. for doing something else with it). Normaly you dont want to give back errors in which case Net_LDAP2 needs to fetch the schema once per script run and use the error functionality of loadSchema().

Packaged schema cache classes

As of Net_LDAP2 2.0.0, there is one default schema caching class: Net_LDAP2_SimpleFileSchemaCache to make your life a little easier. Caching to files should also be the most commonly used case.

This cache class is built to be flexible yet simple to use and may serve as example to write own caching classes. This cache stores the schema object in a flat file. The path is freely configurable. It also servers a cache aging mechanism that can be used to invalidate the cached schema after some time so it will be refreshed regularly.

To use this cache, you firstly need to initialize and configure a fresh cache object. Then the cache must be registered with the Net_LDAP2 instance. After that, Net_LDAP2 will use the cache.

Initializing the SimpleFileSchemaCache

<?php
$myCacheConfig 
= array(
        
'path'    => '/tmp/Net_LDAP_Schema.cache'// may reside on an linux tmpfs for improved performance
        
'max_age' => 1200                          // in seconds, use 0 for endlessly
);
$myCacheObject = new Net_LDAP2_SimpleFileSchemaCache($myCacheConfig);
$ldap->registerSchemaCache($myCacheObject);
?>

Net_LDAP2_SimpleFileSchemaCache config options
Option Mandatory? Default Description
path No /tmp/Net_LDAP_Schema.cache The full path to the cache file. To improve the caches performance under linux, you can place the cache file in a tmpfs mounted directory. This will put the file in the computers memory instead on disk, enabling nearly instant access.
max_age No 1200 Maximum cache age in seconds. The age of the cache is determined by the files last change time. If max_age is reached, Net_LDAP2 will fetch a fresh Net_LDAP2_Schema object which is then stored in the cache file again. Setting this to "0" will make the cache endlessly valid.

Writing own schema cache classes

However this is basicly an easy task, this is beyond the scope of this manual. If you want to write your own custom schema cache, please refer to the detailed example at /your/pear/path/docs/Net_LDAP2/examples/schema_cache.php as well as the source/APIdoc of the interface Net_LDAP2_SchemaCache.