Feather - a highly performant SQLite Cache Driver for Kirby 3

Overview

🪶 Kirby3 SQLite Cache-Driver

Release Downloads Build Status Coverage Status Maintainability Twitter

Feather - a highly performant SQLite Cache Driver for Kirby 3

Commerical Usage


Support open source!

This plugin is free but if you use it in a commercial project please consider to sponsor me or make a donation.
If my work helped you to make some cash it seems fair to me that I might get a little reward as well, right?

Be kind. Share a little. Thanks.

‐ Bruno
 
M O N E Y
Github sponsor Patreon Buy Me a Coffee Paypal dontation Hire me

Installation

  • unzip master.zip as folder site/plugins/kirby3-sqlite-cachedriver or
  • git submodule add https://github.com/bnomei/kirby3-sqlite-cachedriver.git site/plugins/kirby3-sqlite-cachedriver or
  • composer require bnomei/kirby3-sqlite-cachedriver

Why

Memcached < File < Redis < SQLite < APCu

Kirby ships with built in support for File, Memcached and APCu Cache Drivers. I created a Redis Cache Driver which is imho best suited for larger caches. If your hosting does not support Memcached, APCu or Redis then your next best choice is this SQLite Cache Driver.

2 is enough and about 35% faster

Let's imaging this typical scenario: During a single pageview you need to access, 100 cached values. Some of them already exist, some not, some need to be refreshed and yet others need to be deleted. With a File Cache this would cause at least 100 filesystem operations in total. Using this SQLite Cache you will have only 1 file read and maybe 1 file write per pageview no matter how many values you get, update or remove. ✌️ But reading and writing data to SQLite is not instantaneous, so it will be at least 35% faster.

Usage

Cache methods

$cache = \Bnomei\SQLiteCache::singleton(); // or
$cache = feather();

$cache->set('key', 'value', $expireInMinutes);
$value = feather()->get('key', $default);

feather()->remove('key');
feather()->flush();

Benchmark

feather()->benchmark(1000);
sqlite : 0.075334072113037
file : 0.11837792396545

ATTENTION: This will create and remove a lot of cache files and sqlite entries

No cache when debugging

When Kirbys global debug config is set to true the complete plugin cache will be flushed and no caches will be read. But entries will be created. This will make you live easier – trust me.

How to use Feather with Lapse or Boost

You need to set the cache driver for the lapse plugin to sqlite.

site/config/config.php


return [
    'bnomei.lapse.cache' => ['type' => 'sqlite'],
    'bnomei.boost.cache' => ['type' => 'sqlite'],
    //... other options
];

Setup Content-File Cache

Use Kirby 3 Boost to setup a cache for content files.

Pragmas

The plugin comes with aggressive defaults for SQLite Pragmas to optimize for performance. You can change these in the settings if you need to.

Settings

bnomei.sqlite-cachedriver. Default Description
store true keep accessed cache items stored in PHP memory for faster recurring access
store-ignore `` if key contains that string then ignore
pragmas-construct callback array of pragma statements
pragmas-destruct callback array of pragma statements

Dependencies

  • PHP SQLite extension. version 3.7.x or better.

Disclaimer

This plugin is provided "as is" with no guarantee. Use it at your own risk and always test it yourself before using it in a production environment. If you find any issues, please create a new issue.

License

MIT

It is discouraged to use this plugin in any project that promotes racism, sexism, homophobia, animal abuse, violence or any other form of hate speech.

You might also like...
A Redis based, fully automated and scalable database cache layer for Laravel
A Redis based, fully automated and scalable database cache layer for Laravel

Lada Cache A Redis based, fully automated and scalable database cache layer for Laravel Contributors wanted! Have a look at the open issues and send m

Elephant - a highly performant PHP Cache Driver for Kirby 3

🐘 Kirby3 PHP Cache-Driver Elephant - a highly performant PHP Cache Driver for Kirby 3 Commerical Usage Support open source! This plugin is free but i

Perch Dashboard app for exporting content to (Kirby) text files and Kirby Blueprint files
Perch Dashboard app for exporting content to (Kirby) text files and Kirby Blueprint files

toKirby Perch Dashboard app for exporting content to (Kirby) text files and Kirby Blueprint files. You can easily install and test it in a few steps.

This Kirby V3 Plugin brings snippets and blueprints together in one place. It includes useful tools that completely changing the way you work with Kirby: Fast and well organized.
This Kirby V3 Plugin brings snippets and blueprints together in one place. It includes useful tools that completely changing the way you work with Kirby: Fast and well organized.

Kirby Components Overview Do you love to make awesome projects with Kirby CMS? Do you also find it difficult to switch between snippets and blueprints

