Categorygithub.com/redis/go-redis/v9
modulepackage
9.7.0
Repository: https://github.com/redis/go-redis.git
Documentation: pkg.go.dev

# README

Redis client for Go

build workflow PkgGoDev Documentation codecov Chat

go-redis is brought to you by :star: uptrace/uptrace. Uptrace is an open-source APM tool that supports distributed tracing, metrics, and logs. You can use it to monitor applications and set up automatic alerts to receive notifications via email, Slack, Telegram, and others.

See OpenTelemetry example which demonstrates how you can use Uptrace to monitor go-redis.

How do I Redis?

Learn for free at Redis University

Build faster with the Redis Launchpad

Try the Redis Cloud

Dive in developer tutorials

Join the Redis community

Work at Redis

Documentation

Resources

Ecosystem

This client also works with Kvrocks, a distributed key value NoSQL database that uses RocksDB as storage engine and is compatible with Redis protocol.

Features

Installation

go-redis supports 2 last Go versions and requires a Go version with modules support. So make sure to initialize a Go module:

go mod init github.com/my/repo

Then install go-redis/v9:

go get github.com/redis/go-redis/v9

Quickstart

import (
    "context"
    "fmt"

    "github.com/redis/go-redis/v9"
)

var ctx = context.Background()

func ExampleClient() {
    rdb := redis.NewClient(&redis.Options{
        Addr:     "localhost:6379",
        Password: "", // no password set
        DB:       0,  // use default DB
    })

    err := rdb.Set(ctx, "key", "value", 0).Err()
    if err != nil {
        panic(err)
    }

    val, err := rdb.Get(ctx, "key").Result()
    if err != nil {
        panic(err)
    }
    fmt.Println("key", val)

    val2, err := rdb.Get(ctx, "key2").Result()
    if err == redis.Nil {
        fmt.Println("key2 does not exist")
    } else if err != nil {
        panic(err)
    } else {
        fmt.Println("key2", val2)
    }
    // Output: key value
    // key2 does not exist
}

The above can be modified to specify the version of the RESP protocol by adding the protocol option to the Options struct:

    rdb := redis.NewClient(&redis.Options{
        Addr:     "localhost:6379",
        Password: "", // no password set
        DB:       0,  // use default DB
        Protocol: 3, // specify 2 for RESP 2 or 3 for RESP 3
    })

Connecting via a redis url

go-redis also supports connecting via the redis uri specification. The example below demonstrates how the connection can easily be configured using a string, adhering to this specification.

import (
    "github.com/redis/go-redis/v9"
)

func ExampleClient() *redis.Client {
    url := "redis://user:password@localhost:6379/0?protocol=3"
    opts, err := redis.ParseURL(url)
    if err != nil {
        panic(err)
    }

    return redis.NewClient(opts)
}

Advanced Configuration

go-redis supports extending the client identification phase to allow projects to send their own custom client identification.

Default Client Identification

By default, go-redis automatically sends the client library name and version during the connection process. This feature is available in redis-server as of version 7.2. As a result, the command is "fire and forget", meaning it should fail silently, in the case that the redis server does not support this feature.

Disabling Identity Verification

When connection identity verification is not required or needs to be explicitly disabled, a DisableIndentity configuration option exists. In V10 of this library, DisableIndentity will become DisableIdentity in order to fix the associated typo.

To disable verification, set the DisableIndentity option to true in the Redis client options:

rdb := redis.NewClient(&redis.Options{
    Addr:            "localhost:6379",
    Password:        "",
    DB:              0,
    DisableIndentity: true, // Disable set-info on connect
})

Unstable RESP3 Structures for RediSearch Commands

When integrating Redis with application functionalities using RESP3, it's important to note that some response structures aren't final yet. This is especially true for more complex structures like search and query results. We recommend using RESP2 when using the search and query capabilities, but we plan to stabilize the RESP3-based API-s in the coming versions. You can find more guidance in the upcoming release notes.

Contributing

Please see out contributing guidelines to help us improve this library!

Look and feel

Some corner cases:

// SET key value EX 10 NX
set, err := rdb.SetNX(ctx, "key", "value", 10*time.Second).Result()

