bun-types 1.3.2-canary.20251105T140650 → 1.3.2-canary.20251106T140813
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/docs/README.md +28 -0
- package/package.json +1 -1
- package/docs/api/binary-data.md +0 -1038
- package/docs/api/cc.md +0 -197
- package/docs/api/color.md +0 -262
- package/docs/api/console.md +0 -57
- package/docs/api/cookie.md +0 -449
- package/docs/api/dns.md +0 -110
- package/docs/api/fetch.md +0 -463
- package/docs/api/ffi.md +0 -557
- package/docs/api/file-io.md +0 -366
- package/docs/api/file-system-router.md +0 -112
- package/docs/api/file.md +0 -19
- package/docs/api/glob.md +0 -178
- package/docs/api/globals.md +0 -387
- package/docs/api/hashing.md +0 -319
- package/docs/api/html-rewriter.md +0 -334
- package/docs/api/http.md +0 -1408
- package/docs/api/import-meta.md +0 -69
- package/docs/api/node-api.md +0 -14
- package/docs/api/redis.md +0 -597
- package/docs/api/s3.md +0 -850
- package/docs/api/secrets.md +0 -319
- package/docs/api/semver.md +0 -52
- package/docs/api/spawn.md +0 -582
- package/docs/api/sql.md +0 -1374
- package/docs/api/sqlite.md +0 -694
- package/docs/api/streams.md +0 -230
- package/docs/api/tcp.md +0 -221
- package/docs/api/transpiler.md +0 -276
- package/docs/api/udp.md +0 -123
- package/docs/api/utils.md +0 -891
- package/docs/api/websockets.md +0 -573
- package/docs/api/workers.md +0 -322
- package/docs/api/yaml.md +0 -668
- package/docs/benchmarks.md +0 -120
- package/docs/bun-flavored-toml.md +0 -42
- package/docs/bundler/css.md +0 -1028
- package/docs/bundler/css_modules.md +0 -145
- package/docs/bundler/executables.md +0 -626
- package/docs/bundler/fullstack.md +0 -418
- package/docs/bundler/hmr.md +0 -234
- package/docs/bundler/html.md +0 -349
- package/docs/bundler/index.md +0 -1735
- package/docs/bundler/intro.md +0 -75
- package/docs/bundler/loaders.md +0 -410
- package/docs/bundler/macros.md +0 -329
- package/docs/bundler/plugins.md +0 -449
- package/docs/bundler/vs-esbuild.md +0 -1127
- package/docs/cli/add.md +0 -173
- package/docs/cli/bun-completions.md +0 -3
- package/docs/cli/bun-create.md +0 -338
- package/docs/cli/bun-install.md +0 -349
- package/docs/cli/bun-upgrade.md +0 -39
- package/docs/cli/bunx.md +0 -89
- package/docs/cli/filter.md +0 -90
- package/docs/cli/info.md +0 -65
- package/docs/cli/init.md +0 -85
- package/docs/cli/install.md +0 -344
- package/docs/cli/link.md +0 -40
- package/docs/cli/outdated.md +0 -90
- package/docs/cli/patch-commit.md +0 -11
- package/docs/cli/pm.md +0 -285
- package/docs/cli/publish.md +0 -120
- package/docs/cli/remove.md +0 -7
- package/docs/cli/run.md +0 -261
- package/docs/cli/test.md +0 -397
- package/docs/cli/unlink.md +0 -9
- package/docs/cli/update.md +0 -129
- package/docs/cli/why.md +0 -67
- package/docs/contributing/upgrading-webkit.md +0 -57
- package/docs/ecosystem/elysia.md +0 -24
- package/docs/ecosystem/express.md +0 -37
- package/docs/ecosystem/hono.md +0 -18
- package/docs/ecosystem/react.md +0 -65
- package/docs/ecosystem/stric.md +0 -38
- package/docs/guides/binary/arraybuffer-to-array.md +0 -27
- package/docs/guides/binary/arraybuffer-to-blob.md +0 -24
- package/docs/guides/binary/arraybuffer-to-buffer.md +0 -25
- package/docs/guides/binary/arraybuffer-to-string.md +0 -15
- package/docs/guides/binary/arraybuffer-to-typedarray.md +0 -39
- package/docs/guides/binary/blob-to-arraybuffer.md +0 -14
- package/docs/guides/binary/blob-to-dataview.md +0 -14
- package/docs/guides/binary/blob-to-stream.md +0 -14
- package/docs/guides/binary/blob-to-string.md +0 -15
- package/docs/guides/binary/blob-to-typedarray.md +0 -14
- package/docs/guides/binary/buffer-to-arraybuffer.md +0 -14
- package/docs/guides/binary/buffer-to-blob.md +0 -14
- package/docs/guides/binary/buffer-to-readablestream.md +0 -41
- package/docs/guides/binary/buffer-to-string.md +0 -25
- package/docs/guides/binary/buffer-to-typedarray.md +0 -14
- package/docs/guides/binary/dataview-to-string.md +0 -15
- package/docs/guides/binary/typedarray-to-arraybuffer.md +0 -25
- package/docs/guides/binary/typedarray-to-blob.md +0 -16
- package/docs/guides/binary/typedarray-to-buffer.md +0 -14
- package/docs/guides/binary/typedarray-to-dataview.md +0 -14
- package/docs/guides/binary/typedarray-to-readablestream.md +0 -41
- package/docs/guides/binary/typedarray-to-string.md +0 -16
- package/docs/guides/deployment/railway.md +0 -157
- package/docs/guides/ecosystem/astro.md +0 -72
- package/docs/guides/ecosystem/discordjs.md +0 -77
- package/docs/guides/ecosystem/docker.md +0 -140
- package/docs/guides/ecosystem/drizzle.md +0 -185
- package/docs/guides/ecosystem/edgedb.md +0 -228
- package/docs/guides/ecosystem/elysia.md +0 -31
- package/docs/guides/ecosystem/express.md +0 -40
- package/docs/guides/ecosystem/hono.md +0 -39
- package/docs/guides/ecosystem/mongoose.md +0 -87
- package/docs/guides/ecosystem/neon-drizzle.md +0 -220
- package/docs/guides/ecosystem/neon-serverless-postgres.md +0 -55
- package/docs/guides/ecosystem/nextjs.md +0 -49
- package/docs/guides/ecosystem/nuxt.md +0 -56
- package/docs/guides/ecosystem/pm2.md +0 -57
- package/docs/guides/ecosystem/prisma.md +0 -141
- package/docs/guides/ecosystem/qwik.md +0 -107
- package/docs/guides/ecosystem/react.md +0 -50
- package/docs/guides/ecosystem/remix.md +0 -78
- package/docs/guides/ecosystem/render.md +0 -79
- package/docs/guides/ecosystem/sentry.md +0 -52
- package/docs/guides/ecosystem/solidstart.md +0 -58
- package/docs/guides/ecosystem/ssr-react.md +0 -51
- package/docs/guides/ecosystem/stric.md +0 -55
- package/docs/guides/ecosystem/sveltekit.md +0 -125
- package/docs/guides/ecosystem/systemd.md +0 -113
- package/docs/guides/ecosystem/vite.md +0 -71
- package/docs/guides/html-rewriter/extract-links.md +0 -68
- package/docs/guides/html-rewriter/extract-social-meta.md +0 -93
- package/docs/guides/http/cluster.md +0 -66
- package/docs/guides/http/fetch-unix.md +0 -33
- package/docs/guides/http/fetch.md +0 -24
- package/docs/guides/http/file-uploads.md +0 -94
- package/docs/guides/http/hot.md +0 -26
- package/docs/guides/http/proxy.md +0 -24
- package/docs/guides/http/server.md +0 -46
- package/docs/guides/http/simple.md +0 -18
- package/docs/guides/http/stream-file.md +0 -48
- package/docs/guides/http/stream-iterator.md +0 -47
- package/docs/guides/http/stream-node-streams-in-bun.md +0 -20
- package/docs/guides/http/tls.md +0 -30
- package/docs/guides/install/add-dev.md +0 -26
- package/docs/guides/install/add-git.md +0 -36
- package/docs/guides/install/add-optional.md +0 -25
- package/docs/guides/install/add-peer.md +0 -43
- package/docs/guides/install/add-tarball.md +0 -33
- package/docs/guides/install/add.md +0 -42
- package/docs/guides/install/azure-artifacts.md +0 -73
- package/docs/guides/install/cicd.md +0 -41
- package/docs/guides/install/custom-registry.md +0 -30
- package/docs/guides/install/from-npm-install-to-bun-install.md +0 -214
- package/docs/guides/install/git-diff-bun-lockfile.md +0 -44
- package/docs/guides/install/jfrog-artifactory.md +0 -28
- package/docs/guides/install/npm-alias.md +0 -23
- package/docs/guides/install/registry-scope.md +0 -38
- package/docs/guides/install/trusted.md +0 -46
- package/docs/guides/install/workspaces.md +0 -70
- package/docs/guides/install/yarnlock.md +0 -44
- package/docs/guides/process/argv.md +0 -58
- package/docs/guides/process/ctrl-c.md +0 -16
- package/docs/guides/process/ipc.md +0 -66
- package/docs/guides/process/nanoseconds.md +0 -13
- package/docs/guides/process/os-signals.md +0 -39
- package/docs/guides/process/spawn-stderr.md +0 -31
- package/docs/guides/process/spawn-stdout.md +0 -26
- package/docs/guides/process/spawn.md +0 -41
- package/docs/guides/process/stdin.md +0 -54
- package/docs/guides/read-file/arraybuffer.md +0 -28
- package/docs/guides/read-file/buffer.md +0 -19
- package/docs/guides/read-file/exists.md +0 -16
- package/docs/guides/read-file/json.md +0 -17
- package/docs/guides/read-file/mime.md +0 -20
- package/docs/guides/read-file/stream.md +0 -26
- package/docs/guides/read-file/string.md +0 -22
- package/docs/guides/read-file/uint8array.md +0 -21
- package/docs/guides/read-file/watch.md +0 -68
- package/docs/guides/runtime/build-time-constants.md +0 -293
- package/docs/guides/runtime/cicd.md +0 -43
- package/docs/guides/runtime/codesign-macos-executable.md +0 -56
- package/docs/guides/runtime/define-constant.md +0 -145
- package/docs/guides/runtime/delete-directory.md +0 -37
- package/docs/guides/runtime/delete-file.md +0 -19
- package/docs/guides/runtime/heap-snapshot.md +0 -26
- package/docs/guides/runtime/import-html.md +0 -15
- package/docs/guides/runtime/import-json.md +0 -44
- package/docs/guides/runtime/import-toml.md +0 -30
- package/docs/guides/runtime/import-yaml.md +0 -102
- package/docs/guides/runtime/read-env.md +0 -32
- package/docs/guides/runtime/set-env.md +0 -47
- package/docs/guides/runtime/shell.md +0 -40
- package/docs/guides/runtime/timezone.md +0 -35
- package/docs/guides/runtime/tsconfig-paths.md +0 -29
- package/docs/guides/runtime/typescript.md +0 -49
- package/docs/guides/runtime/vscode-debugger.md +0 -47
- package/docs/guides/runtime/web-debugger.md +0 -82
- package/docs/guides/streams/node-readable-to-arraybuffer.md +0 -11
- package/docs/guides/streams/node-readable-to-blob.md +0 -11
- package/docs/guides/streams/node-readable-to-json.md +0 -12
- package/docs/guides/streams/node-readable-to-string.md +0 -12
- package/docs/guides/streams/node-readable-to-uint8array.md +0 -11
- package/docs/guides/streams/to-array.md +0 -14
- package/docs/guides/streams/to-arraybuffer.md +0 -14
- package/docs/guides/streams/to-blob.md +0 -14
- package/docs/guides/streams/to-buffer.md +0 -15
- package/docs/guides/streams/to-json.md +0 -14
- package/docs/guides/streams/to-string.md +0 -14
- package/docs/guides/streams/to-typedarray.md +0 -22
- package/docs/guides/test/bail.md +0 -22
- package/docs/guides/test/coverage-threshold.md +0 -60
- package/docs/guides/test/coverage.md +0 -44
- package/docs/guides/test/happy-dom.md +0 -68
- package/docs/guides/test/migrate-from-jest.md +0 -143
- package/docs/guides/test/mock-clock.md +0 -48
- package/docs/guides/test/mock-functions.md +0 -68
- package/docs/guides/test/rerun-each.md +0 -14
- package/docs/guides/test/run-tests.md +0 -111
- package/docs/guides/test/skip-tests.md +0 -39
- package/docs/guides/test/snapshot.md +0 -95
- package/docs/guides/test/spy-on.md +0 -46
- package/docs/guides/test/svelte-test.md +0 -120
- package/docs/guides/test/testing-library.md +0 -92
- package/docs/guides/test/timeout.md +0 -15
- package/docs/guides/test/todo-tests.md +0 -67
- package/docs/guides/test/update-snapshots.md +0 -46
- package/docs/guides/test/watch-mode.md +0 -19
- package/docs/guides/util/base64.md +0 -15
- package/docs/guides/util/deep-equals.md +0 -39
- package/docs/guides/util/deflate.md +0 -18
- package/docs/guides/util/detect-bun.md +0 -23
- package/docs/guides/util/entrypoint.md +0 -17
- package/docs/guides/util/escape-html.md +0 -22
- package/docs/guides/util/file-url-to-path.md +0 -14
- package/docs/guides/util/gzip.md +0 -18
- package/docs/guides/util/hash-a-password.md +0 -54
- package/docs/guides/util/import-meta-dir.md +0 -13
- package/docs/guides/util/import-meta-file.md +0 -13
- package/docs/guides/util/import-meta-path.md +0 -13
- package/docs/guides/util/javascript-uuid.md +0 -23
- package/docs/guides/util/main.md +0 -32
- package/docs/guides/util/path-to-file-url.md +0 -14
- package/docs/guides/util/sleep.md +0 -22
- package/docs/guides/util/version.md +0 -21
- package/docs/guides/util/which-path-to-executable-bin.md +0 -15
- package/docs/guides/websocket/compression.md +0 -31
- package/docs/guides/websocket/context.md +0 -77
- package/docs/guides/websocket/pubsub.md +0 -41
- package/docs/guides/websocket/simple.md +0 -33
- package/docs/guides/write-file/append.md +0 -52
- package/docs/guides/write-file/basic.md +0 -44
- package/docs/guides/write-file/blob.md +0 -28
- package/docs/guides/write-file/cat.md +0 -17
- package/docs/guides/write-file/file-cp.md +0 -16
- package/docs/guides/write-file/filesink.md +0 -52
- package/docs/guides/write-file/response.md +0 -17
- package/docs/guides/write-file/stdout.md +0 -21
- package/docs/guides/write-file/stream.md +0 -17
- package/docs/guides/write-file/unlink.md +0 -16
- package/docs/index.md +0 -77
- package/docs/install/audit.md +0 -57
- package/docs/install/cache.md +0 -59
- package/docs/install/catalogs.md +0 -298
- package/docs/install/index.md +0 -248
- package/docs/install/isolated.md +0 -197
- package/docs/install/lifecycle.md +0 -46
- package/docs/install/lockfile.md +0 -58
- package/docs/install/npmrc.md +0 -105
- package/docs/install/overrides.md +0 -73
- package/docs/install/patch.md +0 -59
- package/docs/install/registries.md +0 -30
- package/docs/install/security-scanner-api.md +0 -81
- package/docs/install/workspaces.md +0 -114
- package/docs/installation.md +0 -327
- package/docs/project/asan.md +0 -124
- package/docs/project/benchmarking.md +0 -203
- package/docs/project/bindgen.md +0 -225
- package/docs/project/building-windows.md +0 -162
- package/docs/project/contributing.md +0 -347
- package/docs/project/internals/build-process-for-ci.md +0 -75
- package/docs/project/licensing.md +0 -73
- package/docs/project/roadmap.md +0 -87
- package/docs/quickstart.md +0 -157
- package/docs/runtime/autoimport.md +0 -94
- package/docs/runtime/bun-apis.md +0 -207
- package/docs/runtime/bunfig.md +0 -772
- package/docs/runtime/debugger.md +0 -325
- package/docs/runtime/env.md +0 -253
- package/docs/runtime/hot.md +0 -145
- package/docs/runtime/index.md +0 -312
- package/docs/runtime/jsx.md +0 -385
- package/docs/runtime/loaders.md +0 -130
- package/docs/runtime/modules.md +0 -320
- package/docs/runtime/nodejs-apis.md +0 -463
- package/docs/runtime/plugins.md +0 -561
- package/docs/runtime/shell.md +0 -605
- package/docs/runtime/typescript.md +0 -139
- package/docs/runtime/web-apis.md +0 -128
- package/docs/test/configuration.md +0 -154
- package/docs/test/coverage.md +0 -142
- package/docs/test/discovery.md +0 -85
- package/docs/test/dom.md +0 -75
- package/docs/test/examples/concurrent-test-glob.md +0 -132
- package/docs/test/hot.md +0 -15
- package/docs/test/lifecycle.md +0 -81
- package/docs/test/mocks.md +0 -313
- package/docs/test/reporters.md +0 -117
- package/docs/test/runtime-behavior.md +0 -95
- package/docs/test/snapshots.md +0 -68
- package/docs/test/time.md +0 -126
- package/docs/test/writing.md +0 -825
- package/docs/typescript.md +0 -53
package/docs/api/import-meta.md
DELETED
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
The `import.meta` object is a way for a module to access information about itself. It's part of the JavaScript language, but its contents are not standardized. Each "host" (browser, runtime, etc) is free to implement any properties it wishes on the `import.meta` object.
|
|
2
|
-
|
|
3
|
-
Bun implements the following properties.
|
|
4
|
-
|
|
5
|
-
```ts#/path/to/project/file.ts
|
|
6
|
-
import.meta.dir; // => "/path/to/project"
|
|
7
|
-
import.meta.file; // => "file.ts"
|
|
8
|
-
import.meta.path; // => "/path/to/project/file.ts"
|
|
9
|
-
import.meta.url; // => "file:///path/to/project/file.ts"
|
|
10
|
-
|
|
11
|
-
import.meta.main; // `true` if this file is directly executed by `bun run`
|
|
12
|
-
// `false` otherwise
|
|
13
|
-
|
|
14
|
-
import.meta.resolve("zod"); // => "file:///path/to/project/node_modules/zod/index.js"
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
{% table %}
|
|
18
|
-
|
|
19
|
-
---
|
|
20
|
-
|
|
21
|
-
- `import.meta.dir`
|
|
22
|
-
- Absolute path to the directory containing the current file, e.g. `/path/to/project`. Equivalent to `__dirname` in CommonJS modules (and Node.js)
|
|
23
|
-
|
|
24
|
-
---
|
|
25
|
-
|
|
26
|
-
- `import.meta.dirname`
|
|
27
|
-
- An alias to `import.meta.dir`, for Node.js compatibility
|
|
28
|
-
|
|
29
|
-
---
|
|
30
|
-
|
|
31
|
-
- `import.meta.env`
|
|
32
|
-
- An alias to `process.env`.
|
|
33
|
-
|
|
34
|
-
---
|
|
35
|
-
|
|
36
|
-
- `import.meta.file`
|
|
37
|
-
- The name of the current file, e.g. `index.tsx`
|
|
38
|
-
|
|
39
|
-
---
|
|
40
|
-
|
|
41
|
-
- `import.meta.path`
|
|
42
|
-
- Absolute path to the current file, e.g. `/path/to/project/index.ts`. Equivalent to `__filename` in CommonJS modules (and Node.js)
|
|
43
|
-
|
|
44
|
-
---
|
|
45
|
-
|
|
46
|
-
- `import.meta.filename`
|
|
47
|
-
- An alias to `import.meta.path`, for Node.js compatibility
|
|
48
|
-
|
|
49
|
-
---
|
|
50
|
-
|
|
51
|
-
- `import.meta.main`
|
|
52
|
-
- Indicates whether the current file is the entrypoint to the current `bun` process. Is the file being directly executed by `bun run` or is it being imported?
|
|
53
|
-
|
|
54
|
-
---
|
|
55
|
-
|
|
56
|
-
- `import.meta.resolve`
|
|
57
|
-
- Resolve a module specifier (e.g. `"zod"` or `"./file.tsx"`) to a url. Equivalent to [`import.meta.resolve` in browsers](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/import.meta#resolve)
|
|
58
|
-
|
|
59
|
-
```ts
|
|
60
|
-
import.meta.resolve("zod");
|
|
61
|
-
// => "file:///path/to/project/node_modules/zod/index.ts"
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
---
|
|
65
|
-
|
|
66
|
-
- `import.meta.url`
|
|
67
|
-
- A `string` url to the current file, e.g. `file:///path/to/project/index.ts`. Equivalent to [`import.meta.url` in browsers](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/import.meta#url)
|
|
68
|
-
|
|
69
|
-
{% /table %}
|
package/docs/api/node-api.md
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
Node-API is an interface for building native add-ons to Node.js. Bun implements 95% of this interface from scratch, so most existing Node-API extensions will work with Bun out of the box. Track the completion status of it in [this issue](https://github.com/oven-sh/bun/issues/158).
|
|
2
|
-
|
|
3
|
-
As in Node.js, `.node` files (Node-API modules) can be required directly in Bun.
|
|
4
|
-
|
|
5
|
-
```js
|
|
6
|
-
const napi = require("./my-node-module.node");
|
|
7
|
-
```
|
|
8
|
-
|
|
9
|
-
Alternatively, use `process.dlopen`:
|
|
10
|
-
|
|
11
|
-
```js
|
|
12
|
-
let mod = { exports: {} };
|
|
13
|
-
process.dlopen(mod, "./my-node-module.node");
|
|
14
|
-
```
|
package/docs/api/redis.md
DELETED
|
@@ -1,597 +0,0 @@
|
|
|
1
|
-
Bun provides native bindings for working with Redis databases with a modern, Promise-based API. The interface is designed to be simple and performant, with built-in connection management, fully typed responses, and TLS support. **New in Bun v1.2.9**
|
|
2
|
-
|
|
3
|
-
```ts
|
|
4
|
-
import { redis } from "bun";
|
|
5
|
-
|
|
6
|
-
// Set a key
|
|
7
|
-
await redis.set("greeting", "Hello from Bun!");
|
|
8
|
-
|
|
9
|
-
// Get a key
|
|
10
|
-
const greeting = await redis.get("greeting");
|
|
11
|
-
console.log(greeting); // "Hello from Bun!"
|
|
12
|
-
|
|
13
|
-
// Increment a counter
|
|
14
|
-
await redis.set("counter", 0);
|
|
15
|
-
await redis.incr("counter");
|
|
16
|
-
|
|
17
|
-
// Check if a key exists
|
|
18
|
-
const exists = await redis.exists("greeting");
|
|
19
|
-
|
|
20
|
-
// Delete a key
|
|
21
|
-
await redis.del("greeting");
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
## Getting Started
|
|
25
|
-
|
|
26
|
-
To use the Redis client, you first need to create a connection:
|
|
27
|
-
|
|
28
|
-
```ts
|
|
29
|
-
import { redis, RedisClient } from "bun";
|
|
30
|
-
|
|
31
|
-
// Using the default client (reads connection info from environment)
|
|
32
|
-
// process.env.REDIS_URL is used by default
|
|
33
|
-
await redis.set("hello", "world");
|
|
34
|
-
const result = await redis.get("hello");
|
|
35
|
-
|
|
36
|
-
// Creating a custom client
|
|
37
|
-
const client = new RedisClient("redis://username:password@localhost:6379");
|
|
38
|
-
await client.set("counter", "0");
|
|
39
|
-
await client.incr("counter");
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
By default, the client reads connection information from the following environment variables (in order of precedence):
|
|
43
|
-
|
|
44
|
-
- `REDIS_URL`
|
|
45
|
-
- `VALKEY_URL`
|
|
46
|
-
- If not set, defaults to `"redis://localhost:6379"`
|
|
47
|
-
|
|
48
|
-
### Connection Lifecycle
|
|
49
|
-
|
|
50
|
-
The Redis client automatically handles connections in the background:
|
|
51
|
-
|
|
52
|
-
```ts
|
|
53
|
-
// No connection is made until a command is executed
|
|
54
|
-
const client = new RedisClient();
|
|
55
|
-
|
|
56
|
-
// First command initiates the connection
|
|
57
|
-
await client.set("key", "value");
|
|
58
|
-
|
|
59
|
-
// Connection remains open for subsequent commands
|
|
60
|
-
await client.get("key");
|
|
61
|
-
|
|
62
|
-
// Explicitly close the connection when done
|
|
63
|
-
client.close();
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
You can also manually control the connection lifecycle:
|
|
67
|
-
|
|
68
|
-
```ts
|
|
69
|
-
const client = new RedisClient();
|
|
70
|
-
|
|
71
|
-
// Explicitly connect
|
|
72
|
-
await client.connect();
|
|
73
|
-
|
|
74
|
-
// Run commands
|
|
75
|
-
await client.set("key", "value");
|
|
76
|
-
|
|
77
|
-
// Disconnect when done
|
|
78
|
-
client.close();
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
## Basic Operations
|
|
82
|
-
|
|
83
|
-
### String Operations
|
|
84
|
-
|
|
85
|
-
```ts
|
|
86
|
-
// Set a key
|
|
87
|
-
await redis.set("user:1:name", "Alice");
|
|
88
|
-
|
|
89
|
-
// Get a key
|
|
90
|
-
const name = await redis.get("user:1:name");
|
|
91
|
-
|
|
92
|
-
// Get a key as Uint8Array
|
|
93
|
-
const buffer = await redis.getBuffer("user:1:name");
|
|
94
|
-
|
|
95
|
-
// Delete a key
|
|
96
|
-
await redis.del("user:1:name");
|
|
97
|
-
|
|
98
|
-
// Check if a key exists
|
|
99
|
-
const exists = await redis.exists("user:1:name");
|
|
100
|
-
|
|
101
|
-
// Set expiration (in seconds)
|
|
102
|
-
await redis.set("session:123", "active");
|
|
103
|
-
await redis.expire("session:123", 3600); // expires in 1 hour
|
|
104
|
-
|
|
105
|
-
// Get time to live (in seconds)
|
|
106
|
-
const ttl = await redis.ttl("session:123");
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
### Numeric Operations
|
|
110
|
-
|
|
111
|
-
```ts
|
|
112
|
-
// Set initial value
|
|
113
|
-
await redis.set("counter", "0");
|
|
114
|
-
|
|
115
|
-
// Increment by 1
|
|
116
|
-
await redis.incr("counter");
|
|
117
|
-
|
|
118
|
-
// Decrement by 1
|
|
119
|
-
await redis.decr("counter");
|
|
120
|
-
```
|
|
121
|
-
|
|
122
|
-
### Hash Operations
|
|
123
|
-
|
|
124
|
-
```ts
|
|
125
|
-
// Set multiple fields in a hash
|
|
126
|
-
await redis.hmset("user:123", [
|
|
127
|
-
"name",
|
|
128
|
-
"Alice",
|
|
129
|
-
"email",
|
|
130
|
-
"alice@example.com",
|
|
131
|
-
"active",
|
|
132
|
-
"true",
|
|
133
|
-
]);
|
|
134
|
-
|
|
135
|
-
// Get multiple fields from a hash
|
|
136
|
-
const userFields = await redis.hmget("user:123", ["name", "email"]);
|
|
137
|
-
console.log(userFields); // ["Alice", "alice@example.com"]
|
|
138
|
-
|
|
139
|
-
// Get single field from hash (returns value directly, null if missing)
|
|
140
|
-
const userName = await redis.hget("user:123", "name");
|
|
141
|
-
console.log(userName); // "Alice"
|
|
142
|
-
|
|
143
|
-
// Increment a numeric field in a hash
|
|
144
|
-
await redis.hincrby("user:123", "visits", 1);
|
|
145
|
-
|
|
146
|
-
// Increment a float field in a hash
|
|
147
|
-
await redis.hincrbyfloat("user:123", "score", 1.5);
|
|
148
|
-
```
|
|
149
|
-
|
|
150
|
-
### Set Operations
|
|
151
|
-
|
|
152
|
-
```ts
|
|
153
|
-
// Add member to set
|
|
154
|
-
await redis.sadd("tags", "javascript");
|
|
155
|
-
|
|
156
|
-
// Remove member from set
|
|
157
|
-
await redis.srem("tags", "javascript");
|
|
158
|
-
|
|
159
|
-
// Check if member exists in set
|
|
160
|
-
const isMember = await redis.sismember("tags", "javascript");
|
|
161
|
-
|
|
162
|
-
// Get all members of a set
|
|
163
|
-
const allTags = await redis.smembers("tags");
|
|
164
|
-
|
|
165
|
-
// Get a random member
|
|
166
|
-
const randomTag = await redis.srandmember("tags");
|
|
167
|
-
|
|
168
|
-
// Pop (remove and return) a random member
|
|
169
|
-
const poppedTag = await redis.spop("tags");
|
|
170
|
-
```
|
|
171
|
-
|
|
172
|
-
## Pub/Sub
|
|
173
|
-
|
|
174
|
-
Bun provides native bindings for the [Redis
|
|
175
|
-
Pub/Sub](https://redis.io/docs/latest/develop/pubsub/) protocol. **New in Bun
|
|
176
|
-
1.2.23**
|
|
177
|
-
|
|
178
|
-
{% callout %}
|
|
179
|
-
**🚧** — The Redis Pub/Sub feature is experimental. Although we expect it to be
|
|
180
|
-
stable, we're currently actively looking for feedback and areas for improvement.
|
|
181
|
-
{% /callout %}
|
|
182
|
-
|
|
183
|
-
### Basic Usage
|
|
184
|
-
|
|
185
|
-
To get started publishing messages, you can set up a publisher in
|
|
186
|
-
`publisher.ts`:
|
|
187
|
-
|
|
188
|
-
```typescript#publisher.ts
|
|
189
|
-
import { RedisClient } from "bun";
|
|
190
|
-
|
|
191
|
-
const writer = new RedisClient("redis://localhost:6739");
|
|
192
|
-
await writer.connect();
|
|
193
|
-
|
|
194
|
-
writer.publish("general", "Hello everyone!");
|
|
195
|
-
|
|
196
|
-
writer.close();
|
|
197
|
-
```
|
|
198
|
-
|
|
199
|
-
In another file, create the subscriber in `subscriber.ts`:
|
|
200
|
-
|
|
201
|
-
```typescript#subscriber.ts
|
|
202
|
-
import { RedisClient } from "bun";
|
|
203
|
-
|
|
204
|
-
const listener = new RedisClient("redis://localhost:6739");
|
|
205
|
-
await listener.connect();
|
|
206
|
-
|
|
207
|
-
await listener.subscribe("general", (message, channel) => {
|
|
208
|
-
console.log(`Received: ${message}`);
|
|
209
|
-
});
|
|
210
|
-
```
|
|
211
|
-
|
|
212
|
-
In one shell, run your subscriber:
|
|
213
|
-
|
|
214
|
-
```bash
|
|
215
|
-
bun run subscriber.ts
|
|
216
|
-
```
|
|
217
|
-
|
|
218
|
-
and, in another, run your publisher:
|
|
219
|
-
|
|
220
|
-
```bash
|
|
221
|
-
bun run publisher.ts
|
|
222
|
-
```
|
|
223
|
-
|
|
224
|
-
{% callout %}
|
|
225
|
-
**Note:** The subscription mode takes over the `RedisClient` connection. A
|
|
226
|
-
client with subscriptions can only call `RedisClient.prototype.subscribe()`. In
|
|
227
|
-
other words, applications which need to message Redis need a separate
|
|
228
|
-
connection, acquirable through `.duplicate()`:
|
|
229
|
-
|
|
230
|
-
```typescript
|
|
231
|
-
import { RedisClient } from "bun";
|
|
232
|
-
|
|
233
|
-
const redis = new RedisClient("redis://localhost:6379");
|
|
234
|
-
await redis.connect();
|
|
235
|
-
const subscriber = await redis.duplicate();
|
|
236
|
-
|
|
237
|
-
await subscriber.subscribe("foo", () => {});
|
|
238
|
-
await redis.set("bar", "baz");
|
|
239
|
-
```
|
|
240
|
-
|
|
241
|
-
{% /callout %}
|
|
242
|
-
|
|
243
|
-
### Publishing
|
|
244
|
-
|
|
245
|
-
Publishing messages is done through the `publish()` method:
|
|
246
|
-
|
|
247
|
-
```typescript
|
|
248
|
-
await client.publish(channelName, message);
|
|
249
|
-
```
|
|
250
|
-
|
|
251
|
-
### Subscriptions
|
|
252
|
-
|
|
253
|
-
The Bun `RedisClient` allows you to subscribe to channels through the
|
|
254
|
-
`.subscribe()` method:
|
|
255
|
-
|
|
256
|
-
```typescript
|
|
257
|
-
await client.subscribe(channel, (message, channel) => {});
|
|
258
|
-
```
|
|
259
|
-
|
|
260
|
-
You can unsubscribe through the `.unsubscribe()` method:
|
|
261
|
-
|
|
262
|
-
```typescript
|
|
263
|
-
await client.unsubscribe(); // Unsubscribe from all channels.
|
|
264
|
-
await client.unsubscribe(channel); // Unsubscribe a particular channel.
|
|
265
|
-
await client.unsubscribe(channel, listener); // Unsubscribe a particular listener.
|
|
266
|
-
```
|
|
267
|
-
|
|
268
|
-
## Advanced Usage
|
|
269
|
-
|
|
270
|
-
### Command Execution and Pipelining
|
|
271
|
-
|
|
272
|
-
The client automatically pipelines commands, improving performance by sending multiple commands in a batch and processing responses as they arrive.
|
|
273
|
-
|
|
274
|
-
```ts
|
|
275
|
-
// Commands are automatically pipelined by default
|
|
276
|
-
const [infoResult, listResult] = await Promise.all([
|
|
277
|
-
redis.get("user:1:name"),
|
|
278
|
-
redis.get("user:2:email"),
|
|
279
|
-
]);
|
|
280
|
-
```
|
|
281
|
-
|
|
282
|
-
To disable automatic pipelining, you can set the `enableAutoPipelining` option to `false`:
|
|
283
|
-
|
|
284
|
-
```ts
|
|
285
|
-
const client = new RedisClient("redis://localhost:6379", {
|
|
286
|
-
enableAutoPipelining: false,
|
|
287
|
-
});
|
|
288
|
-
```
|
|
289
|
-
|
|
290
|
-
### Raw Commands
|
|
291
|
-
|
|
292
|
-
When you need to use commands that don't have convenience methods, you can use the `send` method:
|
|
293
|
-
|
|
294
|
-
```ts
|
|
295
|
-
// Run any Redis command
|
|
296
|
-
const info = await redis.send("INFO", []);
|
|
297
|
-
|
|
298
|
-
// LPUSH to a list
|
|
299
|
-
await redis.send("LPUSH", ["mylist", "value1", "value2"]);
|
|
300
|
-
|
|
301
|
-
// Get list range
|
|
302
|
-
const list = await redis.send("LRANGE", ["mylist", "0", "-1"]);
|
|
303
|
-
```
|
|
304
|
-
|
|
305
|
-
The `send` method allows you to use any Redis command, even ones that don't have dedicated methods in the client. The first argument is the command name, and the second argument is an array of string arguments.
|
|
306
|
-
|
|
307
|
-
### Connection Events
|
|
308
|
-
|
|
309
|
-
You can register handlers for connection events:
|
|
310
|
-
|
|
311
|
-
```ts
|
|
312
|
-
const client = new RedisClient();
|
|
313
|
-
|
|
314
|
-
// Called when successfully connected to Redis server
|
|
315
|
-
client.onconnect = () => {
|
|
316
|
-
console.log("Connected to Redis server");
|
|
317
|
-
};
|
|
318
|
-
|
|
319
|
-
// Called when disconnected from Redis server
|
|
320
|
-
client.onclose = error => {
|
|
321
|
-
console.error("Disconnected from Redis server:", error);
|
|
322
|
-
};
|
|
323
|
-
|
|
324
|
-
// Manually connect/disconnect
|
|
325
|
-
await client.connect();
|
|
326
|
-
client.close();
|
|
327
|
-
```
|
|
328
|
-
|
|
329
|
-
### Connection Status and Monitoring
|
|
330
|
-
|
|
331
|
-
```ts
|
|
332
|
-
// Check if connected
|
|
333
|
-
console.log(client.connected); // boolean indicating connection status
|
|
334
|
-
|
|
335
|
-
// Check amount of data buffered (in bytes)
|
|
336
|
-
console.log(client.bufferedAmount);
|
|
337
|
-
```
|
|
338
|
-
|
|
339
|
-
### Type Conversion
|
|
340
|
-
|
|
341
|
-
The Redis client handles automatic type conversion for Redis responses:
|
|
342
|
-
|
|
343
|
-
- Integer responses are returned as JavaScript numbers
|
|
344
|
-
- Bulk strings are returned as JavaScript strings
|
|
345
|
-
- Simple strings are returned as JavaScript strings
|
|
346
|
-
- Null bulk strings are returned as `null`
|
|
347
|
-
- Array responses are returned as JavaScript arrays
|
|
348
|
-
- Error responses throw JavaScript errors with appropriate error codes
|
|
349
|
-
- Boolean responses (RESP3) are returned as JavaScript booleans
|
|
350
|
-
- Map responses (RESP3) are returned as JavaScript objects
|
|
351
|
-
- Set responses (RESP3) are returned as JavaScript arrays
|
|
352
|
-
|
|
353
|
-
Special handling for specific commands:
|
|
354
|
-
|
|
355
|
-
- `EXISTS` returns a boolean instead of a number (1 becomes true, 0 becomes false)
|
|
356
|
-
- `SISMEMBER` returns a boolean (1 becomes true, 0 becomes false)
|
|
357
|
-
|
|
358
|
-
The following commands disable automatic pipelining:
|
|
359
|
-
|
|
360
|
-
- `AUTH`
|
|
361
|
-
- `INFO`
|
|
362
|
-
- `QUIT`
|
|
363
|
-
- `EXEC`
|
|
364
|
-
- `MULTI`
|
|
365
|
-
- `WATCH`
|
|
366
|
-
- `SCRIPT`
|
|
367
|
-
- `SELECT`
|
|
368
|
-
- `CLUSTER`
|
|
369
|
-
- `DISCARD`
|
|
370
|
-
- `UNWATCH`
|
|
371
|
-
- `PIPELINE`
|
|
372
|
-
- `SUBSCRIBE`
|
|
373
|
-
- `UNSUBSCRIBE`
|
|
374
|
-
- `UNPSUBSCRIBE`
|
|
375
|
-
|
|
376
|
-
## Connection Options
|
|
377
|
-
|
|
378
|
-
When creating a client, you can pass various options to configure the connection:
|
|
379
|
-
|
|
380
|
-
```ts
|
|
381
|
-
const client = new RedisClient("redis://localhost:6379", {
|
|
382
|
-
// Connection timeout in milliseconds (default: 10000)
|
|
383
|
-
connectionTimeout: 5000,
|
|
384
|
-
|
|
385
|
-
// Idle timeout in milliseconds (default: 0 = no timeout)
|
|
386
|
-
idleTimeout: 30000,
|
|
387
|
-
|
|
388
|
-
// Whether to automatically reconnect on disconnection (default: true)
|
|
389
|
-
autoReconnect: true,
|
|
390
|
-
|
|
391
|
-
// Maximum number of reconnection attempts (default: 10)
|
|
392
|
-
maxRetries: 10,
|
|
393
|
-
|
|
394
|
-
// Whether to queue commands when disconnected (default: true)
|
|
395
|
-
enableOfflineQueue: true,
|
|
396
|
-
|
|
397
|
-
// Whether to automatically pipeline commands (default: true)
|
|
398
|
-
enableAutoPipelining: true,
|
|
399
|
-
|
|
400
|
-
// TLS options (default: false)
|
|
401
|
-
tls: true,
|
|
402
|
-
// Alternatively, provide custom TLS config:
|
|
403
|
-
// tls: {
|
|
404
|
-
// rejectUnauthorized: true,
|
|
405
|
-
// ca: "path/to/ca.pem",
|
|
406
|
-
// cert: "path/to/cert.pem",
|
|
407
|
-
// key: "path/to/key.pem",
|
|
408
|
-
// }
|
|
409
|
-
});
|
|
410
|
-
```
|
|
411
|
-
|
|
412
|
-
### Reconnection Behavior
|
|
413
|
-
|
|
414
|
-
When a connection is lost, the client automatically attempts to reconnect with exponential backoff:
|
|
415
|
-
|
|
416
|
-
1. The client starts with a small delay (50ms) and doubles it with each attempt
|
|
417
|
-
2. Reconnection delay is capped at 2000ms (2 seconds)
|
|
418
|
-
3. The client attempts to reconnect up to `maxRetries` times (default: 10)
|
|
419
|
-
4. Commands executed during disconnection are:
|
|
420
|
-
- Queued if `enableOfflineQueue` is true (default)
|
|
421
|
-
- Rejected immediately if `enableOfflineQueue` is false
|
|
422
|
-
|
|
423
|
-
## Supported URL Formats
|
|
424
|
-
|
|
425
|
-
The Redis client supports various URL formats:
|
|
426
|
-
|
|
427
|
-
```ts
|
|
428
|
-
// Standard Redis URL
|
|
429
|
-
new RedisClient("redis://localhost:6379");
|
|
430
|
-
new RedisClient("redis://localhost:6379");
|
|
431
|
-
|
|
432
|
-
// With authentication
|
|
433
|
-
new RedisClient("redis://username:password@localhost:6379");
|
|
434
|
-
|
|
435
|
-
// With database number
|
|
436
|
-
new RedisClient("redis://localhost:6379/0");
|
|
437
|
-
|
|
438
|
-
// TLS connections
|
|
439
|
-
new RedisClient("rediss://localhost:6379");
|
|
440
|
-
new RedisClient("rediss://localhost:6379");
|
|
441
|
-
new RedisClient("redis+tls://localhost:6379");
|
|
442
|
-
new RedisClient("redis+tls://localhost:6379");
|
|
443
|
-
|
|
444
|
-
// Unix socket connections
|
|
445
|
-
new RedisClient("redis+unix:///path/to/socket");
|
|
446
|
-
new RedisClient("redis+unix:///path/to/socket");
|
|
447
|
-
|
|
448
|
-
// TLS over Unix socket
|
|
449
|
-
new RedisClient("redis+tls+unix:///path/to/socket");
|
|
450
|
-
new RedisClient("redis+tls+unix:///path/to/socket");
|
|
451
|
-
```
|
|
452
|
-
|
|
453
|
-
## Error Handling
|
|
454
|
-
|
|
455
|
-
The Redis client throws typed errors for different scenarios:
|
|
456
|
-
|
|
457
|
-
```ts
|
|
458
|
-
try {
|
|
459
|
-
await redis.get("non-existent-key");
|
|
460
|
-
} catch (error) {
|
|
461
|
-
if (error.code === "ERR_REDIS_CONNECTION_CLOSED") {
|
|
462
|
-
console.error("Connection to Redis server was closed");
|
|
463
|
-
} else if (error.code === "ERR_REDIS_AUTHENTICATION_FAILED") {
|
|
464
|
-
console.error("Authentication failed");
|
|
465
|
-
} else {
|
|
466
|
-
console.error("Unexpected error:", error);
|
|
467
|
-
}
|
|
468
|
-
}
|
|
469
|
-
```
|
|
470
|
-
|
|
471
|
-
Common error codes:
|
|
472
|
-
|
|
473
|
-
- `ERR_REDIS_CONNECTION_CLOSED` - Connection to the server was closed
|
|
474
|
-
- `ERR_REDIS_AUTHENTICATION_FAILED` - Failed to authenticate with the server
|
|
475
|
-
- `ERR_REDIS_INVALID_RESPONSE` - Received an invalid response from the server
|
|
476
|
-
|
|
477
|
-
## Example Use Cases
|
|
478
|
-
|
|
479
|
-
### Caching
|
|
480
|
-
|
|
481
|
-
```ts
|
|
482
|
-
async function getUserWithCache(userId) {
|
|
483
|
-
const cacheKey = `user:${userId}`;
|
|
484
|
-
|
|
485
|
-
// Try to get from cache first
|
|
486
|
-
const cachedUser = await redis.get(cacheKey);
|
|
487
|
-
if (cachedUser) {
|
|
488
|
-
return JSON.parse(cachedUser);
|
|
489
|
-
}
|
|
490
|
-
|
|
491
|
-
// Not in cache, fetch from database
|
|
492
|
-
const user = await database.getUser(userId);
|
|
493
|
-
|
|
494
|
-
// Store in cache for 1 hour
|
|
495
|
-
await redis.set(cacheKey, JSON.stringify(user));
|
|
496
|
-
await redis.expire(cacheKey, 3600);
|
|
497
|
-
|
|
498
|
-
return user;
|
|
499
|
-
}
|
|
500
|
-
```
|
|
501
|
-
|
|
502
|
-
### Rate Limiting
|
|
503
|
-
|
|
504
|
-
```ts
|
|
505
|
-
async function rateLimit(ip, limit = 100, windowSecs = 3600) {
|
|
506
|
-
const key = `ratelimit:${ip}`;
|
|
507
|
-
|
|
508
|
-
// Increment counter
|
|
509
|
-
const count = await redis.incr(key);
|
|
510
|
-
|
|
511
|
-
// Set expiry if this is the first request in window
|
|
512
|
-
if (count === 1) {
|
|
513
|
-
await redis.expire(key, windowSecs);
|
|
514
|
-
}
|
|
515
|
-
|
|
516
|
-
// Check if limit exceeded
|
|
517
|
-
return {
|
|
518
|
-
limited: count > limit,
|
|
519
|
-
remaining: Math.max(0, limit - count),
|
|
520
|
-
};
|
|
521
|
-
}
|
|
522
|
-
```
|
|
523
|
-
|
|
524
|
-
### Session Storage
|
|
525
|
-
|
|
526
|
-
```ts
|
|
527
|
-
async function createSession(userId, data) {
|
|
528
|
-
const sessionId = crypto.randomUUID();
|
|
529
|
-
const key = `session:${sessionId}`;
|
|
530
|
-
|
|
531
|
-
// Store session with expiration
|
|
532
|
-
await redis.hmset(key, [
|
|
533
|
-
"userId",
|
|
534
|
-
userId.toString(),
|
|
535
|
-
"created",
|
|
536
|
-
Date.now().toString(),
|
|
537
|
-
"data",
|
|
538
|
-
JSON.stringify(data),
|
|
539
|
-
]);
|
|
540
|
-
await redis.expire(key, 86400); // 24 hours
|
|
541
|
-
|
|
542
|
-
return sessionId;
|
|
543
|
-
}
|
|
544
|
-
|
|
545
|
-
async function getSession(sessionId) {
|
|
546
|
-
const key = `session:${sessionId}`;
|
|
547
|
-
|
|
548
|
-
// Get session data
|
|
549
|
-
const exists = await redis.exists(key);
|
|
550
|
-
if (!exists) return null;
|
|
551
|
-
|
|
552
|
-
const [userId, created, data] = await redis.hmget(key, [
|
|
553
|
-
"userId",
|
|
554
|
-
"created",
|
|
555
|
-
"data",
|
|
556
|
-
]);
|
|
557
|
-
|
|
558
|
-
return {
|
|
559
|
-
userId: Number(userId),
|
|
560
|
-
created: Number(created),
|
|
561
|
-
data: JSON.parse(data),
|
|
562
|
-
};
|
|
563
|
-
}
|
|
564
|
-
```
|
|
565
|
-
|
|
566
|
-
## Implementation Notes
|
|
567
|
-
|
|
568
|
-
Bun's Redis client is implemented in Zig and uses the Redis Serialization Protocol (RESP3). It manages connections efficiently and provides automatic reconnection with exponential backoff.
|
|
569
|
-
|
|
570
|
-
The client supports pipelining commands, meaning multiple commands can be sent without waiting for the replies to previous commands. This significantly improves performance when sending multiple commands in succession.
|
|
571
|
-
|
|
572
|
-
### RESP3 Protocol Support
|
|
573
|
-
|
|
574
|
-
Bun's Redis client uses the newer RESP3 protocol by default, which provides more data types and features compared to RESP2:
|
|
575
|
-
|
|
576
|
-
- Better error handling with typed errors
|
|
577
|
-
- Native Boolean responses
|
|
578
|
-
- Map/Dictionary responses (key-value objects)
|
|
579
|
-
- Set responses
|
|
580
|
-
- Double (floating point) values
|
|
581
|
-
- BigNumber support for large integer values
|
|
582
|
-
|
|
583
|
-
When connecting to Redis servers using older versions that don't support RESP3, the client automatically fallbacks to compatible modes.
|
|
584
|
-
|
|
585
|
-
## Limitations and Future Plans
|
|
586
|
-
|
|
587
|
-
Current limitations of the Redis client we are planning to address in future versions:
|
|
588
|
-
|
|
589
|
-
- [ ] Transactions (MULTI/EXEC) must be done through raw commands for now
|
|
590
|
-
- [ ] Streams are supported but without dedicated methods
|
|
591
|
-
- [ ] Pub/Sub does not currently support binary data, nor pattern-based
|
|
592
|
-
subscriptions.
|
|
593
|
-
|
|
594
|
-
Unsupported features:
|
|
595
|
-
|
|
596
|
-
- Redis Sentinel
|
|
597
|
-
- Redis Cluster
|