# Mysqli

Cache to a [MySQL database](https://www.mysql.com/) using the
[mysqli](http://php.net/manual/en/book.mysqli.php) PHP extension.

You must pass a `mysqli` connection object to the constructor.

``` php
<?php
    
use Desarrolla2\Cache\Mysqli as MysqliCache;

$db = new mysqli('localhost');
$cache = new MysqliCache($db);
```

### Options

| name       | type      | default |                                       |
| ---------  | ----      | ------- | ------------------------------------- |
| initialize | bool      | true    | Enable auto-initialize                |
| ttl        | int       | null    | Maximum time to live in seconds       |
| prefix     | string    | ""      | Key prefix                            |

#### Initialize option

If `initialize` is enabled, the cache implementation will automatically create
a [scheduled event](https://dev.mysql.com/doc/refman/5.7/en/event-scheduler.html).

```
DELIMITER ;;

CREATE TABLE IF NOT EXISTS `cache` (`key` VARCHAR(255), `value` TEXT, `ttl` INT UNSIGNED, PRIMARY KEY (`key`));;

CREATE EVENT `apply_ttl_cache` ON SCHEDULE 1 HOUR 
DO BEGIN
    DELETE FROM `cache` WHERE `ttl` < NOW();
END;;
```

In production it's better to disable auto-initialization and create the event
explicitly when setting up the database. This prevents a `CREATE TABLE` and
`CREATE EVENT` query on each request. 

### Packer

By default the [`SerializePacker`](../packers/serialize.md) is used.