Next Redis Cache is a Next.js compatible library for caching server rendered pages to serve faster than ever.
Use the package manager npm or yarn to install next-redis-cache.
npm install next-redis-cache --save
with yarn package manager.
yarn add next-redis-cache
To use this package you need to run your app with custom server, read more from here about next.js custom server.
Once you have next.js custom server setup with your app.
server.js
const express = require('express')
const next = require('next')
const NextRedisCache = require('next-redis-cache')
const port = process.env.PORT || 3000
const development = process.env.NODE_ENV !== 'production'
const app = next({ dev: development })
const handler = app.getRequestHandler()
const client = redis.createClient()
/**
* Initialization of Next Redis Cache instance
*/
const nextRedisCache = new NextRedisCache(client, app, {
includes: ['/'], // routes to include for caching
})
app
.prepare()
.then(() => {
const server = express()
server.get('*',
(request, response, nxt) => nextRedisCache.middleware(request, response, nxt),
(request, response) => handler(request, response)
)
/* starting server */
return server.listen(port, error => {
if (error) throw error
console.log(`> Ready on http://localhost:${port}`)
})
})
.catch(error => new Error("Server isn't responded", error))
- To use Next Redis Cache as a request handler just replace Next.js app's handler with nextRedisCache.handler in above snippet, as give in-below.
server.js
server.get('*', (request, response) =>
nextRedisCache.handler(request, response)
)
Here, Instance of NextRedisCache initialized with three arguments as following.
Name | Type | Required | Default |
---|---|---|---|
Client | Redis Client | ✅ | |
App | Next.js App | ✅ | |
Config | Configuration Object | ❌ | {} |
Next Redis Cache comes with some extra controls to manage your redis database and page's caching. ( it's all in your hand ).
All you need to know about config object.
Key | Detail | Type | Example | Default |
---|---|---|---|---|
includes | Collection of specific routes which should be cache. | Array | ['/', '/blogs/(.*)'] | [] |
excludes | Collection of specific routes which shouldn't be cache. | Array | ['/cart', '/(.*).js'] | [*] |
defaultExpire | Expiration time to expire you cache after a particular time. Note: null value of this key will set cache permanently. |
Number (Seconds) | 3000 | null |
expire | To define different expiration time for different routes. | Number (Seconds) | 3000 | null |
cache | To disable caching permanently by setting it false. | Boolean | true | true |
prefix | To identify your cache in store by unique prefix. | String | "my-cache" | "my-cache" |
log | Log timing of get/set to monitor caching | Boolean | true | false |
Note : includes and excludes is using path-to-regexp to validate routes.
Pull requests are welcome. For major/valid changes or task from to-do, please open an issue first to discuss what you would like to change.
Please make sure to update tests as appropriate.
- Define Test Cases