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

2935 Commits

Author SHA1 Message Date
Nic Gibson
db309cfe60 Ensure that JSON.GET returns Nil response
Updated JSONCmd.readReply to return redis.Nil if no results.
Added a doc line for Val() and Expanded() methods of JSONCmd.
Added a test case for non existent keys in json_test.go.

Original-PR: #2987
2025-08-11 01:54:01 +03:00
ofekshenawa
c59205965c fix conflicts 2025-08-11 01:43:46 +03:00
Nedyalko Dyakov
990de395bd chore(release): 9.12.0 / redis 8.2 (#3464) 2025-08-11 01:42:56 +03:00
Monkey
51f6fcce85 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-11 01:42:56 +03:00
Cattī Crūdēlēs
ef444ea224 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-11 01:42:56 +03:00
Mykhailo Alipa
1aa1d845ef 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-11 01:42:56 +03:00
Elena Kolevska
d0717e5b84 chore(github): merges into one job with two steps (#3463)
Signed-off-by: Elena Kolevska <elena@kolevska.com>
2025-08-11 01:42:56 +03:00
cxljs
bbadd655ed 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-11 01:42:56 +03:00
Nedyalko Dyakov
6f1aac4aa3 chore(release): 9.12.0-beta.1 (#3460) 2025-08-11 01:42:56 +03:00
ofekshenawa
c6868653d3 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-11 01:42:56 +03:00
andy-stark-redis
5548714b6c 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-11 01:42:56 +03:00
ofekshenawa
c56822517a chore(tests): Add VAMANA compression algorithm tests (#3461) 2025-08-11 01:42:56 +03:00
ofekshenawa
44c8070736 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-11 01:42:56 +03:00
Elena Kolevska
bd8e9b53d5 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-11 01:42:56 +03:00
ofekshenawa
cb484509d6 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-11 01:42:56 +03:00
Nedyalko Dyakov
3029f7c051 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-11 01:42:56 +03:00
Nedyalko Dyakov
193d5a0b03 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-08-11 01:42:56 +03:00
cxljs
74a798736f VSIM add EPSILON option (#3454)
Signed-off-by: Xiaolong Chen <fukua95@gmail.com>
2025-08-11 01:42:56 +03:00
Hristo Temelski
e6ea0056fe 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-08-11 01:42:55 +03:00
Hristo Temelski
2067991a47 chore(ci): bumped redis 8.2 version used in the CI/CD (#3451) 2025-08-11 01:42:55 +03:00
Antonio Mindov
5c8d669bfd feat(otel): add closing support to otel metrics instrumentation (#3444)
closes #3424
2025-08-11 01:42:55 +03:00
Julien Riou
f2d03dc581 feat: Add "skip_verify" to Sentinel (#3428)
Same as 3d4310ae but for FailoverOptions.

Signed-off-by: Julien Riou <julien@riou.xyz>
2025-08-11 01:42:55 +03:00
cxljs
0d08e27a68 fix: errors.Join requires Go 1.20 or later (#3442)
Signed-off-by: Xiaolong Chen <fukua95@gmail.com>
2025-08-11 01:42:55 +03:00
andy-stark-redis
7a03eb5bdd DOC-4344 document quickstart examples (#3426) 2025-08-11 01:42:55 +03:00
Nikita Semenov
705750e8da 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-08-11 01:42:55 +03:00
Hristo Temelski
c2e2126966 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-08-11 01:42:55 +03:00
Nedyalko Dyakov
a0e91bcaf1 chore(release): v9.11.0 (#3416)
* chore(release): update version to 9.11.0

* chore(release): Add Release Notes for v9.11.0
2025-08-11 01:42:55 +03:00
Pete Woods
8bb52c3501 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-08-11 01:42:55 +03:00
Damian Cherubini
4ff1bbea1f 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-08-11 01:42:55 +03:00
Warnar Boekkooi
ad69df05f6 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-08-11 01:42:55 +03:00
Nedyalko Dyakov
d2bd31ce8a 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-08-11 01:42:55 +03:00
andy-stark-redis
1e38046c7c DOC-5229 probabilistic data type examples (#3413)
* DOC-5078 added basic vector set examples

* DOC-5078 formatting and extra comments

* DOC-5078 fixed nondeterministic test

* wip(tests): run doctests for vector sets on redis 8 only

* DOC-5229 added probabilistic data type examples

---------

Co-authored-by: Nedyalko Dyakov <nedyalko.dyakov@gmail.com>
2025-08-11 01:42:55 +03:00
dependabot[bot]
ff78daa42e chore(deps): bump rojopolis/spellcheck-github-actions (#3414)
Bumps [rojopolis/spellcheck-github-actions](https://github.com/rojopolis/spellcheck-github-actions) from 0.49.0 to 0.51.0.
- [Release notes](https://github.com/rojopolis/spellcheck-github-actions/releases)
- [Changelog](https://github.com/rojopolis/spellcheck-github-actions/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rojopolis/spellcheck-github-actions/compare/0.49.0...0.51.0)

---
updated-dependencies:
- dependency-name: rojopolis/spellcheck-github-actions
  dependency-version: 0.51.0
  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>
2025-08-11 01:42:55 +03:00
WeizhongTu
4de2ffe46b feat: optimize connection pool waitTurn (#3412) 2025-08-11 01:42:55 +03:00
Nedyalko Dyakov
61200f7c6b [CAE-1046] fix(loading): cache the loaded flag for slave nodes (#3410)
* fix(loading): cache the loaded flag for slave nodes

* fix(lint): make linter happy
2025-08-11 01:42:55 +03:00
Nedyalko Dyakov
8319098e54 fix(txpipeline): should return error on multi/exec on multiple slots [CAE-1028] (#3408)
* fix(txpipeline): should return error on multi/exec on multiple slots

* fix(txpipeline): test normal tx pipeline behaviour

* chore(err): Extract crossslot err and add test

* fix(txpipeline): short curcuit the tx if there are no commands

* chore(tests): validate keys are in different slots
2025-08-11 01:42:55 +03:00
Nedyalko Dyakov
82751d637d chore(ci): update CI redis builds (#3407) 2025-08-11 01:42:55 +03:00
cxljs
5920b3be74 chore: remove a redundant method (#3401)
Signed-off-by: fukua95 <fukua95@gmail.com>
Co-authored-by: Nedyalko Dyakov <1547186+ndyakov@users.noreply.github.com>
2025-08-11 01:42:55 +03:00
Amir Salehi
d9a11ab04e test: refactor TestBasicCredentials using table-driven tests (#3406)
* test: refactor TestBasicCredentials using table-driven tests

* Included additional edge cases:

- Empty passwords
- Special characters
- Long strings
- Unicode characters
2025-08-11 01:42:55 +03:00
fukua95
9310da80e9 perf: reduce unnecessary memory allocation (#3399)
Signed-off-by: fukua95 <fukua95@gmail.com>
Co-authored-by: Nedyalko Dyakov <1547186+ndyakov@users.noreply.github.com>
2025-08-11 01:42:55 +03:00
fukua95
3c005629c0 fix: check if the shard exists to avoid returning nil (#3396)
Signed-off-by: fukua95 <fukua95@gmail.com>
2025-08-11 01:42:55 +03:00
fukua95
d591c39a54 fix: insert entry during iterating over a map (#3398)
Signed-off-by: fukua95 <fukua95@gmail.com>
2025-08-11 01:42:55 +03:00
Nedyalko Dyakov
c37906c896 chore(release): Update release notes and versions for v9.10.0 (#3395) 2025-08-11 01:42:55 +03:00
andy-stark-redis
d5afd749a3 DOC-5078 vector set examples (#3394) 2025-08-11 01:42:55 +03:00
fukua95
bd9ec100ef feat: support vectorset (#3375)
* feat: support vectorset

* fix: char encoding error

* use `any` instread of `interface{}`

* update vectorset API

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

* refact: MapStringFloat64Cmd -> VectorInfoSliceCmd

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

* update:

* the type of vector attribute: string -> VectorAttributeMarshaller
* Add a new API VRemAttr
* mark the APIs are experimental

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

* trigger CI again

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

* rename a API: VRemAttr -> VClearAttributes

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

* add test

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

* feat(vectorset): improve VSetAttr API and add comprehensive test suite

- Simplify VSetAttr to accept interface{} with automatic JSON marshalling
- Remove VectorAttributeMarshaller interface for simpler API
- Add comprehensive unit tests for all vectorset commands

---------

Signed-off-by: fukua95 <fukua95@gmail.com>
Co-authored-by: Nedyalko Dyakov <nedyalko.dyakov@gmail.com>
2025-08-11 01:42:55 +03:00
Nicholas Page
8b8ff5a9f1 chore(tests): add the missing NewFloatSliceResult for testing (#3393) 2025-08-11 01:42:55 +03:00
Nedyalko Dyakov
4612195302 Update RELEASE-NOTES.md (#3391) 2025-08-11 01:42:55 +03:00
Nedyalko Dyakov
ebc18f0972 release(go-redis): v9.9.0 (#3390)
* release(go-redis): v9.9.0

- Add release notes
- Update dependencies and version.go

* chore(release-notes) Update release notes
2025-08-11 01:42:55 +03:00
Yi Deng
b50d0ad810 feat(ring): add GetShardClients and GetShardClientForKey methods to Ring for shard access (#3388)
* feat: expose shard information in redis.Ring

- Add GetShards() method to retrieve a list of active shard clients.
- Add GetShardByKey(key string) method to get the shard client for a specific key.
- These methods enable users to manage Pub/Sub operations more effectively by accessing shard-specific clients.

* rename GetShardClients and GetShardClientForKey

---------

Co-authored-by: DengY11 <212294929@qq.com>
Co-authored-by: Nedyalko Dyakov <1547186+ndyakov@users.noreply.github.com>
2025-08-11 01:42:55 +03:00
Nedyalko Dyakov
1e895f6fbe feat: Introducing StreamingCredentialsProvider for token based authentication (#3320)
* wip

* update documentation

* add streamingcredentialsprovider in options

* fix: put back option in pool creation

* add package level comment

* Initial re authentication implementation

Introduces the StreamingCredentialsProvider as the CredentialsProvider
with the highest priority.

TODO: needs to be tested

* Change function type name

Change CancelProviderFunc to UnsubscribeFunc

* add tests

* fix race in tests

* fix example tests

* wip, hooks refactor

* fix build

* update README.md

* update wordlist

* update README.md

* refactor(auth): early returns in cred listener

* fix(doctest): simulate some delay

* feat(conn): add close hook on conn

* fix(tests): simulate start/stop in mock credentials provider

* fix(auth): don't double close the conn

* docs(README): mark streaming credentials provider as experimental

* fix(auth): streamline auth err proccess

* fix(auth): check err on close conn

* chore(entraid): use the repo under redis org
2025-08-11 01:42:55 +03:00