Skip to content

Commit 335d946

Browse files
monkey92tiph0bogdandrutuvmihailencodependabot[bot]
authored
chore: sync master (#2051)
* Upgrade redis-server version (#1833) * Upgrade redis-server version Signed-off-by: monkey <golang@88.com> * XAutoClaim changed the return value Signed-off-by: monkey <golang@88.com> * add cmd: geosearch, geosearchstore (#1836) * add cmd: geosearch, geosearchstore Signed-off-by: monkey92t <golang@88.com> * GeoSearchQuery and GeoSearchLocationQuery changed to pointer passing Signed-off-by: monkey92t <golang@88.com> * Added missing method XInfoStreamFull to Cmdable interface * Run go mod tidy in redisotel Signed-off-by: Bogdan Drutu <bogdandrutu@gmail.com> * Revert "ConnPool check fd for bad conns (#1824)" (#1849) This reverts commit 346bfaf. * Automate release process (#1852) * Bump github.com/onsi/gomega from 1.10.5 to 1.14.0 (#1832) * Bump github.com/onsi/gomega from 1.10.5 to 1.14.0 Bumps [github.com/onsi/gomega](https://github.com/onsi/gomega) from 1.10.5 to 1.14.0. - [Release notes](https://github.com/onsi/gomega/releases) - [Changelog](https://github.com/onsi/gomega/blob/master/CHANGELOG.md) - [Commits](onsi/gomega@v1.10.5...v1.14.0) --- updated-dependencies: - dependency-name: github.com/onsi/gomega dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> * Upgrade gomega to v1.15.0 Signed-off-by: monkey92t <golang@88.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: monkey92t <golang@88.com> * Add version.go * Fix otel example * Fix package name in release script * More fixes for otel example * And more * Fix release.sh * Release v8.11.3 (release.sh) * Create an annotated tag to give release.yml chance to run * Tweak tag.sh * Add Cmd.Slice helper to cast to []interface{} (#1859) * after the connection pool is closed, no new connections should be added (#1863) * after the connection pool is closed, no new connections should be added Signed-off-by: monkey92t <golang@88.com> * remove runGoroutine Signed-off-by: monkey92t <golang@88.com> * pool.popIdle add p.closed check Signed-off-by: monkey92t <golang@88.com> * upgrade golangci-lint v1.42.0 Signed-off-by: monkey92t <golang@88.com> * Bump github.com/onsi/gomega from 1.15.0 to 1.16.0 (#1865) Bumps [github.com/onsi/gomega](https://github.com/onsi/gomega) from 1.15.0 to 1.16.0. - [Release notes](https://github.com/onsi/gomega/releases) - [Changelog](https://github.com/onsi/gomega/blob/master/CHANGELOG.md) - [Commits](onsi/gomega@v1.15.0...v1.16.0) --- updated-dependencies: - dependency-name: github.com/onsi/gomega dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Add go 1.17 to the build matrix * Remove go 1.15 from build matrix * Add scan struct example (#1870) * Replace release job * Bump github.com/cespare/xxhash/v2 from 2.1.1 to 2.1.2 (#1872) Bumps [github.com/cespare/xxhash/v2](https://github.com/cespare/xxhash) from 2.1.1 to 2.1.2. - [Release notes](https://github.com/cespare/xxhash/releases) - [Commits](cespare/xxhash@v2.1.1...v2.1.2) --- updated-dependencies: - dependency-name: github.com/cespare/xxhash/v2 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Fix tag script to push tag by tag * Fix releasing.md * Fix/pubsub ping mutex (#1878) * Fix PubSub.Ping to hold the lock * Fix PubSub.Ping to hold the lock * add write cmd data-race test Signed-off-by: monkey92t <golang@88.com> Co-authored-by: monkey92t <golang@88.com> * chore: cleanup OpenTelemetry example * chore: gofmt all code * Refactor TestParseURL This is in preparation for supporting query parameters in ParseURL: - use an expected *Options instance to execute assertions on - extract assertions into helper function - enable parallel testing - condense test table * Add query parameter parsing to ParseURL() Before this change, ParseURL would only accept a very restricted set of URLs (it returned an error, if it encountered any parameter). This commit introduces the ability to process URLs like redis://localhost/1?dial_timeout=10s and similar. Go programs which were providing a configuration tunable (e.g. CLI flag, config entry or environment variable) to configure the Redis connection now don't need to perform this task themselves. * chore: add links to readme * chore: fix discussions link * empty hooks.withContext removed * chore: gofmt * chore: use conventional commits and auto-generate changelog * feat: add acl auth support for sentinels * chore: swap to acl auth at the test-level * Add support for BLMove command * chore: update dependencies * chore: update link * feat: add SetVal method for each command * feat: add Cmd.{String,Int,Float,Bool}Slice helpers and an example * chore: tweak GH actions to run all jobs * chore: add Lua scripting example * Fix Redis Cluster issue during roll outs of new nodes with same addr (#1914) * fix: recycle connections in some Redis Cluster scenarios This issue was surfaced in a Cloud Provider solution that used for rolling out new nodes using the same address (hostname) of the nodes that will be replaced in a Redis Cluster, while the former ones once depromoted as Slaves would continue in service during some mintues for redirecting traffic. The solution basically identifies when the connection could be stale since a MOVED response will be returned using the same address (hostname) that is being used by the connection. At that moment we consider the connection as no longer usable forcing to recycle the connection. * chore: lazy reload when moved or ask * chore: use conv commit message * chore: release v8.11.4 (release.sh) * fix: add whitespace for avoid unlikely colisions * fix: format * chore: fix links * chore: use ctx parameter in cmdInfo * Bump github.com/onsi/ginkgo from 1.16.4 to 1.16.5 (#1925) Bumps [github.com/onsi/ginkgo](https://github.com/onsi/ginkgo) from 1.16.4 to 1.16.5. - [Release notes](https://github.com/onsi/ginkgo/releases) - [Changelog](https://github.com/onsi/ginkgo/blob/master/CHANGELOG.md) - [Commits](onsi/ginkgo@v1.16.4...v1.16.5) --- updated-dependencies: - dependency-name: github.com/onsi/ginkgo dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * feat: add support for time.Duration write and scan * test: add test case for setting and scanning durations * chore: fix linter * fix(extra/redisotel): set span.kind attribute to client According to the opentelemetry specification this should always be set to client for database client libraries. I've also removed the SetAttributes call and instead set the attributes during creation of the span. This is what the library SHOULD be doing according to the opentelemetry api specification. * chore: update otel example * fix: update some argument counts in pre-allocs In some cases number of pre-allocated places in argument array is missing 1 or 2 elements, which results in re-allocation of twice as large array * chore: add example how to delete keys without a ttl * chore: don't enable all lints * chore(deps): bump github.com/onsi/gomega from 1.16.0 to 1.17.0 Bumps [github.com/onsi/gomega](https://github.com/onsi/gomega) from 1.16.0 to 1.17.0. - [Release notes](https://github.com/onsi/gomega/releases) - [Changelog](https://github.com/onsi/gomega/blob/master/CHANGELOG.md) - [Commits](onsi/gomega@v1.16.0...v1.17.0) --- updated-dependencies: - dependency-name: github.com/onsi/gomega dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> * feat: Add redis v7's NX, XX, GT, LT expire variants * chore: add missing readme * chore: tweak feature links * chore: remove Discord * fix: set timeout for WAIT command. Fixes #1963 * build: update `go` directive in `go.mod` to 1.17 This commit enables support for module graph pruning and lazy module loading for projects that are at Go 1.17 or higher. Reference: https://go.dev/ref/mod#go-mod-file-go Reference: https://go.dev/ref/mod#graph-pruning Reference: https://go.dev/ref/mod#lazy-loading Signed-off-by: Eng Zer Jun <engzerjun@gmail.com> * chore: update link * chore: export cmder.SetFirstKeyPos to support build module commands * feat(redisotel): ability to override TracerProvider (#1998) * fix: add missing Expire methods to Cmdable This is a followup to #1928 * chore(deps): bump github.com/onsi/gomega from 1.17.0 to 1.18.1 Bumps [github.com/onsi/gomega](https://github.com/onsi/gomega) from 1.17.0 to 1.18.1. - [Release notes](https://github.com/onsi/gomega/releases) - [Changelog](https://github.com/onsi/gomega/blob/master/CHANGELOG.md) - [Commits](onsi/gomega@v1.17.0...v1.18.1) --- updated-dependencies: - dependency-name: github.com/onsi/gomega dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> * Update README.md (#2011) chore: add fmt library in example code * chore: instrumentation name and version (#2012) * fix: invalid type assert in stringArg * chore: cleanup * fix: example/otel compile error (#2028) * fix: rename Golang to Go (#2030) https://go.dev/doc/faq#go_or_golang * feat: add support for passing extra attributes added to spans * feat: set net.peer.name and net.peer.port in otel example * chore: tweak Uptrace copy * feat: add support for COPY command (#2016) * feat: add support for acl sentinel auth in universal client * chore(deps): bump actions/checkout from 2 to 3 Bumps [actions/checkout](https://github.com/actions/checkout) from 2 to 3. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](actions/checkout@v2...v3) --- updated-dependencies: - dependency-name: actions/checkout dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> * chore: add hll example * chore: tweak release script * chore: release v8.11.5 (release.sh) * chore: add discord back Co-authored-by: Eugene Ponizovsky <ponizovsky@gmail.com> Co-authored-by: Bogdan Drutu <bogdandrutu@gmail.com> Co-authored-by: Vladimir Mihailenco <vladimir.webdev@gmail.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Kishan B <kishancs46@gmail.com> Co-authored-by: Dominik Menke <dom@digineo.de> Co-authored-by: Gökhan Özeloğlu <gozeloglu@gmail.com> Co-authored-by: Justin Sievenpiper <justin@sievenpiper.co> Co-authored-by: Алексей Романовский <aromanovsky@epiphan.com> Co-authored-by: Stavros Panakakakis <stavrospanakakis@gmail.com> Co-authored-by: Pau Freixes <pfreixes@gmail.com> Co-authored-by: Ethan Hur <ethan0311@gmail.com> Co-authored-by: Jackie <18378976+Pyrodash@users.noreply.github.com> Co-authored-by: Kristinn Björgvin Árdal <kristinnardalsecondary@gmail.com> Co-authored-by: ffenix113 <razerer@bigmir.net> Co-authored-by: Bastien Penavayre <bastienPenava@gmail.com> Co-authored-by: James3 Li(李麒傑) <james3_li@asus.com> Co-authored-by: Eng Zer Jun <engzerjun@gmail.com> Co-authored-by: gzjiangtao2014 <gzjiangtao2014@corp.netease.com> Co-authored-by: Nelz <nelz9999@users.noreply.github.com> Co-authored-by: Daniel Richter <Nexyz9@gmail.com> Co-authored-by: Seyed Ali Ghaffari <ali.ghaffari@outlook.com> Co-authored-by: lintanghui <lintanghui@bilibili.com> Co-authored-by: hidu <duv123+github@gmail.com> Co-authored-by: Jonas Lergell <jonas.lergell@volvocars.com> Co-authored-by: Alex Kahn <alexanderkahn@gmail.com>
1 parent 4261a2c commit 335d946

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

109 files changed

+3080
-942
lines changed

.github/FUNDING.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
custom: ['https://uptrace.dev']
1+
custom: ['https://uptrace.dev/sponsor']

.github/ISSUE_TEMPLATE/config.yml

-3
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,3 @@ contact_links:
33
- name: Discussions
44
url: https://github.com/go-redis/redis/discussions
55
about: Ask a question via GitHub Discussions
6-
- name: Discord
7-
url: https://discord.gg/rWtp5Aj
8-
about: Ask a question via Discord

.github/workflows/build.yml

+3-2
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,9 @@ jobs:
1111
name: build
1212
runs-on: ubuntu-latest
1313
strategy:
14+
fail-fast: false
1415
matrix:
15-
go-version: [1.15.x, 1.16.x]
16+
go-version: [1.16.x, 1.17.x]
1617

1718
services:
1819
redis:
@@ -29,7 +30,7 @@ jobs:
2930
go-version: ${{ matrix.go-version }}
3031

3132
- name: Checkout code
32-
uses: actions/checkout@v2
33+
uses: actions/checkout@v3
3334

3435
- name: Test
3536
run: make test

.github/workflows/commitlint.yml

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
name: Lint Commit Messages
2+
on: [pull_request]
3+
4+
jobs:
5+
commitlint:
6+
runs-on: ubuntu-latest
7+
steps:
8+
- uses: actions/checkout@v3
9+
with:
10+
fetch-depth: 0
11+
- uses: wagoid/commitlint-github-action@v4

.github/workflows/golangci-lint.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,6 @@ jobs:
1515
name: lint
1616
runs-on: ubuntu-latest
1717
steps:
18-
- uses: actions/checkout@v2
18+
- uses: actions/checkout@v3
1919
- name: golangci-lint
2020
uses: golangci/golangci-lint-action@v2

.github/workflows/release.yml

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
name: Releases
2+
3+
on:
4+
push:
5+
tags:
6+
- 'v*'
7+
8+
jobs:
9+
build:
10+
runs-on: ubuntu-latest
11+
steps:
12+
- uses: actions/checkout@v3
13+
- uses: ncipollo/release-action@v1
14+
with:
15+
body:
16+
Please refer to
17+
[CHANGELOG.md](https://github.com/go-redis/redis/blob/master/CHANGELOG.md) for details

.golangci.yml

-22
Original file line numberDiff line numberDiff line change
@@ -2,25 +2,3 @@ run:
22
concurrency: 8
33
deadline: 5m
44
tests: false
5-
linters:
6-
enable-all: true
7-
disable:
8-
- funlen
9-
- gochecknoglobals
10-
- gochecknoinits
11-
- gocognit
12-
- goconst
13-
- godox
14-
- gosec
15-
- maligned
16-
- wsl
17-
- gomnd
18-
- goerr113
19-
- exhaustive
20-
- nestif
21-
- nlreturn
22-
- exhaustivestruct
23-
- wrapcheck
24-
- errorlint
25-
- cyclop
26-
- forcetypeassert
File renamed without changes.

CHANGELOG.md

+37-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,41 @@
1-
# Changelog
1+
## [8.11.5](https://github.com/go-redis/redis/compare/v8.11.4...v8.11.5) (2022-03-17)
2+
3+
4+
### Bug Fixes
5+
6+
* add missing Expire methods to Cmdable ([17e3b43](https://github.com/go-redis/redis/commit/17e3b43879d516437ada71cf9c0deac6a382ed9a))
7+
* add whitespace for avoid unlikely colisions ([7f7c181](https://github.com/go-redis/redis/commit/7f7c1817617cfec909efb13d14ad22ef05a6ad4c))
8+
* example/otel compile error ([#2028](https://github.com/go-redis/redis/issues/2028)) ([187c07c](https://github.com/go-redis/redis/commit/187c07c41bf68dc3ab280bc3a925e960bbef6475))
9+
* **extra/redisotel:** set span.kind attribute to client ([065b200](https://github.com/go-redis/redis/commit/065b200070b41e6e949710b4f9e01b50ccc60ab2))
10+
* format ([96f53a0](https://github.com/go-redis/redis/commit/96f53a0159a28affa94beec1543a62234e7f8b32))
11+
* invalid type assert in stringArg ([de6c131](https://github.com/go-redis/redis/commit/de6c131865b8263400c8491777b295035f2408e4))
12+
* rename Golang to Go ([#2030](https://github.com/go-redis/redis/issues/2030)) ([b82a2d9](https://github.com/go-redis/redis/commit/b82a2d9d4d2de7b7cbe8fcd4895be62dbcacacbc))
13+
* set timeout for WAIT command. Fixes [#1963](https://github.com/go-redis/redis/issues/1963) ([333fee1](https://github.com/go-redis/redis/commit/333fee1a8fd98a2fbff1ab187c1b03246a7eb01f))
14+
* update some argument counts in pre-allocs ([f6974eb](https://github.com/go-redis/redis/commit/f6974ebb5c40a8adf90d2cacab6dc297f4eba4c2))
15+
16+
17+
### Features
18+
19+
* Add redis v7's NX, XX, GT, LT expire variants ([e19bbb2](https://github.com/go-redis/redis/commit/e19bbb26e2e395c6e077b48d80d79e99f729a8b8))
20+
* add support for acl sentinel auth in universal client ([ab0ccc4](https://github.com/go-redis/redis/commit/ab0ccc47413f9b2a6eabc852fed5005a3ee1af6e))
21+
* add support for COPY command ([#2016](https://github.com/go-redis/redis/issues/2016)) ([730afbc](https://github.com/go-redis/redis/commit/730afbcffb93760e8a36cc06cfe55ab102b693a7))
22+
* add support for passing extra attributes added to spans ([39faaa1](https://github.com/go-redis/redis/commit/39faaa171523834ba527c9789710c4fde87f5a2e))
23+
* add support for time.Duration write and scan ([2f1b74e](https://github.com/go-redis/redis/commit/2f1b74e20cdd7719b2aecf0768d3e3ae7c3e781b))
24+
* **redisotel:** ability to override TracerProvider ([#1998](https://github.com/go-redis/redis/issues/1998)) ([bf8d4aa](https://github.com/go-redis/redis/commit/bf8d4aa60c00366cda2e98c3ddddc8cf68507417))
25+
* set net.peer.name and net.peer.port in otel example ([69bf454](https://github.com/go-redis/redis/commit/69bf454f706204211cd34835f76b2e8192d3766d))
26+
27+
28+
29+
## [8.11.4](https://github.com/go-redis/redis/compare/v8.11.3...v8.11.4) (2021-10-04)
30+
31+
32+
### Features
33+
34+
* add acl auth support for sentinels ([f66582f](https://github.com/go-redis/redis/commit/f66582f44f3dc3a4705a5260f982043fde4aa634))
35+
* add Cmd.{String,Int,Float,Bool}Slice helpers and an example ([5d3d293](https://github.com/go-redis/redis/commit/5d3d293cc9c60b90871e2420602001463708ce24))
36+
* add SetVal method for each command ([168981d](https://github.com/go-redis/redis/commit/168981da2d84ee9e07d15d3e74d738c162e264c4))
37+
238

3-
> :heart:
4-
> [**Uptrace.dev** - All-in-one tool to optimize performance and monitor errors & logs](https://uptrace.dev)
539

640
## v9 UNRELEASED
741

Makefile

+14-5
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
PACKAGE_DIRS := $(shell find . -mindepth 2 -type f -name 'go.mod' -exec dirname {} \; | sort)
2+
13
test: testdeps
24
go test ./...
35
go test ./... -short -race
@@ -19,8 +21,15 @@ testdata/redis:
1921
testdata/redis/src/redis-server: testdata/redis
2022
cd $< && make all
2123

22-
tag:
23-
git tag $(VERSION)
24-
git tag extra/rediscmd/$(VERSION)
25-
git tag extra/redisotel/$(VERSION)
26-
git tag extra/rediscensus/$(VERSION)
24+
fmt:
25+
gofmt -w -s ./
26+
goimports -w -local github.com/go-redis/redis ./
27+
28+
go_mod_tidy:
29+
go get -u && go mod tidy
30+
set -e; for dir in $(PACKAGE_DIRS); do \
31+
echo "go mod tidy in $${dir}"; \
32+
(cd "$${dir}" && \
33+
go get -u && \
34+
go mod tidy); \
35+
done

README.md

+19-19
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,33 @@
1-
<p align="center">
2-
<a href="https://uptrace.dev/?utm_source=gh-redis&utm_campaign=gh-redis-banner1">
3-
<img src="https://raw.githubusercontent.com/uptrace/roadmap/master/banner1.png" alt="All-in-one tool to optimize performance and monitor errors & logs">
4-
</a>
5-
</p>
6-
7-
# Redis client for Golang
1+
# Redis client for Go
82

93
![build workflow](https://github.com/go-redis/redis/actions/workflows/build.yml/badge.svg)
104
[![PkgGoDev](https://pkg.go.dev/badge/github.com/go-redis/redis/v8)](https://pkg.go.dev/github.com/go-redis/redis/v8?tab=doc)
115
[![Documentation](https://img.shields.io/badge/redis-documentation-informational)](https://redis.uptrace.dev/)
126
[![Chat](https://discordapp.com/api/guilds/752070105847955518/widget.png)](https://discord.gg/rWtp5Aj)
137

14-
- Join [Discord](https://discord.gg/rWtp5Aj) to ask questions.
8+
go-redis is brought to you by :star: [**uptrace/uptrace**](https://github.com/uptrace/uptrace).
9+
Uptrace is an open source and blazingly fast **distributed tracing** backend powered by
10+
OpenTelemetry and ClickHouse. Give it a star as well!
11+
12+
## Resources
13+
14+
- [Discussions](https://github.com/go-redis/redis/discussions)
1515
- [Documentation](https://redis.uptrace.dev)
1616
- [Reference](https://pkg.go.dev/github.com/go-redis/redis/v8?tab=doc)
1717
- [Examples](https://pkg.go.dev/github.com/go-redis/redis/v8?tab=doc#pkg-examples)
1818
- [RealWorld example app](https://github.com/uptrace/go-treemux-realworld-example-app)
1919

20-
My other projects:
20+
Other projects you may like:
2121

2222
- [Bun](https://bun.uptrace.dev) - fast and simple SQL client for PostgreSQL, MySQL, and SQLite.
23-
- [treemux](https://github.com/vmihailenco/treemux) - high-speed, flexible, tree-based HTTP router
24-
for Go.
23+
- [BunRouter](https://bunrouter.uptrace.dev/) - fast and flexible HTTP router for Go.
2524

2625
## Ecosystem
2726

28-
- [Redis Mock](https://github.com/go-redis/redismock).
29-
- [Distributed Locks](https://github.com/bsm/redislock).
30-
- [Redis Cache](https://github.com/go-redis/cache).
31-
- [Rate limiting](https://github.com/go-redis/redis_rate).
27+
- [Redis Mock](https://github.com/go-redis/redismock)
28+
- [Distributed Locks](https://github.com/bsm/redislock)
29+
- [Redis Cache](https://github.com/go-redis/cache)
30+
- [Rate limiting](https://github.com/go-redis/redis_rate)
3231

3332
## Features
3433

@@ -37,16 +36,16 @@ My other projects:
3736
[circuit breaker](https://en.wikipedia.org/wiki/Circuit_breaker_design_pattern) support.
3837
- [Pub/Sub](https://pkg.go.dev/github.com/go-redis/redis/v8?tab=doc#PubSub).
3938
- [Transactions](https://pkg.go.dev/github.com/go-redis/redis/v8?tab=doc#example-Client-TxPipeline).
40-
- [Pipeline](https://pkg.go.dev/github.com/go-redis/redis/v8?tab=doc#example-Client-Pipeline) and
41-
[TxPipeline](https://pkg.go.dev/github.com/go-redis/redis/v8?tab=doc#example-Client-TxPipeline).
39+
- [Pipeline](https://pkg.go.dev/github.com/go-redis/redis/v8?tab=doc#example-Client.Pipeline) and
40+
[TxPipeline](https://pkg.go.dev/github.com/go-redis/redis/v8?tab=doc#example-Client.TxPipeline).
4241
- [Scripting](https://pkg.go.dev/github.com/go-redis/redis/v8?tab=doc#Script).
4342
- [Timeouts](https://pkg.go.dev/github.com/go-redis/redis/v8?tab=doc#Options).
4443
- [Redis Sentinel](https://pkg.go.dev/github.com/go-redis/redis/v8?tab=doc#NewFailoverClient).
4544
- [Redis Cluster](https://pkg.go.dev/github.com/go-redis/redis/v8?tab=doc#NewClusterClient).
46-
- [Cluster of Redis Servers](https://pkg.go.dev/github.com/go-redis/redis/v8?tab=doc#example-NewClusterClient--ManualSetup)
45+
- [Cluster of Redis Servers](https://pkg.go.dev/github.com/go-redis/redis/v8?tab=doc#example-NewClusterClient-ManualSetup)
4746
without using cluster mode and Redis Sentinel.
4847
- [Ring](https://pkg.go.dev/github.com/go-redis/redis/v8?tab=doc#NewRing).
49-
- [Instrumentation](https://pkg.go.dev/github.com/go-redis/redis/v8?tab=doc#ex-package--Instrumentation).
48+
- [Instrumentation](https://pkg.go.dev/github.com/go-redis/redis/v8?tab=doc#example-package-Instrumentation).
5049

5150
## Installation
5251

@@ -70,6 +69,7 @@ go get github.com/go-redis/redis/v8
7069
import (
7170
"context"
7271
"github.com/go-redis/redis/v8"
72+
"fmt"
7373
)
7474

7575
var ctx = context.Background()

RELEASING.md

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# Releasing
2+
3+
1. Run `release.sh` script which updates versions in go.mod files and pushes a new branch to GitHub:
4+
5+
```shell
6+
TAG=v1.0.0 ./scripts/release.sh
7+
```
8+
9+
2. Open a pull request and wait for the build to finish.
10+
11+
3. Merge the pull request and run `tag.sh` to create tags for packages:
12+
13+
```shell
14+
TAG=v1.0.0 ./scripts/tag.sh
15+
```

bench_test.go

+66
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"bytes"
55
"context"
66
"fmt"
7+
"strconv"
78
"strings"
89
"sync"
910
"testing"
@@ -233,6 +234,45 @@ func BenchmarkZAdd(b *testing.B) {
233234
})
234235
}
235236

237+
func BenchmarkXRead(b *testing.B) {
238+
ctx := context.Background()
239+
client := benchmarkRedisClient(ctx, 10)
240+
defer client.Close()
241+
242+
args := redis.XAddArgs{
243+
Stream: "1",
244+
ID: "*",
245+
Values: map[string]string{"uno": "dos"},
246+
}
247+
248+
lenStreams := 16
249+
streams := make([]string, 0, lenStreams)
250+
for i := 0; i < lenStreams; i++ {
251+
streams = append(streams, strconv.Itoa(i))
252+
}
253+
for i := 0; i < lenStreams; i++ {
254+
streams = append(streams, "0")
255+
}
256+
257+
b.ReportAllocs()
258+
b.ResetTimer()
259+
260+
b.RunParallel(func(pb *testing.PB) {
261+
for pb.Next() {
262+
client.XAdd(ctx, &args)
263+
264+
err := client.XRead(ctx, &redis.XReadArgs{
265+
Streams: streams,
266+
Count: 1,
267+
Block: time.Second,
268+
}).Err()
269+
if err != nil {
270+
b.Fatal(err)
271+
}
272+
}
273+
})
274+
}
275+
236276
var clientSink *redis.Client
237277

238278
func BenchmarkWithContext(b *testing.B) {
@@ -301,6 +341,32 @@ func BenchmarkClusterPing(b *testing.B) {
301341
})
302342
}
303343

344+
func BenchmarkClusterDoInt(b *testing.B) {
345+
if testing.Short() {
346+
b.Skip("skipping in short mode")
347+
}
348+
349+
ctx := context.Background()
350+
cluster := newClusterScenario()
351+
if err := startCluster(ctx, cluster); err != nil {
352+
b.Fatal(err)
353+
}
354+
defer cluster.Close()
355+
356+
client := cluster.newClusterClient(ctx, redisClusterOptions())
357+
defer client.Close()
358+
359+
b.ResetTimer()
360+
b.RunParallel(func(pb *testing.PB) {
361+
for pb.Next() {
362+
err := client.Do(ctx, "SET", 10, 10).Err()
363+
if err != nil {
364+
b.Fatal(err)
365+
}
366+
}
367+
})
368+
}
369+
304370
func BenchmarkClusterSetString(b *testing.B) {
305371
if testing.Short() {
306372
b.Skip("skipping in short mode")

0 commit comments

Comments
 (0)