Socket
Book a DemoInstallSign in
Socket

kysely-cache

Package Overview
Dependencies
Maintainers
1
Versions
4
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

kysely-cache

Cache layer for kysely

latest
Source
npmnpm
Version
1.2.0
Version published
Weekly downloads
0
-100%
Maintainers
1
Weekly downloads
 
Created
Source

kysely-cache

CI NPM version NPM downloads js-prettier-style

Kysely Cache plugin; with this plugin you can cache a query and make next queries faster, that will not go directly to the database, but will be getted from the cache. This plugin has three different implementation KyselyLRUSQLCache, KyselyLRUCache and KyselyLRUKeyVCache.

Install

npm i kysely kysely-cache

Usage

KyselyLRUSQLCache

Description

This cache stores data inside a DB (sqlite, mysql or postgres) and sets a cached query (and results) lifetime (ttl) and a maximum number of queries (and elements)

Options

  • max: max number of items (query results) in cache, default 50
  • ttl: time to live (milliseconds), default: 60000
  • debounceTime: debounce time (ms) to wait for expired items check after single "set" value in cache, if 0 no check will be done after the set, default: 1000
  • intervalCheckTime: interval time (ms) between each expired items check (further to check after the "set" value in cache), default: 60000
  • dialect: Kysely Dialect, default: SQLite Dialect with in memory DB
  • queryCompiler: sqlite, mysql or postgres, default: sqlite

Api

  • clear(): clear the cache, return: Promise<void>
  • destroy(): clear the cache and release all resources and disconnects from the cache database, return: Promise<void>
  • createCache(opts): create the cache, return: Promise<KyselyLRUSQLCache<DB>>
  • execute(queryBuilder: SelectQueryBuilder): execute the query or return data from the cache as a list of items
  • executeTakeFirst(queryBuilder: SelectQueryBuilder): execute the query or return data from the cache, it return only the first element
  • executeTakeFirstOrThrow(queryBuilder: SelectQueryBuilder, errorConstructor: NoResultErrorConstructor): execute the query or return data from the cache, it return only the first element, if no element will be found, it will throw an error

How to use

const sqliteDialect = new SqliteDialect({ database: new Database(':memory:')})

const kyselyInstance = new Kysely<Database>({ dialect:  sqliteDialect })

await kyselyInstance.schema
.createTable('person')
.addColumn('id', 'integer', (col) => col.primaryKey())
.addColumn('first_name', 'varchar(255)')
.addColumn('last_name', 'varchar(255)')
.addColumn('gender', 'varchar(255)')
.execute()

await kyselyInstance
.insertInto('person')
.values({
first_name: 'Max',
last_name: 'Jack',
gender: 'man',
})
.execute()

const kyselyLRUSQLCacheInstance = await KyselyLRUSQLCache.createCache<Database>(opt.config)

const queryBuilderSelectFrom = kyselyInstance
.selectFrom('person')
.selectAll()

const people = await kyselyLRUSQLCacheInstance.execute(queryBuilderSelectFrom)

KyselyLRUCache

Description

This cache keeps data in memory (inside an object) and sets a cache query (and results) lifetime (ttl) and a maximum number of queries (and elements)

Options

  • max: max number of items (query results) in cache, default 50
  • ttl: time to live (milliseconds), default: 60000

Api

  • clear(): clear the cache, return: void
  • createCache(opts): create the cache, return: KyselyLRUCache<DB>
  • execute(queryBuilder: SelectQueryBuilder): execute the query or return data from the cache as a list of items
  • executeTakeFirst(queryBuilder: SelectQueryBuilder): execute the query or return data from the cache, it return only the first element
  • executeTakeFirstOrThrow(queryBuilder: SelectQueryBuilder, errorConstructor: NoResultErrorConstructor): execute the query or return data from the cache, it return only the first element, if no element will be found, it will throw an error

How to use

const sqliteDialect = new SqliteDialect( { database: new  Database(':memory:') } )

const kyselyInstance = new Kysely<Database>( { dialect:  sqliteDialect } )

await kyselyInstance.schema.createTable('person')
.addColumn('id', 'integer', (col) =>  col.primaryKey())
.addColumn('first_name', 'varchar(255)')
.addColumn('last_name', 'varchar(255)')
.addColumn('gender', 'varchar(255)')
.execute()

await kyselyInstance.insertInto('person').values( { first_name: 'Max', last_name: 'Jack', gender: 'man' } )
.execute()

const kyselyLRUCacheInstance = KyselyLRUCache.createCache<Database>( { max: 50, ttl: 60000 } )

const kyselySelectQueryBuilderOne = kyselyInstance.selectFrom('person').selectAll()
const persone = await KyselyLRUCacheInstance.executeTakeFirstOrThrow(kyselySelectQueryBuilderOne)

KyselyLRUKeyVCache

Description

This cache keeps data using KeyV storage, with this cache you have to use KeyV options of the different stores

This cache needs KeyV!

npm i --save keyv

Options

  • store: The storage adapter instance to be used by Keyv.
  • ttl: TTL, default: 60000
  • compression: Enable compression options

Api

  • clear(): clear the cache, return: void
  • disconnect(): clear the cache and release all resources and disconnects from the cache database, return: Promise<void>
  • createCache(opts): create the cache, return: KyselyLRUKeyVCache<DB>
  • execute(queryBuilder: SelectQueryBuilder): execute the query or return data from the cache as a list of items
  • executeTakeFirst(queryBuilder: SelectQueryBuilder): execute the query or return data from the cache, it return only the first element
  • executeTakeFirstOrThrow(queryBuilder: SelectQueryBuilder, errorConstructor: NoResultErrorConstructor): execute the query or return data from the cache, it return only the first element, if no element will be found, it will throw an error

How to use

const sqliteDialect = new SqliteDialect( { database: new  Database(':memory:') } )

const kyselyInstance = new Kysely<Database>( { dialect:  sqliteDialect } )

await kyselyInstance.schema.createTable('person')
.addColumn('id', 'integer', (col) =>  col.primaryKey())
.addColumn('first_name', 'varchar(255)')
.addColumn('last_name', 'varchar(255)')
.addColumn('gender', 'varchar(255)')
.execute()

await kyselyInstance.insertInto('person').values( { first_name: 'Max', last_name: 'Jack', gender: 'man' } )
.execute()

const kyselyLRUCacheInstance = KyselyLRUKeyVCacheInstance.createCache<Database>( { ttl: 60000 } )

const kyselySelectQueryBuilderOne = kyselyInstance.selectFrom('person').selectAll()
const persone = await kyselyLRUCacheInstance.executeTakeFirstOrThrow(kyselySelectQueryBuilderOne)

License

Licensed under MIT.

Keywords

cache

FAQs

Package last updated on 07 Feb 2025

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

About

Packages

Stay in touch

Get open source security insights delivered straight into your inbox.

  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc

U.S. Patent No. 12,346,443 & 12,314,394. Other pending.