Kirby 3 Plugin for running jobs like cleaning the cache from within the Panel, PHP code, CLI or a cronjob

Kirby 3 Janitor Kirby 3 Plugin for running jobs. It is a Panel Button! It has jobs build-in for cleaning the cache, sessions, create zip-backup, pre-g

A thin PSR-6 cache wrapper with a generic interface to various caching backends emphasising cache tagging and indexing.

Apix Cache, cache-tagging for PHP Apix Cache is a generic and thin cache wrapper with a PSR-6 interface to various caching backends and emphasising ca

Image Cache is a very simple PHP class that accepts an image source and will compress and cache the file, move it to a new directory, and returns the new source for the image.

NO LONGER MAINTAINED!!! Image Cache v. 1.0.0 Image Cache is a very simple PHP class that accepts an image source and will compress and cache the file,

Simple-cache - PHP FIG Simple Cache PSR

PHP FIG Simple Cache PSR This repository holds all interfaces related to PSR-16. Note that this is not a cache implementation of its own. It is merely

Rah cache minify - HTML compressor module for rah cache Textpattern CMS plugin

Minify module for rah_cache This is a minify module for rah_cache, a full-page caching solution for Textpattern CMS. Rah_cache_minify will minify HTML

Rah cache - Cache Textpattern's dynamic pages as flat files

rah_cache Packagist | Issues Rah_cache is a simple, experimental full-page caching plugin for Textpattern CMS. It caches Texpattern’s dynamic pages as

Etc cache - Cache plugin for Textpattern CMS

etc_cache Download | Packagist This Textpattern plugin provides an events-driven cache solution for Textpattern CMS. Textpattern is fast, but when you

The Cache component provides an extended PSR-6 implementation for adding cache to your applications.

Symfony PSR-6 implementation for caching The Cache component provides an extended PSR-6 implementation for adding cache to your applications. It is de

Performant pure-PHP AMQP (RabbitMQ) sync/async (ReactPHP) library

BunnyPHP Performant pure-PHP AMQP (RabbitMQ) sync/async (ReactPHP) library Requirements BunnyPHP requires PHP 7.1 and newer. Installation Add as Compo

Extensive, portable and performant handling of UTF-8 and grapheme clusters for PHP

Patchwork UTF-8 for PHP Patchwork UTF-8 gives PHP developpers extensive, portable and performant handling of UTF-8 and grapheme clusters. It provides

🚀Hyperf is an extremely performant and flexible PHP CLI framework
🚀Hyperf is an extremely performant and flexible PHP CLI framework

Hyperf is an extremely performant and flexible PHP CLI framework, powered by a state-of-the-art coroutine server and a large number of battle-tested components. Aside from decisively beating PHP-FPM frameworks in benchmarks, Hyperf is unique in its focus on flexibility and composition.

Hyperf is an extremely performant and flexible PHP CLI framework

🚀 A coroutine framework that focuses on hyperspeed and flexibility. Building microservice or middleware with ease.

Patchwork UTF-8 for PHP: Extensive, portable and performant handling of UTF-8 and grapheme clusters for PHP

Patchwork UTF-8 for PHP Patchwork UTF-8 gives PHP developpers extensive, portable and performant handling of UTF-8 and grapheme clusters. It provides

Columnar analytics for PHP - a pure PHP library to read and write simple columnar files in a performant way.

Columnar Analytics (in pure PHP) On GitHub: https://github.com/envoymediagroup/columna About the project What does it do? This library allows you to w

Independent query builders for MySQL, PostgreSQL, SQLite, and Microsoft SQL Server.

Aura.SqlQuery Provides query builders for MySQL, Postgres, SQLite, and Microsoft SQL Server. These builders are independent of any particular database

