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
Signature
declare function unsafeTtlToExpires(clock: Clock, ttl: Duration | undefined): number | null;Errors
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);
}
Converts a TTL to an absolute expiration timestamp in milliseconds.
Details
Returns
nullfor no TTL and usesclock.currentTimeMillisUnsafe, so it is intended for backing-store internals.