annotate sites/all/modules/ctools/help/object-cache.html @ 0:ff03f76ab3fe

initial version
author danieleb <danielebarchiesi@me.com>
date Wed, 21 Aug 2013 18:51:11 +0100
parents
children
rev   line source
danielebarchiesi@0 1 <p>The CTools Object Cache is a specialized cache for storing data that is non-volatile. This differs from the standard Drupal cache mechanism, which is volatile, meaning that the data can be cleared at any time and it is expected that any cached data can easily be reconstructed. In contrast, data stored in this cache is not expected to be reconstructable. It is primarily used for storing user input which is retrieved in stages, allowing for more complex user interface interactions.</p>
danielebarchiesi@0 2
danielebarchiesi@0 3 <p>The object cache consists of 3 normal functions for cache maintenance, and 2 additional functions to facilitate locking.</p>
danielebarchiesi@0 4
danielebarchiesi@0 5 <p>To use any of these functions, you must first use ctools_include:</p>
danielebarchiesi@0 6
danielebarchiesi@0 7 <pre>
danielebarchiesi@0 8 ctools_include('object-cache');
danielebarchiesi@0 9 </pre>
danielebarchiesi@0 10
danielebarchiesi@0 11 <pre>
danielebarchiesi@0 12 /**
danielebarchiesi@0 13 * Get an object from the non-volatile ctools cache.
danielebarchiesi@0 14 *
danielebarchiesi@0 15 * This function caches in memory as well, so that multiple calls to this
danielebarchiesi@0 16 * will not result in multiple database reads.
danielebarchiesi@0 17 *
danielebarchiesi@0 18 * @param $obj
danielebarchiesi@0 19 * A 128 character or less string to define what kind of object is being
danielebarchiesi@0 20 * stored; primarily this is used to prevent collisions.
danielebarchiesi@0 21 * @param $name
danielebarchiesi@0 22 * The name of the object being stored.
danielebarchiesi@0 23 * @param $skip_cache
danielebarchiesi@0 24 * Skip the memory cache, meaning this must be read from the db again.
danielebarchiesi@0 25 *
danielebarchiesi@0 26 * @return
danielebarchiesi@0 27 * The data that was cached.
danielebarchiesi@0 28 */
danielebarchiesi@0 29 function ctools_object_cache_get($obj, $name, $skip_cache = FALSE) {
danielebarchiesi@0 30 </pre>
danielebarchiesi@0 31
danielebarchiesi@0 32 <pre>
danielebarchiesi@0 33 /**
danielebarchiesi@0 34 * Store an object in the non-volatile ctools cache.
danielebarchiesi@0 35 *
danielebarchiesi@0 36 * @param $obj
danielebarchiesi@0 37 * A 128 character or less string to define what kind of object is being
danielebarchiesi@0 38 * stored; primarily this is used to prevent collisions.
danielebarchiesi@0 39 * @param $name
danielebarchiesi@0 40 * The name of the object being stored.
danielebarchiesi@0 41 * @param $cache
danielebarchiesi@0 42 * The object to be cached. This will be serialized prior to writing.
danielebarchiesi@0 43 */
danielebarchiesi@0 44 function ctools_object_cache_set($obj, $name, $cache) {
danielebarchiesi@0 45 </pre>
danielebarchiesi@0 46
danielebarchiesi@0 47 <pre>
danielebarchiesi@0 48 /**
danielebarchiesi@0 49 * Remove an object from the non-volatile ctools cache
danielebarchiesi@0 50 *
danielebarchiesi@0 51 * @param $obj
danielebarchiesi@0 52 * A 128 character or less string to define what kind of object is being
danielebarchiesi@0 53 * stored; primarily this is used to prevent collisions.
danielebarchiesi@0 54 * @param $name
danielebarchiesi@0 55 * The name of the object being removed.
danielebarchiesi@0 56 */
danielebarchiesi@0 57 function ctools_object_cache_clear($obj, $name) {
danielebarchiesi@0 58 </pre>
danielebarchiesi@0 59
danielebarchiesi@0 60 <p>To facilitate locking, which is the ability to prohibit updates by other users while one user has an object cached, this system provides two functions:</p>
danielebarchiesi@0 61
danielebarchiesi@0 62 <pre>
danielebarchiesi@0 63 /**
danielebarchiesi@0 64 * Determine if another user has a given object cached.
danielebarchiesi@0 65 *
danielebarchiesi@0 66 * This is very useful for 'locking' objects so that only one user can
danielebarchiesi@0 67 * modify them.
danielebarchiesi@0 68 *
danielebarchiesi@0 69 * @param $obj
danielebarchiesi@0 70 * A 128 character or less string to define what kind of object is being
danielebarchiesi@0 71 * stored; primarily this is used to prevent collisions.
danielebarchiesi@0 72 * @param $name
danielebarchiesi@0 73 * The name of the object being removed.
danielebarchiesi@0 74 *
danielebarchiesi@0 75 * @return
danielebarchiesi@0 76 * An object containing the UID and updated date if found; NULL if not.
danielebarchiesi@0 77 */
danielebarchiesi@0 78 function ctools_object_cache_test($obj, $name) {
danielebarchiesi@0 79 </pre>
danielebarchiesi@0 80
danielebarchiesi@0 81 <p>The object returned by ctools_object_cache_test can be directly used to determine whether a user should be allowed to cache their own version of an object.</p>
danielebarchiesi@0 82
danielebarchiesi@0 83 <p>To allow the concept of breaking a lock, that is, clearing another users changes:</p>
danielebarchiesi@0 84
danielebarchiesi@0 85 <pre>
danielebarchiesi@0 86 /**
danielebarchiesi@0 87 * Remove an object from the non-volatile ctools cache for all session IDs.
danielebarchiesi@0 88 *
danielebarchiesi@0 89 * This is useful for clearing a lock.
danielebarchiesi@0 90 *
danielebarchiesi@0 91 * @param $obj
danielebarchiesi@0 92 * A 128 character or less string to define what kind of object is being
danielebarchiesi@0 93 * stored; primarily this is used to prevent collisions.
danielebarchiesi@0 94 * @param $name
danielebarchiesi@0 95 * The name of the object being removed.
danielebarchiesi@0 96 */
danielebarchiesi@0 97 function ctools_object_cache_clear_all($obj, $name) {
danielebarchiesi@0 98 </pre>
danielebarchiesi@0 99
danielebarchiesi@0 100 <p>Typical best practice is to use wrapper functions such as these:</p>
danielebarchiesi@0 101
danielebarchiesi@0 102 <pre>
danielebarchiesi@0 103 /**
danielebarchiesi@0 104 * Get the cached changes to a given task handler.
danielebarchiesi@0 105 */
danielebarchiesi@0 106 function delegator_page_get_page_cache($name) {
danielebarchiesi@0 107 ctools_include('object-cache');
danielebarchiesi@0 108 $cache = ctools_object_cache_get('delegator_page', $name);
danielebarchiesi@0 109 if (!$cache) {
danielebarchiesi@0 110 $cache = delegator_page_load($name);
danielebarchiesi@0 111 $cache->locked = ctools_object_cache_test('delegator_page', $name);
danielebarchiesi@0 112 }
danielebarchiesi@0 113
danielebarchiesi@0 114 return $cache;
danielebarchiesi@0 115 }
danielebarchiesi@0 116
danielebarchiesi@0 117 /**
danielebarchiesi@0 118 * Store changes to a task handler in the object cache.
danielebarchiesi@0 119 */
danielebarchiesi@0 120 function delegator_page_set_page_cache($name, $page) {
danielebarchiesi@0 121 ctools_include('object-cache');
danielebarchiesi@0 122 $cache = ctools_object_cache_set('delegator_page', $name, $page);
danielebarchiesi@0 123 }
danielebarchiesi@0 124
danielebarchiesi@0 125 /**
danielebarchiesi@0 126 * Remove an item from the object cache.
danielebarchiesi@0 127 */
danielebarchiesi@0 128 function delegator_page_clear_page_cache($name) {
danielebarchiesi@0 129 ctools_include('object-cache');
danielebarchiesi@0 130 ctools_object_cache_clear('delegator_page', $name);
danielebarchiesi@0 131 }
danielebarchiesi@0 132 </pre>