Part-5: Managing data with TTL options
Tutorial overview
- Part 1 - Introduction to key-value store
- Part 2 - Basic operation get, set and delete key-values
- Part 3 - Increment and decrement operations
- Part 4 - Working with multiple values and streams
- Part 5 - Managing data with TTL options
- Part 6 - Multiple key spaces
- Part 7 - Interaction with the key-val store from the CLI
Welcome to this part-5 of the key-value database tutorial for codehooks.io serverless Node.js backend. In this part we'll cover the time-to-live (TTL) feature in the Codehooks key-value database.
The TTL database feature allows you to associate an expiration time with each key-value pair. Once the TTL for a particular key expires, the key-value pair is automatically removed from the database.
Some common use cases for the TTL features are listed below:
- Cache Expiration: Implement TTL in your cache to automatically remove stale data and ensure fresh content is served to users, improving website performance.
- Session Management: Set TTL for user sessions in your web application to automatically remove expired sessions, enhancing security and freeing up server resources.
- Temporary Data Storage: Use TTL to store temporary data, such as shopping cart information or form submissions, and automatically remove it after a certain period to avoid cluttering the database.
- Logging: Apply TTL to store logs or activity data for a limited duration, ensuring the database remains focused on recent and relevant information.
- Rate Limiting: Utilize TTL to enforce rate limits for API calls or user interactions, automatically resetting counters or restrictions after a specific time interval.
Example code using the TTL feature
The example code below shows how to create a REST API to POST a temporary state value to a particular key. The state will be kept for 24 hours by the TTL feature.
// keep state for 24 hours
app.post('/state/:id', async (req, res) => {
const ONE_DAY = 86400000; // One day in millis
// get id from request parameter
const {id} = req.params;
// state is the raw JSON body
const state = req.body;
// connect to data store
const conn = await Datastore.open();
const opt = {
"ttl": ONE_DAY
};
// set state with TTL option
const result = await conn.set(`state-${id}`, JSON.stringify(state), opt);
res.json(result);
})
Furthermore, the next code example shows how we can create a REST API to retrieve the state value within the 24 hour TTL time frame. If the state exists is is returned, otherwise a 404 status code is returned.
// get state or 404 if TTL expired
app.get('/state/:id', async (req, res) => {
// get id from request parameter
const {id} = req.params;
const conn = await Datastore.open();
// get state from database or NULL if key is deleted
const result = await conn.get(`state-${id}`);
if (result === null) {
res.status(404).send('No state')
} else {
res.set('content-type', 'application/json');
res.send(result);
}
})
These simple examples shows how easy it is to implement various use cases with the TTL feature.
Overall, the TTL feature in the key-value database provides flexibility and automation for managing data expiration, allowing you to optimize performance, storage, and overall system efficiency.