Basics

Cache



Introduction

Nylo provides a flexible cache driver out the box. You can store and retrieve items on the fly.

Caching is most useful when you need to store data that is expensive to generate or retrieve. For example, you can cache the result of an API request to avoid making the same request multiple times.

In this section we'll dive into the basics of caching in Nylo.


Save Data with Expiration Time

To store an item in the cache, you can use the saveRemember method. The method accepts three arguments: the key, the expiration time in seconds and the callback that returns the value to be stored.

import 'package:nylo_framework/nylo_framework.dart';
...

String key = "hello_world"; // Cache key
int seconds = 60; // 1 minute expiration

String val = await cache().saveRemember(key, seconds, () {
    printInfo("Cache miss");

    return "Hello World";
});

printInfo(val); // Hello World

In the example above, the saveRemember method will store the value "Hello World" in the cache under the key "hello_world" for 60 seconds. If the key already exists in the cache, the method will return the value stored in the cache.


Save Data Forever

To store an item in the cache indefinitely, you can use the saveForever method. The method accepts two arguments: the key and the callback that returns the value to be stored.

import 'package:nylo_framework/nylo_framework.dart';
...

String key = "hello_world"; // Cache key

String val = await cache().saveForever(key, () {
    printInfo("Cache miss");

    return "Hello World";
});

printInfo(val); // Hello World

In the example above, the saveForever method will store the value "Hello World" in the cache under the key "hello_world" indefinitely. If the key already exists in the cache, the method will return the value stored in the cache.


Retrieve Data

To retrieve an item from the cache, you can use the get method. The method accepts the key of the item to retrieve.

import 'package:nylo_framework/nylo_framework.dart';
...

String key = "hello_world"; // Cache key

String val = await cache().get(key);

printInfo(val); // Hello World

In the example above, the get method will return the value stored in the cache under the key "hello_world".


Remove Data

To remove an item from the cache, you can use the forget method. The method accepts the key of the item to remove.

import 'package:nylo_framework/nylo_framework.dart';
...

String key = "hello_world"; // Cache key

await cache().forget(key);

In the example above, the forget method will remove the item stored in the cache under the key "hello_world".


Caching API Responses

You can use the cache driver to cache API responses. This is useful when you want to avoid making the same request multiple times.

import 'package:nylo_framework/nylo_framework.dart';
...

Map<String, dynamic>? githubResponse = await api<ApiService>(
            (request) => request.get("https://api.github.com/repos/nylo-core/nylo"),
    cacheDuration: const Duration(seconds: 60),
    cacheKey: "github_nylo_dev",
);

printInfo(githubResponse);

In the example above, the api method will make a GET request to the GitHub API to fetch the repo data for nylo-dev. The response will be cached for 60 seconds under the key github_nylo_dev.


You can also cache the response in an ApiService when using the network method.

import 'package:nylo_framework/nylo_framework.dart';
...

class ApiService extends NyApiService {
  ...

  Future githubInfo() async {
    return await network(
      request: (request) => request.get("https://api.github.com/repos/nylo-core/nylo"),
      cacheKey: "github_nylo_info",
      cacheDuration: const Duration(hours: 1),
    );
  }
}

Then, use the githubInfo method to fetch the GitHub user profile.

import 'package:nylo_framework/nylo_framework.dart';
...

Map<String, dynamic>? githubResponse = await api<ApiService>((request) => request.githubInfo());

printInfo(githubResponse);

In the example above, the githubInfo method will fetch the user profile of the nylo-core user from the GitHub API. The response will be cached for 1 hour under the key github_nylo_info.


API Methods and Properties

Methods

  • saveRemember(String key, int seconds, Function callback): Save an item in the cache with an expiration time.
  • saveForever(String key, Function callback): Save an item in the cache indefinitely.
  • get(String key): Retrieve an item from the cache.
  • clear(String key): Remove an item from the cache.
  • flush(): Remove all items from the cache.
  • documents(): Retrieve all items from the cache.
  • has(String key): Check if an item exists in the cache.
  • put(String key, dynamic value, int seconds): Store an item in the cache with an expiration time.
  • size(): Retrieve the number of items in the cache.