@elysiumjs/mnemosyne

中文文档
0.8.1发布于 2026/11/12Apache-2.0TypeScriptES Module近 30 天下载 3741

Elysium.js应用的数据库和缓存

此软件包已被标记为弃用

has moved into @elysiumjs/olympus: import from @elysiumjs/olympus/mnemosyne; the Redis cache store is in @elysiumjs/redis.

中文使用文档
文档目录5 节
  1. 安装
  2. 使用量
  3. 种子
  4. 名单
  5. 许可证

@elysiumjs/ mnemosyne (英语)

Elysium.js应用的数据库抽象和缓存.

安装

bun add @elysiumjs/mnemosyne

使用量

MnemosyneModule 提供缓存( n)Cache.redis 财务报告和审定财务报表 Cache.memory)和 db:seed 命令。 数据库驱动模块,例如 DrizzleModule 从 @elysiumjs/mnemosyne-drizzle 为您导入它, 因此您只有在想要配置缓存或者在没有数据库的情况下使用缓存时才会自己添加 :

import { Application, RedisModule } from '@elysiumjs/core';
import { MnemosyneModule } from '@elysiumjs/mnemosyne';

@Application.register({
    modules: [
        RedisModule.with({
            default: 'cache',
            connections: { cache: { url: process.env.REDIS_URL! } }
        }),
        // Opt out of a cache with `redis: false` or `memory: false`.
        MnemosyneModule.with({ cache: { memory: { ttl: 60_000, lruSize: 5000 } } })
    ]
})
export class App extends Application {}

任何 Keyv 商店都可以用它自己的缓存备份 stores,读取 Cache.store(name)在云花岗工人, KeyvWorkersKV 从 @elysiumjs/runtime-workers 存储 KV 命名空间中的条目 :

import { KeyvWorkersKV } from '@elysiumjs/runtime-workers';

MnemosyneModule.with({
    cache: { redis: false, stores: { kv: () => new KeyvWorkersKV({ binding: 'CACHE' }) } }
});

await Cache.store('kv').set('greeting', 'hello', 120_000);

种子

一个渗出器会写入应用程序需要运行的行,例如引用数据. 把它列入 seeders 模块,以及 styx db:seed 运行在那个模块,所以它 run 在自己的交易中, 使用模块的服务 :

import { Service } from '@elysiumjs/core';
import { Seeder } from '@elysiumjs/mnemosyne';

@Seeder.register()
export class CountriesSeeder extends Seeder {
    protected async run(@Service.inject() countries: CountryRepository): Promise<void> {
        await countries.upsertMany(await readCountries());
    }
}

@Seeder.register({ after: [CountriesSeeder], manual: true })
export class CitiesSeeder extends Seeder {
    protected async run(@Service.inject() cities: CityRepository): Promise<void> {
        await cities.upsertMany(await readCities(this.input.file));
    }
}

@Module.register({ services: [CountryRepository, CityRepository], seeders: [CountriesSeeder, CitiesSeeder] })
export class GeoModule extends Module {}
styx db:seed                                  # every seeder that is not manual
styx db:seed --only geo.cities --file cities.zip
styx db:seed --arg region=africa --list       # prints the order, runs nothing
  • 播种者每召出一来,就写作上起.
  • 以其模块和类命名,不包含 Module 财务报告和审定财务报表 Seeder 后缀,在kebab案中geo.cities (见上文). name 再来一个.
  • after 列出两个运行时先运行的种子类。 它设定了命令,而不添加: --only geo.cities 运行 geo.cities 一个人 给一个功能, after: () => [CountriesSeeder],当导入周期未定义类别时.
  • manual: true 种子只运行于 --only 给他们起名字. env 将植入物限制在一些环境中 connection 选择交易的连接.
  • --file 编辑 --arg key=value 双向种子到达种子者 this.input.file 财务报告和审定财务报表 this.input.args。 。 。 .
  • styx make:seeder --name CountriesSeeder --module geo 写入 seeders/countries.seeder.ts。 。 。 .

