diff --git a/2.0/docs/cache/index.md b/2.0/docs/cache/index.md new file mode 100644 index 00000000..cfcd93c9 --- /dev/null +++ b/2.0/docs/cache/index.md @@ -0,0 +1,76 @@ +# Cache + +Vapor's `CacheProtocol` allows you to store and fetch items from a cache using optional expiration dates. + +By default, the Droplet's cache is set to `MemoryCache`. See the various [providers](#providers) below. + +## Store + +Storing data into the cache is straightforward. + +```swift +try drop.cache.set("hello", "world") +``` + +### Expiration + +When storing data, you can also supply an expiration date. + +```swift +try drop.cache.set("ephemeral", 42, expiration: Date(timeIntervalSinceNow: 30)) +``` + +In the above example, the supplied key value pair will expire after 30 seconds. + +## Fetch + +You can retreive data from the cache using the `.get()` method. + +```swift +try drop.cache.get("hello") // "world" +``` + +## Delete + +Keys can be deleted from the cache using the `.delete()` method. + +```swift +try drop.cache.delete("hello") +``` + +## Providers + +Here is a list of official cache providers. You can [search GitHub](https://github.com/search?utf8=✓&q=topic%3Avapor-provider+topic%3Acache&type=Repositories) for additional packages. + +| Type | Key | Description | Package | Class | +|--------|--------|---------------------------------|-----------------------------------------|-------------| +| Memory | memory | In-memory cache. Not persisted. | Vapor | MemoryCache | +| Fluent | fluent | Uses Fluent database. | [Fluent Provider](../fluent/package.md) | FluentCache | +| Redis | redis | Uses Redis database. | [RedisProvider](../redis/package.md) | RedisCache | + +### How to Use + +To use a different cache provider besides the default `MemoryCache`, make sure you have added the provider to your Package. + +```swift +import Vapor +import Provider + +let drop = try Droplet() + +try drop.addProvider(Provider.Provider.self) + +... +``` + + +Then change the Droplet's configuration file. + +`Config/droplet.json` + +```json +{ + "cache": "" +} +``` + diff --git a/2.0/docs/mysql/provider.md b/2.0/docs/mysql/provider.md index e76752a9..69c44355 100644 --- a/2.0/docs/mysql/provider.md +++ b/2.0/docs/mysql/provider.md @@ -93,6 +93,20 @@ import MySQLProvider let mysqlDriver = try drop.mysql() ``` +## Configure Cache + +You can also choose to use your Fluent database (now set to MySQL) for caching. + +`Config/droplet.json` + +```json +{ + "driver": "fluent" +} +``` + +Learn more about [caching here](../cache/index.md). + ## Done Next time you boot your Droplet, you should see: diff --git a/2.0/docs/redis/package.md b/2.0/docs/redis/package.md new file mode 100644 index 00000000..ccb5cac4 --- /dev/null +++ b/2.0/docs/redis/package.md @@ -0,0 +1,43 @@ +# Using Redis + +This section outlines how to import the Redis package both with or without a Vapor project. + +## With Vapor + +The easiest way to use Redis with Vapor is to include the Redis provider. + +```swift +import PackageDescription + +let package = Package( + name: "Project", + dependencies: [ + .Package(url: "https://github.com/vapor/vapor.git", majorVersion: 2), + .Package(url: "https://github.com/vapor/redis-provider.git", majorVersion: 1) + ], + exclude: [ ... ] +) +``` + +The Redis provider package adds Redis to your project and conforms it to Vapor's `CacheProtocol`. + +Use `import RedisProvider`. + +## Just Redis + +At the core of the Redis provider is a pure Swift Redis client. This package can be used by itself to send raw cache queries to your Redis database. + +```swift +import PackageDescription + +let package = Package( + name: "Project", + dependencies: [ + ... + .Package(url: "https://github.com/vapor/redis.git", majorVersion: 2) + ], + exclude: [ ... ] +) +``` + +Use `import Redis`. \ No newline at end of file diff --git a/2.0/docs/redis/provider.md b/2.0/docs/redis/provider.md new file mode 100644 index 00000000..e9a2f634 --- /dev/null +++ b/2.0/docs/redis/provider.md @@ -0,0 +1,75 @@ +# Redis Provider + +After you've [added the Redis Provider package](package.md) to your project, setting the provider up in code is easy. + +## Add to Droplet + +First, register the `RedisProvider.Provider` with your Droplet. + +```swift +import Vapor +import RedisProvider + +let drop = try Droplet() + +try drop.addProvider(RedisProvider.Provider.self) + +... +``` + +## Configure Vapor + +Once the provider is added to your Droplet, you can configure Vapor to use Redis for caching. + +`Config/droplet.json` + +```json +{ + "cache": "redis" +} +``` + +!!! seealso + Learn more about configuration files in the [Settings guide](../settings/config.md). + +## Configure Redis + +If you run your application now, you will likely see an error that the Redis configuration file is missing. Let's add that now. + +### Basic + +Here is an example of a simple Redis configuration file. + +`Config/redis.json` +```json +{ + "hostname": "127.0.0.1", + "port": 6379, + "password": "secret", + "database": 2 +} +``` + +Both password and database are optional. + +!!! note + It's a good idea to store the Redis configuration file in the `Config/secrets` folder since it may contain sensitive information. + +### URL + +You can also pass the Redis credentials as a URL. + +`Config/Redis.json` +```json +{ + "url": "redis://:secret@127.0.0.1:6379/2" +} +``` + +Both password and database are optional. + + +## Done + +You are now ready to [start using Cache](../cache/index.md) with your Redis database. + diff --git a/2.0/mkdocs.yml b/2.0/mkdocs.yml index d4457af5..d085a953 100644 --- a/2.0/mkdocs.yml +++ b/2.0/mkdocs.yml @@ -38,10 +38,15 @@ pages: - 'Model': 'fluent/model.md' - 'Query': 'fluent/query.md' - 'Relation': 'fluent/relation.md' +- Cache: 'cache/index.md' - MySQL: - 'Package': 'mysql/package.md' - 'Provider': 'mysql/provider.md' - 'Driver': 'mysql/driver.md' +- Redis: + - 'Package': 'redis/package.md' + - 'Provider': 'redis/provider.md' + - Auth: - 'Getting Started': 'auth/getting-started.md' - 'Helper': 'auth/helper.md'