Persistence
Stores encoded results for Persistable requests.
The Persistence service creates scoped stores keyed by each request's
PrimaryKey. Stores read and write schema-encoded Exit values with
optional TTLs, letting request workflows reuse expensive or idempotent results
across fibers, process restarts, or workers that share a backing store.
Converting
unsafeTtlToExpires
Converts a TTL to an absolute expiration timestamp in milliseconds.
Details
Returns null for no TTL and uses clock.currentTimeMillisUnsafe, so it is
intended for backing-store internals.
Signature
declare function unsafeTtlToExpires(clock: Clock, ttl: Duration | undefined): number | nullErrors
PersistenceError
Error raised by persistence and backing-store operations.
Signature
declare class PersistenceError extends { readonly _tag: "PersistenceError"; readonly cause?: unknown; readonly message: string;} & YieldableError<this> { constructor(...args: [props: { readonly _tag?: "PersistenceError"; readonly cause?: unknown; readonly message: string; }, options?: MakeOptions]); readonly "~effect/persistence/Persistence/PersistenceError": "~effect/persistence/Persistence/PersistenceError";}Layers
Provides Persistence from BackingPersistence.
Details
The layer serializes and deserializes Persistable exits, applies
per-entry TTLs, and skips writes whose TTL is zero or negative.
Signature
declare const layer: Layer<Persistence, never, BackingPersistence>layerBackingKvs
Provides BackingPersistence using a KeyValueStore.
Details
Each store id becomes a key prefix, and values are stored as JSON with optional expiration timestamps.
Signature
declare const layerBackingKvs: Layer.Layer<BackingPersistence, never, KeyValueStore.KeyValueStore>layerBackingMemory
Provides an in-memory BackingPersistence grouped by store id.
Details
Entries are process-local and expire according to their stored TTL.
Signature
declare const layerBackingMemory: Layer.Layer<BackingPersistence>layerBackingRedis
Provides Redis-backed persistence.
Details
Each store id is used as a key prefix, values are JSON-encoded, and finite TTLs are stored with Redis expiration.
Signature
declare const layerBackingRedis: Layer.Layer<BackingPersistence, never, Redis.Redis>layerBackingSql
Provides SQL-backed persistence using a shared effect_persistence table.
Details
Rows are partitioned by store_id and store JSON-encoded values with
optional expiration timestamps.
Signature
declare const layerBackingSql: Layer.Layer<BackingPersistence, never, SqlClient.SqlClient>layerBackingSqlMultiTable
Provides SQL-backed persistence using one table per store id.
Details
Each table is created if needed and stores JSON-encoded values with optional expiration timestamps.
Signature
declare const layerBackingSqlMultiTable: Layer.Layer<BackingPersistence, never, SqlClient.SqlClient>Provides Persistence backed by the current KeyValueStore.
Signature
declare const layerKvs: Layer.Layer<Persistence, never, KeyValueStore.KeyValueStore>layerMemory
Provides Persistence backed by process-local in-memory storage.
Signature
declare const layerMemory: Layer.Layer<Persistence>layerRedis
Provides Persistence backed by the current Redis service.
Signature
declare const layerRedis: Layer.Layer<Persistence, never, Redis.Redis>Provides Persistence backed by SQL using a shared persistence table.
Signature
declare const layerSql: Layer.Layer<Persistence, never, SqlClient.SqlClient>layerSqlMultiTable
Provides Persistence backed by SQL with one table per store id.
Signature
declare const layerSqlMultiTable: Layer.Layer<Persistence, never, SqlClient.SqlClient>Models
PersistenceStore interface
Typed store for persisted Exit values keyed by Persistable requests.
Signature
interface PersistenceStore { readonly clear: Effect<void, PersistenceError>; readonly get: <A extends Constraint, E extends Constraint>(key: Persistable<A, E>) => Effect<Exit<A["Type"], E["Type"]> | undefined, SchemaError | PersistenceError, A["DecodingServices"] | E["DecodingServices"]>; readonly getMany: <A extends Constraint, E extends Constraint>(keys: Iterable<Persistable<A, E>>) => Effect<Array<Exit<A["Type"], E["Type"]> | undefined>, SchemaError | PersistenceError, A["DecodingServices"] | E["DecodingServices"]>; readonly remove: <A extends Constraint, E extends Constraint>(key: Persistable<A, E>) => Effect<void, PersistenceError>; readonly set: <A extends Constraint, E extends Constraint>(key: Persistable<A, E>, value: Exit<A["Type"], E["Type"]>) => Effect<void, SchemaError | PersistenceError, A["EncodingServices"] | E["EncodingServices"]>; readonly setMany: <A extends Constraint, E extends Constraint>(entries: Iterable<readonly [Persistable<A, E>, Exit<A["Type"], E["Type"]>]>) => Effect<void, SchemaError | PersistenceError, A["EncodingServices"] | E["EncodingServices"]>;}Services
BackingPersistence
Service for creating raw backing stores for persistence store ids.
Signature
declare class BackingPersistence extends Shape<"effect/persistence/BackingPersistence", { readonly make: (storeId: string) => Effect<BackingPersistenceStore, never, Scope>;}, this> { constructor(_: never);}BackingPersistenceStore interface
Raw persistence backing store for JSON-compatible objects with optional TTLs.
Signature
interface BackingPersistenceStore { readonly clear: Effect<void, PersistenceError>; readonly get: (key: string) => Effect<object | undefined, PersistenceError>; readonly getMany: (keys: [string, ...Array<string>]) => Effect<[object | undefined, ...Array<object | undefined>], PersistenceError>; readonly remove: (key: string) => Effect<void, PersistenceError>; readonly set: (key: string, value: object, ttl: Duration | undefined) => Effect<void, PersistenceError>; readonly setMany: (entries: [readonly [string, object, Duration | undefined], ...Array<readonly [string, object, Duration | undefined]>]) => Effect<void, PersistenceError>;}Persistence
Service for creating scoped stores of persisted Persistable request
results.
Signature
declare class Persistence extends Shape<"effect/persistence/Persistence", { readonly make: (options: { readonly storeId: string; readonly timeToLive?: (exit: Exit<unknown, unknown>, key: Any) => Input; }) => Effect<PersistenceStore, never, Scope>;}, this> { constructor(_: never);}