// SET key value keepttl NX
set, err := rdb.SetNX(ctx, "key", "value", redis.KeepTTL).Result()

// SORT list LIMIT 0 2 ASC
vals, err := rdb.Sort(ctx, "list", &redis.Sort{Offset: 0, Count: 2, Order: "ASC"}).Result()

// ZRANGEBYSCORE zset -inf +inf WITHSCORES LIMIT 0 2
vals, err := rdb.ZRangeByScoreWithScores(ctx, "zset", &redis.ZRangeBy{
    Min: "-inf",
    Max: "+inf",
    Offset: 0,
    Count: 2,
}).Result()

// ZINTERSTORE out 2 zset1 zset2 WEIGHTS 2 3 AGGREGATE SUM
vals, err := rdb.ZInterStore(ctx, "out", &redis.ZStore{
    Keys: []string{"zset1", "zset2"},
    Weights: []int64{2, 3}
}).Result()

// EVAL "return {KEYS[1],ARGV[1]}" 1 "key" "hello"
vals, err := rdb.Eval(ctx, "return {KEYS[1],ARGV[1]}", []string{"key"}, "hello").Result()

// custom command
res, err := rdb.Do(ctx, "set", "key", "value").Result()

Run the test

go-redis will start a redis-server and run the test cases.

The paths of redis-server bin file and redis config file are defined in main_test.go:

var (
	redisServerBin, _  = filepath.Abs(filepath.Join("testdata", "redis", "src", "redis-server"))
	redisServerConf, _ = filepath.Abs(filepath.Join("testdata", "redis", "redis.conf"))
)

For local testing, you can change the variables to refer to your local files, or create a soft link to the corresponding folder for redis-server and copy the config file to testdata/redis/:

ln -s /usr/bin/redis-server ./go-redis/testdata/redis/src
cp ./go-redis/testdata/redis.conf ./go-redis/testdata/redis/

Lastly, run:

go test

Another option is to run your specific tests with an already running redis. The example below, tests against a redis running on port 9999.:

REDIS_PORT=9999 go test <your options>

See also

Contributors

Thanks to all the people who already contributed!

# Packages

No description provided by the author

# Functions

No description provided by the author
No description provided by the author
HasErrorPrefix checks if the err is a Redis error and the message contains a prefix.
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
NewBoolResult returns a BoolCmd initialised with val and err for testing.
No description provided by the author
NewBoolSliceResult returns a BoolSliceCmd initialised with val and err for testing.
No description provided by the author
NewClient returns a client to the Redis Server specified by Options.
No description provided by the author
NewClusterClient returns a Redis Cluster client as described in http://redis.io/topics/cluster-spec.
No description provided by the author
No description provided by the author
No description provided by the author
NewClusterSlotsCmdResult returns a ClusterSlotsCmd initialised with val and err for testing.
No description provided by the author
NewCmdResult returns a Cmd initialised with val and err for testing.
No description provided by the author
No description provided by the author
NewCommandsInfoCmdResult returns a CommandsInfoCmd initialised with val and err for testing.
NewDialer returns a function that will be used as the default dialer when none is specified in Options.Dialer.
No description provided by the author
NewDurationResult returns a DurationCmd initialised with val and err for testing.
NewFailoverClient returns a Redis client that uses Redis Sentinel for automatic failover.
NewFailoverClusterClient returns a client that supports routing read-only commands to a replica node.
No description provided by the author
NewFloatResult returns a FloatCmd initialised with val and err for testing.
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
NewGeoLocationCmdResult returns a GeoLocationCmd initialised with val and err for testing.
No description provided by the author
NewGeoPosCmdResult returns a GeoPosCmd initialised with val and err for testing.
No description provided by the author
No description provided by the author
No description provided by the author
NewIntPointerSliceCmd initialises an IntPointerSliceCmd.
NewIntResult returns an IntCmd initialised with val and err for testing.
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
NewMapStringIntCmdResult returns a MapStringIntCmd initialised with val and err for testing.
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
NewMapStringStringResult returns a MapStringStringCmd initialised with val and err for testing.
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
NewScanCmdResult returns a ScanCmd initialised with val and err for testing.
No description provided by the author
No description provided by the author
No description provided by the author
NewSliceResult returns a SliceCmd initialised with val and err for testing.
No description provided by the author
No description provided by the author
NewStatusResult returns a StatusCmd initialised with val and err for testing.
No description provided by the author
NewStringResult returns a StringCmd initialised with val and err for testing.
No description provided by the author
NewStringSliceResult returns a StringSliceCmd initialised with val and err for testing.
No description provided by the author
No description provided by the author
No description provided by the author
NewTimeCmdResult returns a TimeCmd initialised with val and err for testing.
No description provided by the author
NewUniversalClient returns a new multi client.
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
NewXMessageSliceCmdResult returns a XMessageSliceCmd initialised with val and err for testing.
No description provided by the author
No description provided by the author
NewXPendingResult returns a XPendingCmd initialised with val and err for testing.
No description provided by the author
NewXStreamSliceCmdResult returns a XStreamSliceCmd initialised with val and err for testing.
No description provided by the author
NewZSliceCmdResult returns a ZSliceCmd initialised with val and err for testing.
No description provided by the author
No description provided by the author
NewZWithKeyCmdResult returns a ZWithKeyCmd initialised with val and err for testing.
ParseClusterURL parses a URL into ClusterOptions that can be used to connect to Redis.
ParseURL parses a URL into Options that can be used to connect to Redis.
No description provided by the author
SetLogger set custom log.
Version is the current release version.
WithChannelHealthCheckInterval specifies the health check interval.
WithChannelSendTimeout specifies the channel send timeout after which the message is dropped.
WithChannelSize specifies the Go chan size that is used to buffer incoming messages.
WithLibraryName returns a valid LibraryInfo with library name only.
WithLibraryVersion returns a valid LibraryInfo with library version only.

