modulepackage
8.0.0-beta.13
Repository: https://github.com/devinsburke/redis.git
Documentation: pkg.go.dev
# README
Redis client for Golang
- Discussions.
- Newsletter to get latest updates.
- Documentation
- Reference
- Examples
- RealWorld example app
Other projects you may like:
- Bun - fast and simple SQL client for PostgreSQL, MySQL, and SQLite.
- BunRouter - fast and flexible HTTP router for Go.
Ecosystem
Features
- Redis 3 commands except QUIT, MONITOR, and SYNC.
- Automatic connection pooling with circuit breaker support.
- Pub/Sub.
- Transactions.
- Pipeline and TxPipeline.
- Scripting.
- Timeouts.
- Redis Sentinel.
- Redis Cluster.
- Cluster of Redis Servers without using cluster mode and Redis Sentinel.
- Ring.
- Instrumentation.
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
And then install go-redis/v8 (note v8 in the import; omitting it is a popular mistake):
go get github.com/devinsburke/redis/v8
Quickstart
import (
"context"
"github.com/devinsburke/redis/v8"
)
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
}
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
Contributors
Thanks to all the people who already contributed!
# Functions
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.
NewClient returns a client to the Redis Server specified by Options.
NewClusterClient returns a Redis Cluster client as described in http://redis.io/topics/cluster-spec.
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
NewCommandsInfoCmdResult returns a CommandsInfoCmd initialised with val and err for testing.
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 slave 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
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
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
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
No description provided by the author
NewStringIntMapCmdResult returns a StringIntMapCmd initialised with val and err for testing.
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
NewStringStringMapResult returns a StringStringMapCmd initialised with val and err for testing.
No description provided by the author
No description provided by the author
NewTimeCmdResult returns a TimeCmd initialised with val and err for testing.
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
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
NewZWithKeyCmdResult returns a NewZWithKeyCmd initialised with val and err for testing.
ParseURL parses an URL into Options that can be used to connect to Redis.
No description provided by the author
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.
# Constants
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.
Nil reply returned by Redis when key does not exist.
TxFailedErr transaction redis failed.
# 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
Client is a Redis client representing a pool of zero or more underlying connections.
ClusterClient is a Redis Cluster client representing a pool of zero or more underlying connections.
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
Conn represents a single Redis connection rather than a pool of connections.
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
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
Message received as result of a PUBLISH command issued by another client.
Options keeps the settings to setup 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
ScanIterator is used to incrementally iterate over a collection of elements.
No description provided by the author
SearchIndexField is used by FtCreate to specify the schema, or collection of fields that make up a Redisearch index.
SearchIndexOptions is used by FtCreate to clarify the optional arguments in a Redisearch index creation.
SearchQueryOptions is used by FtSearch and QueryDocSliceCmd to provide optional configuration to a Redisearch query.
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
Subscription received after a successful subscription to channel.
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
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
Limiter is the interface of a rate limiter or a circuit breaker.
Pipeliner is an mechanism to realise Redis Pipeline technique.
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.