AgentStack
SKILL verified MIT Self-run

Drupal Caching

skill-edutrul-drupal-ai-drupal-caching · by edutrul

Drupal Cache API — cache tags, contexts, max-age, cache bins, invalidation, and adding cache metadata to render arrays.

No reviews yet
0 installs
11 views
0.0% view→install

Install

$ agentstack add skill-edutrul-drupal-ai-drupal-caching

✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures

What it can access

  • Network access No
  • Filesystem access No
  • Shell / process execution No
  • Environment & secrets No
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

Are you the author of Drupal Caching? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

Drupal Caching

Always add cache metadata. Missing cache metadata causes stale content.

Cache Metadata in Render Arrays

$build['content'] = [
  '#markup' => $output,
  '#cache' => [
    'tags' => ['node:' . $node->id(), 'node_list'],
    'contexts' => ['user.permissions', 'url.query_args'],
    'max-age' => Cache::PERMANENT,
  ],
];

Cache Tags

| Tag | Invalidated when | |---|---| | node:{nid} | Node {nid} is saved/deleted | | node_list | Any node is created or deleted | | user:{uid} | User {uid} is saved | | taxonomy_term:{tid} | Term {tid} is saved | | config:{name} | Config object {name} is saved |

Cache Contexts

| Context | Varies by | |---|---| | user.permissions | User's permissions (prefer over user) | | user.roles | User's roles | | url.path | URL path | | url.query_args | Query parameters | | languages | Current language |

Reading/Writing Cache

$cached = $this->cacheBackend->get('my_module:my_key');
if ($cached !== FALSE) {
  return $cached->data;
}

$this->cacheBackend->set('my_module:my_key', $data, Cache::PERMANENT, ['node_list']);
$this->cacheBackend->set('my_module:my_key', $data, \Drupal::time()->getRequestTime() + 3600, ['node_list']);
$this->cacheBackend->delete('my_module:my_key');

Cache::invalidateTags(['node:123', 'node_list']);

Inject Cache Service

use Drupal\Core\Cache\CacheBackendInterface;

public function __construct(
  private readonly CacheBackendInterface $cacheBackend,
) {}
# services.yml
my_module.my_service:
  arguments: ['@cache.default']

CacheableDependencyInterface

$build['#cache']['tags'] = Cache::mergeTags(
  $build['#cache']['tags'] ?? [],
  $node->getCacheTags()
);

Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet — be the first.

Versions

  • v0.1.0 Imported from the upstream source.