# Constants

No description provided by the author
No description provided by the author
No description provided by the author
Client used by RM_Call is allowed to fully execute scripts even when in OOM */.
Client issued the ASKING command */.
The client is waiting in a blocking operation */.
Close after executing commands * and writing entire reply.
Close after writing entire reply.
Close this client ASAP */.
Indicate that the client should not be blocked.
Watched keys modified.
EXEC will fail for errors while queueing */.
Indicates that the client is currently in the process of handling a command.
Force AOF propagation of current cmd.
Force replication of current cmd.
This client is in the timeout table.
Run EVAL in debug mode.
EVAL debugging without fork() */.
This client is a master */.
Queue replies even if is master */.
Non connected client used by some module.
This client is a slave monitor, see MONITOR */.
This client is in a MULTI context */.
This client is protected against client memory eviction.
This client will not touch LFU/LRU stats.
Indicates the client has a fully * parsed command ready for execution.
Client has output to send but a-write handler is yet not installed.
Instance don't understand PSYNC.
Don't propagate to AOF.
No description provided by the author
Don't propagate to slaves.
Client should not be freed for now.
Protocol error chatting with it.
Client is in Pub/Sub mode.
This client is pushing notifications.
Cluster client is in read-only state.
This client is a replica that only wants RDB without replication buffer.
Don't send replies to client.
Don't send just this reply.
Set ClientREPLY_SKIP for next cmd */.
This is a non-connected client used by Lua */.
This client is a replica */.
Client enabled keys tracking in order to perform client side caching.
Tracking in BCAST mode.
Target client is invalid.
CACHING yes/no was given, depending on optin/optout mode.
Don't send invalidation messages about writes performed by myself.*/.
Tracking in opt-in mode.
Tracking in opt-out mode.
This client was unblocked and is stored in server.unblocked_clients */.
Client connected via Unix domain socket */.
No description provided by the author
No description provided by the author
No description provided by the author
KeepTTL is a Redis KEEPTTL option to keep existing TTL, it requires your redis-server version >= 6.0, otherwise you will receive an error: (error) ERR syntax error.
No description provided by the author
No description provided by the author
No description provided by the author
Nil reply returned by Redis when key does not exist.
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
TxFailedErr transaction redis failed.
No description provided by the author
No description provided by the author

# Variables

ErrClosed performs any operation on the closed client will return this error.

# Structs

