keydb 提供了ModJS 模块,可以支持js 开发redis 扩展,很方便,同时也支持了简单的npm 模块能力(但是也有不少限制)
以下是一个参考使用
环境准备
- docker-compose
注意npm 模块需要到redis 的work 目录(具体如下docker 的是/data)
version: '3'
services:
keydb:
image: eqalpha/modjs
command: keydb-server /etc/keydb/keydb.conf --loadmodule /usr/lib/keydb/modules/modjs.so /mymodules/dist/index.js
volumes:
- ./scripts:/scripts
- ./mymodules:/mymodules
- ./mymodules/node_modules:/data/node_modules
ports:
- 6379:6379
- 支持基于typescript 的模块开发(基于了tsup)
src/index.ts, 引用了lodash 进行合并处理
declare const keydb: any;
declare const redis: any;
var _ = require("lodash")
function concat(key1, key2) {
var str1 = redis.call('get', key1);
var str2 = redis.call('get', key2);
return _.camelCase(str1 + " " + str2)
}
keydb.register(concat);
tsup.config.js
import { defineConfig } from 'tsup'
export default defineConfig({
entry: ['src/index.ts'],
splitting: false,
sourcemap: true,
clean: true,
minify: false,
format:["cjs","esm","iife"]
})
运行效果
- 启动
docker-compose up -d
- 效果
说明
keydb 提供的ModJS 模块很不错,但是目前缺少维护,内部基于了v8 引擎,对于npm 支持的限制参考官方文档说明
参考资料
https://github.com/Snapchat/KeyDB
https://github.com/Snapchat/ModJS
https://tsup.egoist.dev/