Giter Site home page Giter Site logo

kirby3-sqlite-cachedriver's Introduction

๐Ÿชถ 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

<?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.

kirby3-sqlite-cachedriver's People

Contributors

bnomei avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar

kirby3-sqlite-cachedriver's Issues

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 bnomei/kirby3-boost#3 (comment)

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.

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!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.