No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
Client is a Redis client representing a pool of zero or more underlying connections.
ClientInfo is redis-server ClientInfo, not go-redis *Client.
No description provided by the author
ClusterClient is a Redis Cluster client representing a pool of zero or more underlying connections.
No description provided by the author
No description provided by the author
No description provided by the author
ClusterOptions are used to configure a cluster client and should be passed to NewClusterClient.
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
Conn represents a single Redis connection rather than a pool of connections.
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
FailoverOptions are used to configure a failover client and should be passed to NewFailoverClient.
No description provided by the author
No description provided by the author
FilterBy is used for the `CommandList` command parameter.
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
Each AggregateReducer have different args.
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
FunctionListQuery is used with FunctionList to query for Redis libraries LibraryNamePattern - Use an empty string to get all libraries.
FunctionStats contains information about the scripts currently executing on the server, and the available engines - Engines: Statistics about the engine like number of functions and number of libraries - RunningScript: The script currently running on the shard we're connecting to.
No description provided by the author
No description provided by the author
GeoLocation is used with GeoAdd to add geospatial location.
No description provided by the author
No description provided by the author
No description provided by the author
GeoRadiusQuery is used with GeoRadius to query geospatial index.
No description provided by the author
No description provided by the author
GeoSearchQuery is used for GEOSearch/GEOSearchStore command query.
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
LCSMatch is the result set of the LCS command.
No description provided by the author
No description provided by the author
LCSQuery is a parameter used for the LCS command.
No description provided by the author
LibraryInfo holds the library info.
No description provided by the author
----------------------------------------------------------------------- MapStringInterfaceCmd represents a command that returns a map of strings to interface{}.
No description provided by the author
No description provided by the author
No description provided by the author
------------------------------------------------------------------------------.
No description provided by the author
No description provided by the author
Message received as result of a PUBLISH command issued by another client.
ModuleLoadexConfig struct is used to specify the arguments for the MODULE LOADEX command of redis.
No description provided by the author
No description provided by the author
Options keeps the settings to set up redis connection.
Pipeline implements pipelining as described in http://redis.io/topics/pipelining.
Pong received as result of a PING command issued by another client.
PubSub implements Pub/Sub commands as described in http://redis.io/topics/pubsub.
No description provided by the author
No description provided by the author
Ring is a Redis client that uses consistent hashing to distribute keys across multiple Redis servers (shards).
RingOptions are used to configure a ring client and should be passed to NewRing.
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
ScanIterator is used to incrementally iterate over a collection of elements.
No description provided by the author
SentinelClient is a client for a Redis Sentinel.
SetArgs provides arguments for the SetArgs function.
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
Subscription received after a successful subscription to channel.
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
Tx implements Redis transactions as described in http://redis.io/topics/transactions.
UniversalOptions information is required by UniversalClient to establish connections.
XAddArgs accepts values in the following formats: - XAddArgs.Values = []interface{}{"key1", "value1", "key2", "value2"} - XAddArgs.Values = []string("key1", "value1", "key2", "value2") - XAddArgs.Values = map[string]interface{}{"key1": "value1", "key2": "value2"} Note that map will not preserve the order of key-value pairs.
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
Z represents sorted set member.
ZAddArgs WARN: The GT, LT and NX options are mutually exclusive.
ZRangeArgs is all the options of the ZRange command.
No description provided by the author
No description provided by the author
No description provided by the author
ZStore is used as an arg to ZInter/ZInterStore and ZUnion/ZUnionStore.
ZWithKey represents sorted set member including the name of the key where it was popped.
No description provided by the author

# Interfaces

No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
Limiter is the interface of a rate limiter or a circuit breaker.
No description provided by the author
Pipeliner is an mechanism to realise Redis Pipeline technique.
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
UniversalClient is an abstract client which - based on the provided options - represents either a ClusterClient, a FailoverClient, or a single-node Client.

# Type aliases

No description provided by the author
No description provided by the author
No description provided by the author
ClientFlags is redis-server client flags, copy from redis/src/server.h (redis 7.0).
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
Scanner internal/hscan.Scanner exposed interface.
No description provided by the author
No description provided by the author
No description provided by the author