import { Table } from "docs-ui"

export const metadata = {
  title: `Redis Cache Module`,
}

# {metadata.title}

The Redis Cache Module uses Redis to cache data in your store. In production, it's recommended to use this module.

---

## Install the Redis Cache Module

<Note type="check">

- [Redis installed and Redis server running](https://redis.io/docs/getting-started/installation/).

</Note>

To install Redis Cache Module, run the following command in the directory of your Medusa application:

```bash npm2yarn
npm install @medusajs/cache-redis
```

Next, add the module into the `modules` property of the exported object in `medusa-config.js`:

export const highlights = [
  ["12", "redisUrl", "The Redis connection URL."]
]

```js title="medusa-config.js" highlights={highlights}
const { Modules } = require("@medusajs/modules-sdk")

// ...

module.exports = {
  // ...
  modules: {
    // ...
    [Modules.CACHE]: {
      resolve: "@medusajs/cache-redis",
      options: { 
        redisUrl: process.env.CACHE_REDIS_URL,
      },
    },
  },
}
```

### Environment Variables

Make sure to add the following environment variables:

```bash
CACHE_REDIS_URL=<YOUR_REDIS_URL>
```

### Redis Cache Module Options

<Table>
  <Table.Header>
    <Table.Row>
      <Table.HeaderCell>Option</Table.HeaderCell>
      <Table.HeaderCell>Description</Table.HeaderCell>
      <Table.HeaderCell>Required</Table.HeaderCell>
      <Table.HeaderCell>Default</Table.HeaderCell>
    </Table.Row>
  </Table.Header>
  <Table.Body>
    <Table.Row>
      <Table.Cell>
      
      `redisUrl`
      
      </Table.Cell>
      <Table.Cell>
      
      A string indicating the Redis connection URL.
      
      </Table.Cell>
      <Table.Cell>
      
      Yes
      
      </Table.Cell>
      <Table.Cell>
      
      \-
      
      </Table.Cell>
    </Table.Row>
    <Table.Row>
      <Table.Cell>
      
      `redisOptions`
      
      </Table.Cell>
      <Table.Cell>
      
      An object of Redis options. Refer to the [Redis API Reference](https://redis.github.io/ioredis/index.html#RedisOptions) for details on accepted properties.
      
      </Table.Cell>
      <Table.Cell>
      
      No
      
      </Table.Cell>
      <Table.Cell>
      
      \-
      
      </Table.Cell>
    </Table.Row>
    <Table.Row>
      <Table.Cell>
      
      `ttl`
      
      </Table.Cell>
      <Table.Cell>
      
      The number of seconds an item can live in the cache before it’s removed.
      
      </Table.Cell>
      <Table.Cell>
      
      No
      
      </Table.Cell>
      <Table.Cell>
      
      `30` seconds
      
      </Table.Cell>
    </Table.Row>
    <Table.Row>
      <Table.Cell>
      
      `namespace`
      
      </Table.Cell>
      <Table.Cell>
      
      A string used to prefix all cached keys with `{namespace}:`.
      
      </Table.Cell>
      <Table.Cell>
      
      No
      
      </Table.Cell>
      <Table.Cell>
      
      `medusa`. So, all cached keys are prefixed with `medusa:`.
      
      </Table.Cell>
    </Table.Row>
  </Table.Body>
</Table>

---

## Test the Module

To test the module, start the Medusa application:

```bash npm2yarn
npm run dev
```

You'll see the following message in the terminal's logs:

```bash noCopy noReport
Connection to Redis in module 'cache-redis' established
```