名单

Listing.define() 说明什么客户端可以过滤和排序一个列表,以及它如何页面. Listing.parse() 验证查询字符串和仓库 list() 运行它:

import { Listing } from '@elysiumjs/mnemosyne';

const PostListing = Listing.define(Post, {
    filters: { status: ['eq', 'in'], title: ['contains'] },
    sort: ['createdAt', 'title'],
    defaultSort: '-createdAt'
});

@Http.get('/', { response: Listing.pageSchema(PostResource) })
public list(@Http.query(Listing.schema(PostListing)) query: Listing.Params<typeof PostListing>) {
    return this.posts.list(Listing.parse(PostListing, query));
}
  • 光标 pagining 是默认值 : cursor 在上一页最后一行之后并有一个页面给出的分数 { data, nextCursor }。页数保持稳定,同时增加行数,每行费用不变.
  • pagination: 'offset' 从 1 到 1 的页码 page页面 { data, page, limit, total },合计数行的过滤器匹配。 它适合跳到一页的桌子.
  • Listing.pageSchema(item) 财务报告和审定财务报表 Listing.offsetPageSchema(item) 描述各页. Listing.page() 财务报告和审定财务报表 Listing.offsetPage() 建造它们, Listing.mapPage(page, map) 绘制他们的行图,例如模型到资源,以及 Listing.filterPage(page, keep) 保持通过上游的行.
  • 页面及其图案都有标记,以便截取器自行制作: Listing.isPage(value) 财务报告和审定财务报表 Listing.paginationOf(page) 读取一页, Listing.pageSchemaPagination(schema) 财务报告和审定财务报表 Listing.itemSchemaOf(schema) 读取一个页面计划.

模型和寄存器都是用一个驱动软件包来建造的. 见 @elysiumjs/mnemosyne-drizzle。 。 。 .

许可证

这个项目根据Apache许可证2.0版本获得许可. 见 自由主义 需要更多信息的文件.

版本与发布记录

@elysiumjs/mnemosyne 共发布 20 个版本,首次发布于 2026/02/24;过去 12 个月发布了 20 个版本。

版本发布日期距今
0.8.1latest2026/11/121 天前
0.8.02026/11/121 天前
0.7.32026/11/112 天前
0.7.22026/11/112 天前
0.7.12026/11/112 天前
0.7.02026/11/103 天前

关于 @elysiumjs/mnemosyne 的常见问题

@elysiumjs/mnemosyne 是什么?

Elysium.js应用的数据库和缓存注意:该包已被作者标记为弃用——has moved into @elysiumjs/olympus: import from @elysiumjs/olympus/mnemosyne; the Redis cache store is in @elysiumjs/redis.

如何安装 @elysiumjs/mnemosyne?

在项目目录运行 npm install @elysiumjs/mnemosyne,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:@elysiumjs/core(^0.24.0)、@elysiumjs/redis(^0.1.13)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@elysiumjs/mnemosyne 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@elysiumjs/mnemosyne 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@elysiumjs/mnemosyne 可以商用吗?

@elysiumjs/mnemosyne 使用 Apache-2.0 许可。宽松许可:允许商业使用、修改和再分发,并附带明确的专利授权;分发时需保留许可与 NOTICE 文件,修改过的文件要注明改动。以上为概括,不构成法律意见,请以许可原文为准。

@elysiumjs/mnemosyne 的下载量有多少?

根据 npm 官方下载统计,@elysiumjs/mnemosyne 在 2026/10/14 – 2026/11/12 这 30 天内被下载 3,741 次,日均约 125 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@elysiumjs/mnemosyne 还在维护吗?

最新版本 0.8.1 发布于 2026/11/12(1 天前);至今共发布 20 个版本,其中过去 12 个月发布了 20 个;首次发布于 2026/02/24。作者已将其标记为弃用,新项目建议寻找替代方案。