Comments
  • SQLite3 object has not been correctly initialised or is already closed

    SQLite3 object has not been correctly initialised or is already closed

    FORUM https://forum.getkirby.com/t/kirby3-boost-makes-loading-a-lot-of-pages-in-one-request-fast-unique-id/23580/7?u=bnomei

    JonasHolfeld Hi again :slight_smile:

    A few days later, i wanted to setup everything using the SQL-Lite server, but i get this Error:

    Fatal error: Uncaught Error: The SQLite3 object has not been correctly initialised or is already closed in .../site/plugins/kirby3-sqlite- cachedriver/classes/SQLiteCache.php:175 Stack trace: #0 .../site/plugins/kirby3-sqlite-cachedriver/classes/SQLiteCache.php(175): SQLite3Stmt-

    bindValue(':id', '...',

    1. #1 ...//site/plugins/kirby3-sqlite-cachedriver/classes/SQLiteCache.php(107): Bnomei\SQLiteCache->remove(...') #2 .../site/plugins/kirby3-sqlite-cachedriver/classes/SQLiteCache.php(102): Bnomei\SQLiteCache->removeAndSet('index', Array, 0) #3 /.../site/plugins/kirby3-boost/classes/BoostIndex.php(54): Bnomei\SQLiteCache->set('index', Array, 0) #4 /.../site/plugins/kirby3-boost/classes/BoostIndex.php(37): Bnomei\BoostIndex->write() #5 [internal function]: Bnomei\BoostIndex->__destruct() #6 {main} thrown in /.../site/plugins/kirby3-sqlite-cachedriver/classes/SQLiteCache.php on line 175 When running

    site()->boost(); or

    var_dump(site()->boostmark()); Do i need to initialize the SQLite Cachedriver plugin somehow?

    Thank you!

    bug question 
    opened by bnomei 8
  • SQLite3::exec(): database is locked

    SQLite3::exec(): database is locked

    Hi,

    As I'm using the plugin now for a couple of weeks, every now and then I'm facing this issue where the panel or sometime in the frontend the following message: "SQLite3::exec(): database is locked"

    I remember in my previous issue you mentionned:

    yeah that can happen if plugin did not properly close the connection due to a timeout etc. but i encountered it rarely. since everything in boost is just a cache you can simply delete the sqlite file.

    or you could try sqlite3 mydata.db ".dump" | sqlite3 new.db or sqlite3 broken.db ".recover" | sqlite3 new.db https://stackoverflow.com/questions/18259692/how-to-recover-a-corrupt-sqlite3-database

    Originally posted by @bnomei in https://github.com/bnomei/kirby3-boost/issues/3#issuecomment-996616778

    Would it be possible to automatically flush the SQL file, because on production level, the editor wouldn't be able to run such command or manually delete the SQL file.

    Looking forward to hear from you.

    bug wontfix 
    opened by psntr 3
Owner
Bruno Meilick
Bachelor in Interaction Design ZHdK, Freelance Webdeveloper
Bruno Meilick
A simple and extensible fixture loader for PHP 7.3+, supporting SQLite and MySQL

Flowder Flowder is a (really) simple fixture loader for PHP 7.3+, supporting SQLite and MySQL. Using Flowder in PHP 7.2 or below? Try version 1 instea

Joe Haines 6 Jan 17, 2021
FlatsApp using Laravel 8 with SQLite

The FlatsApp This Application Stacks using Laravel 8 with MySQL. Installation To get up and running of this Application please make sure you already h

ivandjoh 4 Nov 17, 2022
Driver to seamlessly integrate the Backup Manager into Laravel applications.

Laravel Driver for the Database Backup Manager This package pulls in the framework agnostic Backup Manager and provides seamless integration with Lara

Backup Manager 636 Dec 30, 2022
Oracle DB driver for Laravel 4|5|6|7|8 via OCI8

Oracle DB driver for Laravel 4|5|6|7|8 via OCI8 Laravel-OCI8 Laravel-OCI8 is an Oracle Database Driver package for Laravel. Laravel-OCI8 is an extensi

Arjay Angeles 751 Jan 6, 2023
🔌 A Doctrine DBAL Driver implementation on top of Swoole Coroutine PostgreSQL extension

Swoole Coroutine PostgreSQL Doctrine DBAL Driver A Doctrine\DBAL\Driver implementation on top of Swoole\Coroutine\PostgreSQL. Getting started Install

Leo Cavalcante 19 Nov 25, 2022
Doctrine PHP mapping driver

WORK IN PROGRESS! Doctrine PHP mapping driver Alternative mapping driver that allows to write mappings in PHP. Documentation Associations examples TOD

Andrey Klimenko 3 Aug 15, 2021
Laravel Thermite is an extended PostgreSQL Laravel database driver to connect to a CockroachDB cluster.

Laravel Thermite Laravel Thermite is an extended PostgreSQL Laravel database driver to connect to a CockroachDB cluster. ?? Supporting If you are usin

Renoki Co. 9 Nov 15, 2022
Laravel 5.1 ODBC Driver

l5-odbc-driver Laravel 5.1 ODBC driver Installation To Install this in your Laravel 5.1 app, open composer.json and add: "require": { "garylocke/odb

Gary Locke 8 Sep 19, 2019
A package for using Google Datastore as a database driver

Laravel Eloquent for Google Datastore A package for using Google Datastore as a database driver. By using this package, you can use query builder and

A1 Comms Ltd 3 Apr 26, 2022
A PHP client driver for the RethinkDB query language (ReQL).

PHP-RQL A PHP client driver for the RethinkDB query language (ReQL).

Daniel Mewes 341 Dec 30, 2022