Skip to content

v4.0.0-rc.4 #1723

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 119 commits into from
Nov 16, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
119 commits
Select commit Hold shift + click to select a range
7983dd4
update workflows & README
leibale Sep 2, 2021
e421dc4
add .deepsource.toml
leibale Sep 2, 2021
b80afc6
fix client.quit, add error events on cluster, fix some "deepsource.io…
leibale Sep 2, 2021
18ad329
Release 4.0.0-rc.1
leibale Sep 6, 2021
1413a69
add cluster.duplicate, add some tests
leibale Sep 9, 2021
08837c8
fix #1650 - add support for Buffer in some commands, add GET_BUFFER c…
leibale Sep 13, 2021
9fc08d4
fix GET and GET_BUFFER return type
leibale Sep 13, 2021
b91897a
update FAQ
leibale Sep 14, 2021
64f4567
Update invalid code example in README.md (#1654)
ricsam Sep 14, 2021
0f5a278
fix #1652
leibale Sep 14, 2021
d5fa6a3
Merge branch 'master' of https://github.com/NodeRedis/node-redis
leibale Sep 14, 2021
0ab2245
ref #1653 - better types
leibale Sep 18, 2021
5412479
better types
leibale Sep 18, 2021
10b9c59
fix 54124793ad1b633d39d372bdff487c9888c017a7
leibale Sep 18, 2021
3cd31e3
Update GEOSEARCHSTORE.spec.ts
leibale Sep 18, 2021
3a169d5
fix #1660 - add support for client.HSET('key', 'field', 'value')
leibale Sep 20, 2021
4585a52
Merge branch 'master' of https://github.com/NodeRedis/node-redis
leibale Sep 20, 2021
d79bc55
upgrade dependencies, update README
leibale Sep 20, 2021
1819b9c
fix #1659 - add support for db-number in client options url
leibale Sep 21, 2021
ad151cd
fix README, remove unused import, downgrade typedoc & typedoc-plugin-…
leibale Sep 21, 2021
1c13a65
update client-configurations.md
leibale Sep 21, 2021
9237a4e
fix README
leibale Sep 23, 2021
42dcf80
add CLUSTER_SLOTS, add some tests
leibale Sep 23, 2021
5be5474
Merge branch 'v4.0' of https://github.com/NodeRedis/node-redis
leibale Sep 23, 2021
7d286e7
fix "createClient with url" test with redis 5
leibale Sep 23, 2021
06ee6af
remove unused imports
leibale Sep 23, 2021
01df651
Release 4.0.0-rc.2
leibale Sep 23, 2021
1c863c5
Merge branch 'v4.0' of https://github.com/NodeRedis/node-redis
leibale Sep 23, 2021
9a1beed
add missing semicolon
leibale Sep 23, 2021
c19d200
replace empty "transformReply" functions with typescript "declare"
leibale Sep 29, 2021
068f7f4
fix EVAL & EVALSHA, add some tests, npm update
leibale Sep 29, 2021
43e546d
fix #1665 - add ZRANGEBYLEX, ZRANGEBYSCORE, ZRANGEBYSCORE_WITHSCORES
leibale Oct 1, 2021
5eb06bc
new issue templates
leibale Oct 1, 2021
6e7844e
add all COMMAND commands
leibale Oct 4, 2021
833416c
run COMMAND & COMMAND INFO tests only on redis >6
leibale Oct 4, 2021
ef93bb1
Create SECURITY.md
leibale Oct 5, 2021
cc83cee
fix #1671 - add support for all client configurations in cluster
leibale Oct 7, 2021
1d68406
Merge branch 'master' of https://github.com/NodeRedis/node-redis
leibale Oct 7, 2021
d7026f6
ref #1671 - add support for defaults
leibale Oct 7, 2021
13d4414
remove some commands from cluster, npm update, clean code,
leibale Oct 11, 2021
c650d86
lock benny version
leibale Oct 11, 2021
4097258
fix #1674 - remove `isolationPoolOptions` when creating isolated conn…
leibale Oct 11, 2021
61cec9d
increase test coverage
leibale Oct 11, 2021
b0f657c
update .npmignore
leibale Oct 11, 2021
235db19
Release 4.0.0-rc.3
leibale Oct 11, 2021
bd67394
Merge branch 'v4.0' of https://github.com/NodeRedis/node-redis
leibale Oct 11, 2021
eb11f83
fix README
leibale Oct 12, 2021
c8f3327
remove whitespace from LICENSE
leibale Oct 12, 2021
bc1ffbc
use "export { x as y }" instead of import & const
leibale Oct 12, 2021
a79b8fa
move from "NodeRedis" to "Redis"
leibale Oct 13, 2021
4b2ad95
fix #1676
leibale Oct 14, 2021
83ddbbf
update comments
leibale Oct 14, 2021
d958c3d
Auth before select database (#1679)
mustard-mh Oct 18, 2021
26774f8
Adds connect-as-acl-user example. (#1684)
Oct 18, 2021
293a028
Adds Apple .DS_Store file to .gitignore (#1685)
Oct 18, 2021
55cfee5
move examples
leibale Oct 18, 2021
ae264ff
clean some tests
leibale Oct 19, 2021
e3ebda1
clean code
leibale Oct 19, 2021
a5eb165
Adds examples table of contents and contribution guidelines. (#1686)
Oct 19, 2021
46aad78
Updated examples to use named functions. (#1687)
Oct 19, 2021
2a7a7c1
update docs, add 6.0.x to the tests matrix, add eslint, npm update, f…
leibale Oct 19, 2021
5be091f
fix tests with redis 6.0.x
leibale Oct 19, 2021
9f32ae7
fix ACL GETUSER test
leibale Oct 19, 2021
dd85537
fix client.quit and client.disconnect
leibale Oct 19, 2021
6fc6317
fix ACL GETUSER
leibale Oct 19, 2021
dec5048
Adds TypeScript note and corrects a typo.
Oct 21, 2021
d06ecc7
Fixes a bug in the Scan Iterator section. (#1694)
SuzeShardlow Oct 22, 2021
5539155
Made examples use local version.
Oct 25, 2021
9a4ac34
Add `lua-multi-incr.js` example (#1692)
radiantly Oct 25, 2021
9c3c42f
Add(examples): Create an example for blPop & lPush (#1696)
aditya-rastogi23 Oct 25, 2021
fdffa23
Add command-with-modifiers.js example (#1695)
rohan201 Oct 26, 2021
d409120
Issue # 1697 FIX - creates an example script that shows how to use th…
shashank19aug Oct 27, 2021
f6f9b3d
fix #1706 - HSET return type should be number
leibale Nov 1, 2021
5cff332
use dockers for tests, fix some bugs
leibale Nov 1, 2021
97dd75a
increase dockers timeout to 30s
leibale Nov 1, 2021
ecbd5b6
release drafter (#1683)
chayim Nov 4, 2021
3eb99db
use dockers for tests, use npm workspaces, add rejson & redisearch mo…
leibale Nov 9, 2021
69d98bf
fix #1712 - fix LINDEX return type
leibale Nov 9, 2021
64df5dc
uncomment TIME tests
leibale Nov 9, 2021
cd74f96
use codecov
leibale Nov 9, 2021
28018ca
fix tests.yml
leibale Nov 9, 2021
8b3daad
uncomment "should handle live resharding" test
leibale Nov 9, 2021
ab339d3
fix #1714 - update README(s)
leibale Nov 9, 2021
ca4ec86
add package-lock.json
leibale Nov 9, 2021
162ac4c
update CONTRIBUTING.md
leibale Nov 9, 2021
3ad8a22
update examples
leibale Nov 9, 2021
0e70f24
uncomment some tests
leibale Nov 10, 2021
57539e7
fix test-utils
leibale Nov 10, 2021
38426fe
move "all-in-one" to root folder
leibale Nov 10, 2021
27a1fa7
fix tests workflow
leibale Nov 10, 2021
f1f9c7a
fix bug in cluster slots, enhance live resharding test
leibale Nov 10, 2021
3d00978
fix live resharding test
leibale Nov 10, 2021
53bc564
fix #1707 - handle number arguments in legacy mode
leibale Nov 10, 2021
d4f6321
Add rejectedUnauthorized and other TLS options (#1708)
dajinchu Nov 11, 2021
a6a1637
Update socket.ts
leibale Nov 11, 2021
41423fe
fix #1716 - decode username and password from url
leibale Nov 11, 2021
ba66892
fix some Z (sorted list) commands, increase commands test coverage
leibale Nov 11, 2021
f93e28f
remove empty lines
leibale Nov 11, 2021
a9337b4
fix 'Scenario' typo (#1720)
HeCorr Nov 14, 2021
994d8dc
update readmes, add createCluster to the `redis` package
leibale Nov 15, 2021
571468e
Merge branch 'master' of https://github.com/redis/node-redis
leibale Nov 15, 2021
3979e30
add .release-it.json files, update some md files
leibale Nov 15, 2021
ddf539a
run tests on pull requests too
leibale Nov 15, 2021
7d2629f
Support esModuleInterop set to false. (#1717)
evert Nov 15, 2021
93e7c90
npm update, remove html from readme
leibale Nov 15, 2021
397f14c
add tests and licence badges
leibale Nov 15, 2021
d79a815
update changelog.md
leibale Nov 15, 2021
9540032
update .npmignore and .release-it.json
leibale Nov 15, 2021
4f1af43
update .release-it.json
leibale Nov 15, 2021
d32f1ed
Release [email protected]
leibale Nov 15, 2021
9e15472
revert d32f1edf8a8ede15ede5654168e345ebd95c3ac6
leibale Nov 15, 2021
7fc1d2d
fix .npmignore
leibale Nov 15, 2021
0cabe71
replace @redis with @node-redis
leibale Nov 16, 2021
b2aacb6
Release [email protected]
leibale Nov 16, 2021
4bca55a
update json & search version
leibale Nov 16, 2021
be063d1
Release [email protected]
leibale Nov 16, 2021
f2a3b3f
Release [email protected]
leibale Nov 16, 2021
b8359fe
update dependencies
leibale Nov 16, 2021
362daf6
Release [email protected]
leibale Nov 16, 2021
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
298 changes: 298 additions & 0 deletions .github/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,298 @@
# Node-Redis

[![Tests](https://img.shields.io/github/workflow/status/redis/node-redis/Tests/master.svg?label=tests)](https://codecov.io/gh/redis/node-redis)
[![Coverage](https://codecov.io/gh/redis/node-redis/branch/master/graph/badge.svg?token=xcfqHhJC37)](https://codecov.io/gh/redis/node-redis)
[![License](https://img.shields.io/github/license/redis/node-redis.svg)](https://codecov.io/gh/redis/node-redis)
[![Chat](https://img.shields.io/discord/697882427875393627.svg)](https://discord.gg/XMMVgxUm)

## Installation

```bash
npm install redis@next
```

> :warning: The new interface is clean and cool, but if you have an existing code base, you'll want to read the [migration guide](../docs/v3-to-v4.md).

## Usage

### Basic Example

```typescript
import { createClient } from 'redis';

(async () => {
const client = createClient();

client.on('error', (err) => console.log('Redis Client Error', err));

await client.connect();

await client.set('key', 'value');
const value = await client.get('key');
})();
```

The above code connects to localhost on port 6379. To connect to a different host or port, use a connection string in the format `redis[s]://[[username][:password]@][host][:port][/db-number]`:

```typescript
createClient({
url: 'redis://alice:[email protected]:6380'
});
```

You can also use discrete parameters, UNIX sockets, and even TLS to connect. Details can be found in the [client configuration guide](../docs/client-configuration.md).

### Redis Commands

There is built-in support for all of the [out-of-the-box Redis commands](https://redis.io/commands). They are exposed using the raw Redis command names (`HSET`, `HGETALL`, etc.) and a friendlier camel-cased version (`hSet`, `hGetAll`, etc.):

```typescript
// raw Redis commands
await client.HSET('key', 'field', 'value');
await client.HGETALL('key');

// friendly JavaScript commands
await client.hSet('key', 'field', 'value');
await client.hGetAll('key');
```

Modifiers to commands are specified using a JavaScript object:

```typescript
await client.set('key', 'value', {
EX: 10,
NX: true
});
```

Replies will be transformed into useful data structures:

```typescript
await client.hGetAll('key'); // { field1: 'value1', field2: 'value2' }
await client.hVals('key'); // ['value1', 'value2']
```

### Unsupported Redis Commands

If you want to run commands and/or use arguments that Node Redis doesn't know about (yet!) use `.sendCommand()`:

```typescript
await client.sendCommand(['SET', 'key', 'value', 'NX']); // 'OK'

await client.sendCommand(['HGETALL', 'key']); // ['key1', 'field1', 'key2', 'field2']
```

### Transactions (Multi/Exec)

Start a [transaction](https://redis.io/topics/transactions) by calling `.multi()`, then chaining your commands. When you're done, call `.exec()` and you'll get an array back with your results:

```typescript
await client.set('another-key', 'another-value');

const [setKeyReply, otherKeyValue] = await client
.multi()
.set('key', 'value')
.get('another-key')
.exec(); // ['OK', 'another-value']
```

You can also [watch](https://redis.io/topics/transactions#optimistic-locking-using-check-and-set) keys by calling `.watch()`. Your transaction will abort if any of the watched keys change.

To dig deeper into transactions, check out the [Isolated Execution Guide](../docs/isolated-execution.md).

### Blocking Commands

Any command can be run on a new connection by specifying the `isolated` option. The newly created connection is closed when the command's `Promise` is fulfilled.

This pattern works especially well for blocking commands—such as `BLPOP` and `BLMOVE`:

```typescript
import { commandOptions } from 'redis';

const blPopPromise = client.blPop(commandOptions({ isolated: true }), 'key', 0);

await client.lPush('key', ['1', '2']);

await blPopPromise; // '2'
```

To learn more about isolated execution, check out the [guide](../docs/isolated-execution.md).

### Pub/Sub

Subscribing to a channel requires a dedicated stand-alone connection. You can easily get one by `.duplicate()`ing an existing Redis connection.

```typescript
const subscriber = client.duplicate();

await subscriber.connect();
```

Once you have one, simply subscribe and unsubscribe as needed:

```typescript
await subscriber.subscribe('channel', (message) => {
console.log(message); // 'message'
});

await subscriber.pSubscribe('channe*', (message, channel) => {
console.log(message, channel); // 'message', 'channel'
});

await subscriber.unsubscribe('channel');

await subscriber.pUnsubscribe('channe*');
```

Publish a message on a channel:

```typescript
await publisher.publish('channel', 'message');
```

### Scan Iterator

[`SCAN`](https://redis.io/commands/scan) results can be looped over using [async iterators](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/asyncIterator):

```typescript
for await (const key of client.scanIterator()) {
// use the key!
await client.get(key);
}
```

This works with `HSCAN`, `SSCAN`, and `ZSCAN` too:

```typescript
for await (const { field, value } of client.hScanIterator('hash')) {}
for await (const member of client.sScanIterator('set')) {}
for await (const { score, member } of client.zScanIterator('sorted-set')) {}
```

You can override the default options by providing a configuration object:

```typescript
client.scanIterator({
TYPE: 'string', // `SCAN` only
MATCH: 'patter*',
COUNT: 100
});
```

### Lua Scripts

Define new functions using [Lua scripts](https://redis.io/commands/eval) which execute on the Redis server:

```typescript
import { createClient, defineScript } from 'redis';

(async () => {
const client = createClient({
scripts: {
add: defineScript({
NUMBER_OF_KEYS: 1,
SCRIPT:
'local val = redis.pcall("GET", KEYS[1]);' +
'return val + ARGV[1];',
transformArguments(key: string, toAdd: number): Array<string> {
return [key, toAdd.toString()];
},
transformReply(reply: number): number {
return reply;
}
})
}
});

await client.connect();

await client.set('key', '1');
await client.add('key', 2); // 3
})();
```

### Disconnecting

There are two functions that disconnect a client from the Redis server. In most scenarios you should use `.quit()` to ensure that pending commands are sent to Redis before closing a connection.

#### `.QUIT()`/`.quit()`

Gracefully close a client's connection to Redis, by sending the [`QUIT`](https://redis.io/commands/quit) command to the server. Before quitting, the client executes any remaining commands in its queue, and will receive replies from Redis for each of them.

```typescript
const [ping, get, quit] = await Promise.all([
client.ping(),
client.get('key'),
client.quit()
]); // ['PONG', null, 'OK']

try {
await client.get('key');
} catch (err) {
// ClosedClient Error
}
```

#### `.disconnect()`

Forcibly close a client's connection to Redis immediately. Calling `disconnect` will not send further pending commands to the Redis server, or wait for or parse outstanding responses.

```typescript
await client.disconnect();
```

### Auto-Pipelining

Node Redis will automatically pipeline requests that are made during the same "tick".

```typescript
client.set('Tm9kZSBSZWRpcw==', 'users:1');
client.sAdd('users:1:tokens', 'Tm9kZSBSZWRpcw==');
```

Of course, if you don't do something with your Promises you're certain to get [unhandled Promise exceptions](https://nodejs.org/api/process.html#process_event_unhandledrejection). To take advantage of auto-pipelining and handle your Promises, use `Promise.all()`.

```typescript
await Promise.all([
client.set('Tm9kZSBSZWRpcw==', 'users:1'),
client.sAdd('users:1:tokens', 'Tm9kZSBSZWRpcw==')
]);
```

### Clustering

Check out the [Clustering Guide](../docs/clustering.md) when using Node Redis to connect to a Redis Cluster.

## Supported Redis versions

Node Redis is supported with the following versions of Redis:

| Version | Supported |
|---------|--------------------|
| 6.2.z | :heavy_check_mark: |
| 6.0.z | :heavy_check_mark: |
| 5.y.z | :heavy_check_mark: |
| < 5.0 | :x: |

> Node Redis should work with older versions of Redis, but it is not fully tested and we cannot offer support.

## Packages

| Name | Description |
|-------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [redis](../) | [![Downloads](https://img.shields.io/npm/dm/redis.svg)](https://www.npmjs.com/package/redis/v/next) [![Version](https://img.shields.io/npm/v/redis/next.svg)](https://www.npmjs.com/package/redis/v/next) |
| [@node-redis/client](../packages/client) | [![Downloads](https://img.shields.io/npm/dm/@node-redis/client.svg)](https://www.npmjs.com/package/@node-redis/client/v/next) [![Version](https://img.shields.io/npm/v/@node-redis/client/next.svg)](https://www.npmjs.com/package/@node-redis/client/v/next) |
| [@node-redis/json](../packages/json) | [![Downloads](https://img.shields.io/npm/dm/@node-redis/json.svg)](https://www.npmjs.com/package/@node-redis/json/v/next) [![Version](https://img.shields.io/npm/v/@node-redis/json/next.svg)](https://www.npmjs.com/package/@node-redis/json/v/next) [Redis JSON](https://oss.redis.com/redisjson/) commands |
| [@node-redis/search](../packages/search) | [![Downloads](https://img.shields.io/npm/dm/@node-redis/search.svg)](https://www.npmjs.com/package/@node-redis/search/v/next) [![Version](https://img.shields.io/npm/v/@node-redis/search/next.svg)](https://www.npmjs.com/package/@node-redis/search/v/next) [Redis Search](https://oss.redis.com/redisearch/) commands |

## Contributing

If you'd like to contribute, check out the [contributing guide](CONTRIBUTING.md).

Thank you to all the people who already contributed to Node Redis!

[![Contributors](https://contrib.rocks/image?repo=redis/node-redis)](https://github.com/redis/node-redis/graphs/contributors)

## License

This repository is licensed under the "MIT" license. See [LICENSE](LICENSE).
43 changes: 43 additions & 0 deletions .github/release-drafter-config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
name-template: 'Version $NEXT_PATCH_VERSION'
tag-template: 'v$NEXT_PATCH_VERSION'
autolabeler:
- label: 'chore'
files:
- '*.md'
- '.github/*'
- label: 'bug'
branch:
- '/bug-.+'
- label: 'chore'
branch:
- '/chore-.+'
- label: 'feature'
branch:
- '/feature-.+'
categories:
- title: 'Breaking Changes'
labels:
- 'breakingchange'
- title: '🚀 New Features'
labels:
- 'feature'
- 'enhancement'
- title: '🐛 Bug Fixes'
labels:
- 'fix'
- 'bugfix'
- 'bug'
- title: '🧰 Maintenance'
label: 'chore'
change-template: '- $TITLE (#$NUMBER)'
exclude-labels:
- 'skip-changelog'
template: |
## Changes

$CHANGES

## Contributors
We'd like to thank all the contributors who worked on this release!

$CONTRIBUTORS
46 changes: 0 additions & 46 deletions .github/workflows/benchmark.yml

This file was deleted.

Loading