1
0
mirror of https://github.com/redis/go-redis.git synced 2025-09-02 22:01:16 +03:00

2725 Commits

Author SHA1 Message Date
LINKIWI
10121e9e1c feat(osscluster): Support subscriptions against cluster slave nodes (#3480) 2025-09-02 16:03:00 +03:00
Jonathan Suever
6f41b600c5 fix(client): Do not assume that all non-IP hosts are loopbacks (#3085)
* Do not assume that all non-IP hosts are loopbacks

* handle localhost and Docker internal hostnames

---------

Co-authored-by: Nedyalko Dyakov <nedyalko.dyakov@gmail.com>
Co-authored-by: Nedyalko Dyakov <1547186+ndyakov@users.noreply.github.com>
Co-authored-by: ofekshenawa <ofek.shenawa@redis.com>
Co-authored-by: ofekshenawa <104765379+ofekshenawa@users.noreply.github.com>
2025-09-02 15:58:50 +03:00
Matthew Hooker
f0058063a9 feat(otel): Add wait metrics to otel (#3493)
* Add wait metrics to otel

* add unit
2025-09-02 15:48:18 +03:00
cxljs
fafec3f3ce Pipeliner expose queued commands (#3496)
* Pipeliner expose queued commands

Signed-off-by: Xiaolong Chen <fukua95@gmail.com>

* add tests and update some comments

Signed-off-by: Xiaolong Chen <fukua95@gmail.com>

---------

Signed-off-by: Xiaolong Chen <fukua95@gmail.com>
2025-09-01 17:44:26 +03:00
cxljs
6b9cbe8c54 fix(test): fix a timing issue in pubsub test (#3498)
Signed-off-by: Xiaolong Chen <fukua95@gmail.com>
2025-09-01 17:15:50 +03:00
Nedyalko Dyakov
e91f6ced09 fix(make test): Add default env in makefile (#3491)
* fix(make test): add default env in makefile

* Apply suggestion from @ndyakov

* update hardcoded version
2025-09-01 16:17:28 +03:00
cxljs
6bc7238340 Fix the ReplicaOnly option does not take effect when using NewFailoverClusterClient (#3482)
Signed-off-by: Xiaolong Chen <fukua95@gmail.com>
Co-authored-by: Nedyalko Dyakov <1547186+ndyakov@users.noreply.github.com>
2025-09-01 10:09:32 +03:00
cxljs
bb94ac7898 chore(readme): Update the introduction to running tests in README.md (#3495)
* update README.md

Signed-off-by: Xiaolong Chen <fukua95@gmail.com>

* update README.md

Signed-off-by: Xiaolong Chen <fukua95@gmail.com>

---------

Signed-off-by: Xiaolong Chen <fukua95@gmail.com>
2025-09-01 10:08:14 +03:00
cybersmeashish
ff4d63e06b chore(test): Add comprehensive edge case tests for IncrByFloat command (#3477)
This commit adds extensive test coverage for the IncrByFloat Redis command,
covering various edge cases and scenarios that were not previously tested.

Test cases added:
- Negative increment values
- Zero increment (should return current value)
- High precision floating point operations
- Non-existent key behavior (should start from 0)
- Integer values stored as strings
- Scientific notation (both positive and negative)
- Error handling for non-numeric values
- Very large numbers (near float64 limits)
- Very small numbers (near zero precision)

These tests ensure robust behavior of the IncrByFloat command across
different numeric formats and edge conditions, improving the overall
reliability and test coverage of the go-redis library.

The tests use Gomega's BeNumerically matcher for floating point
comparisons to handle precision issues appropriately.
2025-08-18 20:05:47 +03:00
cxljs
e07f55bed1 chore(buffers): Set the default read/write buffer size of Redis connection to 32KiB (#3483)
* update README.md

Signed-off-by: Xiaolong Chen <fukua95@gmail.com>

* typo: 0.5MiB -> 256KiB

Signed-off-by: Xiaolong Chen <fukua95@gmail.com>

* Set the default read/write buffer size of Redis connection to 32KiB

Signed-off-by: Xiaolong Chen <fukua95@gmail.com>

---------

Signed-off-by: Xiaolong Chen <fukua95@gmail.com>
2025-08-18 20:04:55 +03:00
Elena Kolevska
b8682d037b chore(ci): Bumps test image to 8.2.1-pre (#3478)
* Bumps test image to 8.2.1-pre

Signed-off-by: Elena Kolevska <elena@kolevska.com>

* Missed the “benchmark” job

Signed-off-by: Elena Kolevska <elena@kolevska.com>

---------

Signed-off-by: Elena Kolevska <elena@kolevska.com>
2025-08-18 16:51:38 +03:00
cxljs
8336c44404 chore(client): fix UniversalOptions miss ReadBufferSize and WriteBufferSize options (#3485)
Signed-off-by: Xiaolong Chen <fukua95@gmail.com>
2025-08-18 15:46:31 +03:00
dependabot[bot]
d2ad801ba2 chore(deps): bump actions/checkout from 4 to 5 (#3484)
Bumps [actions/checkout](https://github.com/actions/checkout) from 4 to 5.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v4...v5)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: '5'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-18 11:33:44 +03:00
cxljs
97817108dd Set the read/write buffer size of the sentinel client to 4KiB (#3476)
Signed-off-by: Xiaolong Chen <fukua95@gmail.com>
2025-08-14 15:48:45 +03:00
ofekshenawa
0b1e9f77ef fix(json): Ensure that JSON.GET returns Nil response (#3470)
* fix conflicts

* Fix JSON nil response handling

Ensure that JSON.GET returns redis.Nil for missing keys/paths,
making it consistent with other Redis commands.

- Restore proper nil detection logic in JSONCmd.readReply
- Add comprehensive test coverage for JSON nil scenarios
- Handle both non-existent keys and non-existent paths consistently
- Distinguish between empty arrays and nil responses
- Add documentation for Val() and Expanded() methods

Original work and problem identification by Nic Gibson.
Enhanced implementation with comprehensive testing and fixes
for the broken nil detection logic.

Fixes #2987

* Fix JSON nil response handling - align with Redis behavior

- Non-existent keys return redis.Nil (consistent with other Redis commands)
- Non-existent paths in existing keys return empty array '[]'
- Fix broken test that was using wrong doc1 reference
- Add comprehensive test coverage for JSON nil scenarios

This aligns with official Redis JSON.GET behavior:
- Missing keys should return nil error like other Redis commands
- Missing paths should return empty JSON array, not error

* Fix JSONDel tests

---------

Co-authored-by: Nic Gibson <nic.gibson@redis.com>
Co-authored-by: Nedyalko Dyakov <1547186+ndyakov@users.noreply.github.com>
2025-08-12 14:28:07 +03:00
Elena Kolevska
b566dcacd6 chore(github): Removes dry run for stale issues policy (#3471) 2025-08-12 14:08:51 +03:00
ofekshenawa
436979f5c7 feat(options): Clean failing timeout implementation (#3472)
* Fix hard code of failing timeout

1. if not set failing time limit, default is 15 seconds.

* feat: Complete configurable FailingTimeoutSeconds implementation

---------

Co-authored-by: Shino Wu <shino_wu@trendmicro.com>
2025-08-12 14:08:28 +03:00
Hristo Temelski
6220024a38 chore(otel): Update otel metrics URL (#3474) 2025-08-12 14:07:17 +03:00
Nedyalko Dyakov
7b4a537aef chore(release): 9.12.1, failover client buffer size fixes (#3469) extra/rediscmd/v9.12.1 extra/rediscensus/v9.12.1 v9.12.1 extra/redisotel/v9.12.1 extra/redisprometheus/v9.12.1 2025-08-11 18:58:21 +03:00
Nedyalko Dyakov
94cfffa417 fix(options): Add buffer sizes to failover. Update README (#3468)
* fix(options): Add buffer sizes to failover. Update README

* fix(spellcheck): add KiB in wordlist

* fix(comment): fix defaul value in comment

* fixes #3465
2025-08-11 16:01:24 +03:00
Vladimir Mihailenco
2c29dedc2d chore(otel): upgrade otel example to Uptrace v2 (#3466)
Uptrace v2 comes with a new config file and new defaults.
Also updated dependencies to the latest versions.
2025-08-11 12:33:09 +03:00
Nedyalko Dyakov
b7838dc4e7 chore(release): 9.12.0 / redis 8.2 (#3464) extra/redisotel/v9.12.0 extra/rediscmd/v9.12.0 v9.12.0 extra/rediscensus/v9.12.0 extra/redisprometheus/v9.12.0 2025-08-05 16:50:25 +03:00
Monkey
6a48d3fec1 feat: recover addIdleConn may occur panic (#2445)
* feat: recover addIdleConn may occur panic

Signed-off-by: monkey92t <golang@88.com>

* fix test race

Signed-off-by: monkey92t <golang@88.com>

---------

Signed-off-by: monkey92t <golang@88.com>
Co-authored-by: Nedyalko Dyakov <1547186+ndyakov@users.noreply.github.com>
2025-08-05 15:31:58 +03:00
Cattī Crūdēlēs
4767d9dfaf fix(redisotel): fix buggy append in reportPoolStats (#3122)
The current append twice to `conf.attrs` approach in `reportPoolStats` may result in unexpected idleAttrs,
due to `append` [can mutate](https://github.com/golang/go/issues/29115#issuecomment-444669036) the underlying array of the original slice,
as demonstrated at <https://go.dev/play/p/jwRMofH91eQ?v=goprev>.

Also, I replaced `metric.WithAttributes` in `reportPoolStats` with `metric.WithAttributeSet`,
since `WithAttributes` is just `WithAttributeSet` with some extra works that are not needed here,
see <https://pkg.go.dev/go.opentelemetry.io/otel/metric@v1.22.0#WithAttributes>.

Co-authored-by: Nedyalko Dyakov <1547186+ndyakov@users.noreply.github.com>
2025-08-05 15:15:34 +03:00
Mykhailo Alipa
7158a8dad4 feat(ring): specify custom health check func via HeartbeatFn option (#2940)
* specify custom health check func via ShardHealthCheckFn option

* ShardHealthCheckFn renamed to HeartbeatFn

---------

Co-authored-by: Mykhailo Alipa <strobil@Mykhailos-MacBook-Air.local>
Co-authored-by: ofekshenawa <104765379+ofekshenawa@users.noreply.github.com>
Co-authored-by: Nedyalko Dyakov <nedyalko.dyakov@gmail.com>
Co-authored-by: Nedyalko Dyakov <1547186+ndyakov@users.noreply.github.com>
2025-08-05 15:00:33 +03:00
Elena Kolevska
8d15d03d4e chore(github): merges into one job with two steps (#3463)
Signed-off-by: Elena Kolevska <elena@kolevska.com>
2025-08-05 14:49:28 +03:00
cxljs
375fa5d083 chore(doc): improve code readability (#3446)
- replace two similar functions `appendUniqueNode` and `appendIfNotExists` with a generic function.

- simplify the implementation of the `get` method in `clusterNodes`

- keep the member name `_generation` of `clusterNodes` consistent with other types.

- rename a data member `_masterAddr` to `masterAddr`.

Signed-off-by: Xiaolong Chen <fukua95@gmail.com>
2025-08-04 17:22:16 +03:00
Nedyalko Dyakov
f006e941d9 chore(release): 9.12.0-beta.1 (#3460) extra/rediscmd/v9.12.0-beta.1 extra/redisprometheus/v9.12.0-beta.1 extra/rediscensus/v9.12.0-beta.1 v9.12.0-beta.1 extra/redisotel/v9.12.0-beta.1 2025-08-04 15:00:37 +03:00
ofekshenawa
f93bfa1f36 feat(search): Add Query Builder for RediSearch commands (#3436)
* Add search module builders and tests (#1)

* Add search module builders and tests

* Add tests

* Use builders and Actions in more clean way

* Update search_builders.go

Co-authored-by: Nedyalko Dyakov <1547186+ndyakov@users.noreply.github.com>

* Update search_builders.go

Co-authored-by: Nedyalko Dyakov <1547186+ndyakov@users.noreply.github.com>

* Apply suggestions from code review

Co-authored-by: Nedyalko Dyakov <1547186+ndyakov@users.noreply.github.com>

---------

Co-authored-by: Nedyalko Dyakov <1547186+ndyakov@users.noreply.github.com>
2025-08-04 14:15:44 +03:00
andy-stark-redis
421c8a48b4 chore(doc): DOC-5472 time series doc examples (#3443)
* DOC-5472 added and fixed tests up to

* DOC-5472 added agg bucket examples

* DOC-5472 time series doc examples

* DOC-5472 removed black lines above error checks, following feedback

* DOC-5472 fixed param formatting, following feedback

---------

Co-authored-by: Nedyalko Dyakov <1547186+ndyakov@users.noreply.github.com>
2025-08-04 14:08:10 +03:00
ofekshenawa
2ff9249846 chore(tests): Add VAMANA compression algorithm tests (#3461) 2025-08-04 14:07:15 +03:00
ofekshenawa
1eed165f9d feat(proto): add configurable buffer sizes for Redis connections (#3453)
* add configurable buffer sizes for Redis connections

* add MiB to wordlist

* Add description for buffer size parameter
2025-08-04 09:16:54 +03:00
Elena Kolevska
c1f6a04d7c Improve stale issue workflow (#3458)
* updated stale issue policy

Signed-off-by: Elena Kolevska <elena@kolevska.com>

* Adds a temporary dry run

Signed-off-by: Elena Kolevska <elena@kolevska.com>

---------

Signed-off-by: Elena Kolevska <elena@kolevska.com>
2025-08-04 09:15:34 +03:00
ofekshenawa
3c85d090fe feat(search): Add VAMANA vector type to RediSearch (#3449)
* Add VAMANA vector type to redisearch

* Change to svs-vamana vector type && remove panics from search module

* fix tests

* fix tests

* fix tests
2025-08-01 15:41:40 +03:00
Nedyalko Dyakov
9177a76d33 chore(ci): Add 8.2 rc2 pre build for CI (#3459)
* chore(ci): Add 8.2 rc2 pre build for CI

* Updated gh username

---------

Co-authored-by: Hristo Temelski <hristo.temelski@redis.com>
2025-08-01 10:19:40 +03:00
Nedyalko Dyakov
9cfefa6896 fix(search): return results even if doc is empty (#3457)
* fix(search): return results even if doc is empty

"If a relevant key expires while a query is running, an attempt to load
the key's value will return a null array. However, the key is still
counted in the total number of results." - Redis Search return
documentation

* fix(doctest): fix assertions in doctests
2025-07-31 15:21:05 +03:00
cxljs
5aca9c28ac VSIM add EPSILON option (#3454)
Signed-off-by: Xiaolong Chen <fukua95@gmail.com>
2025-07-31 11:45:39 +03:00
Hristo Temelski
bcdb7d1cfa Added new stream commands (#3450)
* added new stream commands

* updated docker image

* fixed command return type

* fixed tests

* addressed PR comments

---------

Co-authored-by: Nedyalko Dyakov <1547186+ndyakov@users.noreply.github.com>
2025-07-31 11:11:15 +03:00
Hristo Temelski
7bc12bb386 chore(ci): bumped redis 8.2 version used in the CI/CD (#3451) 2025-07-30 13:42:18 +03:00
Antonio Mindov
23a87a2137 feat(otel): add closing support to otel metrics instrumentation (#3444)
closes #3424
2025-07-24 12:48:34 +03:00
Julien Riou
162c3fbf47 feat: Add "skip_verify" to Sentinel (#3428)
Same as 3d4310ae but for FailoverOptions.

Signed-off-by: Julien Riou <julien@riou.xyz>
2025-07-22 12:49:22 +03:00
cxljs
90923b3eb1 fix: errors.Join requires Go 1.20 or later (#3442)
Signed-off-by: Xiaolong Chen <fukua95@gmail.com>
2025-07-22 12:45:41 +03:00
andy-stark-redis
9c1655e216 DOC-4344 document quickstart examples (#3426) 2025-07-11 11:32:04 +03:00
Nikita Semenov
7ac4021ae0 fix: Ring.Pipelined return dial timeout error (#3403)
* [ISSUE-3402]: Ring.Pipelined return dial timeout error

* review fixes

---------

Co-authored-by: Nedyalko Dyakov <1547186+ndyakov@users.noreply.github.com>
2025-07-03 10:48:06 +03:00
Hristo Temelski
d924f7ea68 feat(bitop): add support for the new bitop operations (#3409)
* Add support for new bitop operations

* chore(ci): Add 8.2 pre build for CI

* feat(info): add new client info keys

* fixed tests

* added godocs for bitop commands

---------

Co-authored-by: Nedyalko Dyakov <nedyalko.dyakov@gmail.com>
Co-authored-by: Nedyalko Dyakov <1547186+ndyakov@users.noreply.github.com>
2025-07-02 17:19:24 +03:00
Nedyalko Dyakov
0decfdc6ed chore(release): v9.11.0 (#3416)
* chore(release): update version to 9.11.0

* chore(release): Add Release Notes for v9.11.0
extra/rediscensus/v9.11.0 extra/redisprometheus/v9.11.0 extra/rediscmd/v9.11.0 extra/redisotel/v9.11.0 v9.11.0
2025-06-24 14:05:24 +03:00
Pete Woods
4ac591c7c4 Set correct cluster slot for scan commands, similarly to Java's Jedis client (#2623)
- At present, the `scan` command is dispatched to a random slot.
- As far as I can tell, the scanX family of commands are not cluster aware (e.g. don't redirect the client to the correct slot).
- You can see [here](869dc0bb66/src/main/java/redis/clients/jedis/ShardedCommandObjects.java (L101)), the Jedis client calling `processKey` on the match argument, and this is what this PR also does.

We've had this patch running in production, and it seems to work well for us.

For further thought:
- Continuing looking at other Redis clients (e.g. Jedis), they outright [reject as invalid](869dc0bb66/src/main/java/redis/clients/jedis/ShardedCommandObjects.java (L98)) any scan command that does not include a hash-tag. Presumably this has the advantage of users not being surprised when their scan produces no results when a random server is picked.
- Perhaps it would be sensible for go-redis to do the same also?

Co-authored-by: Nedyalko Dyakov <1547186+ndyakov@users.noreply.github.com>
2025-06-24 13:43:03 +03:00
Damian Cherubini
0383d08a35 feat(client): Add CredentialsProvider field to UniversalOptions (#2927)
* Add CredentialsProvider field to universal client

* fix(options): Add credentials providers to universal options and pass to client options

* chore(ring): Add missing fields in building clientOptions

---------

Co-authored-by: ofekshenawa <104765379+ofekshenawa@users.noreply.github.com>
Co-authored-by: Nedyalko Dyakov <nedyalko.dyakov@gmail.com>
Co-authored-by: Nedyalko Dyakov <1547186+ndyakov@users.noreply.github.com>
2025-06-24 13:28:54 +03:00
Warnar Boekkooi
fa475cbc99 feat(redisotel): add WithCallerEnabled option (#3415)
* feat(redisotel): add WithCaller option

Allow the disabling the collection of the `code.function`, `code.filepath` and `code.lineno` tracing attributes.
When setting `WithCaller(false)` overall performance is increased as the "expensive" `runtime.Callers` and `runtime.(*Frames).Next` calls are no longer needed.

* chore(redisotel): improve docblock language

* chore(redisotel): rename `WithCaller` to `WithCallerEnabled`

---------

Co-authored-by: Nedyalko Dyakov <1547186+ndyakov@users.noreply.github.com>
2025-06-24 10:53:35 +03:00
Nedyalko Dyakov
05f42e2327 fix(txpipeline): keyless commands should take the slot of the keyed (#3411)
* fix(txpipeline): keyless commands should take the slot of the keyed commands

* fix(txpipeline): extract only keyed cmds from all cmds

* chore(test): Add tests for keyless cmds and txpipeline

* fix(cmdSlot): Add preferred random slot

* fix(cmdSlot): Add shortlist of keyless cmds

* chore(test): Fix ring test

* fix(keylessCommands): Add list of keyless commands

Add list of keyless Commands based on the Commands output
for redis 8

* chore(txPipeline): refactor slottedCommands impl

* fix(osscluster): typo
2025-06-24 10:34:23 +03:00