Security News
GitHub Removes Malicious Pull Requests Targeting Open Source Repositories
GitHub removed 27 malicious pull requests attempting to inject harmful code across multiple open source repositories, in another round of low-effort attacks.
apollo-server-caching
Advanced tools
[![npm version](https://badge.fury.io/js/apollo-server-caching.svg)](https://badge.fury.io/js/apollo-server-caching) [![Build Status](https://circleci.com/gh/apollographql/apollo-server.svg?style=svg)](https://circleci.com/gh/apollographql/apollo-server)
The apollo-server-caching package provides a set of utilities for implementing caching in Apollo Server. It includes interfaces and classes for creating and managing caches, which can help improve the performance of your GraphQL server by reducing the need to repeatedly fetch the same data.
InMemoryLRUCache
The InMemoryLRUCache class provides an in-memory cache with a Least Recently Used (LRU) eviction policy. This is useful for caching data that is frequently accessed but can be evicted when the cache reaches its size limit.
const { InMemoryLRUCache } = require('apollo-server-caching');
const cache = new InMemoryLRUCache();
// Set a value in the cache
cache.set('key', 'value');
// Get a value from the cache
cache.get('key').then(value => console.log(value));
// Delete a value from the cache
cache.delete('key');
PrefixingKeyValueCache
The PrefixingKeyValueCache class allows you to add a prefix to all keys in a base cache. This is useful for namespacing cache entries to avoid key collisions.
const { PrefixingKeyValueCache, InMemoryLRUCache } = require('apollo-server-caching');
const baseCache = new InMemoryLRUCache();
const cache = new PrefixingKeyValueCache(baseCache, 'prefix:');
// Set a value in the cache with a prefix
cache.set('key', 'value');
// Get a value from the cache with a prefix
cache.get('key').then(value => console.log(value));
Errors and Cache
The package provides error handling mechanisms for cache operations. This ensures that your application can gracefully handle scenarios where cache operations fail.
const { InMemoryLRUCache } = require('apollo-server-caching');
const cache = new InMemoryLRUCache();
// Set a value in the cache
cache.set('key', 'value').catch(error => console.error('Error setting cache:', error));
// Get a value from the cache
cache.get('key').then(value => console.log(value)).catch(error => console.error('Error getting cache:', error));
node-cache is a simple and fast Node.js internal caching module. It provides a straightforward API for setting, getting, and deleting cache entries. Unlike apollo-server-caching, it does not include built-in support for LRU eviction or key prefixing.
lru-cache is a highly efficient LRU cache implementation for Node.js. It provides more advanced configuration options compared to the InMemoryLRUCache in apollo-server-caching, such as setting a maximum age for cache entries and custom length calculation functions.
redis is a powerful in-memory data structure store that can be used as a cache. It supports a wide range of data types and provides persistence options. While more complex to set up than apollo-server-caching, it offers greater scalability and flexibility.
Internally, Apollo Server uses the KeyValueCache
interface to provide a caching store for the Data Sources. An in-memory LRU cache is used by default, and we provide connectors for Memcached/Redis backends.
Built with extensibility in mind, you can also implement your own cache to use with Apollo Server, in a way that best suits your application needs. It needs to implement the following interface that can be exported from apollo-server-caching
:
export interface KeyValueCache {
get(key: string): Promise<string | undefined>;
set(key: string, value: string, options?: { ttl?: number }): Promise<void>;
}
You can export and run a jest test suite from apollo-server-caching
to test your implementation:
// ../__tests__/YourKeyValueCache.test.ts
import YourKeyValueCache from '../src/YourKeyValueCache';
import { testKeyValueCache } from 'apollo-server-caching';
testKeyValueCache(new MemcachedCache('localhost'));
Run tests with jest --verbose
FAQs
[![npm version](https://badge.fury.io/js/apollo-server-caching.svg)](https://badge.fury.io/js/apollo-server-caching) [![Build Status](https://circleci.com/gh/apollographql/apollo-server/tree/main.svg?style=svg)](https://circleci.com/gh/apollographql/apoll
The npm package apollo-server-caching receives a total of 237,325 weekly downloads. As such, apollo-server-caching popularity was classified as popular.
We found that apollo-server-caching demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
GitHub removed 27 malicious pull requests attempting to inject harmful code across multiple open source repositories, in another round of low-effort attacks.
Security News
RubyGems.org has added a new "maintainer" role that allows for publishing new versions of gems. This new permission type is aimed at improving security for gem owners and the service overall.
Security News
Node.js will be enforcing stricter semver-major PR policies a month before major releases to enhance stability and ensure reliable release candidates.