miniredis: github.com/alicebob/miniredis Index | Examples | Files | Directories

package miniredis

import "github.com/alicebob/miniredis"

Package miniredis is a pure Go Redis test server, for use in Go unittests. There are no dependencies on system binaries, and every server you start will be empty.

Start a server with `s, err := miniredis.Run()`. Stop it with `defer s.Close()`.

Point your Redis client to `s.Addr()` or `s.Host(), s.Port()`.

Set keys directly via s.Set(...) and similar commands, or use a Redis client.

For direct use you can select a Redis database with either `s.Select(12); s.Get("foo")` or `s.DB(12).Get("foo")`.

Code:

s, err := miniredis.Run()
if err != nil {
    panic(err)
}
defer s.Close()

// Configure you application to connect to redis at s.Addr()
// Any redis client should work, as long as you use redis commands which
// miniredis implements.
c, err := redis.Dial("tcp", s.Addr())
if err != nil {
    panic(err)
}
if _, err = c.Do("SET", "foo", "bar"); err != nil {
    panic(err)
}

// You can ask miniredis about keys directly, without going over the network.
if got, err := s.Get("foo"); err != nil || got != "bar" {
    panic("Didn't get 'bar' back")
}
// Or with a DB id
if _, err := s.DB(42).Get("foo"); err != miniredis.ErrKeyNotFound {
    panic("didn't use a different database")
}

// Test key with expiration
s.SetTTL("foo", 60*time.Second)
s.FastForward(60 * time.Second)
if s.Exists("foo") {
    panic("expect key to be expired")
}

// Or use a Check* function which Fail()s if the key is not what we expect
// (checks for existence, key type and the value)
// s.CheckGet(t, "foo", "bar")

// Check if there really was only one connection.
if s.TotalConnectionCount() != 1 {
    panic("too many connections made")
}

Index

Examples

Package Files

check.go cmd_cluster.go cmd_command.go cmd_connection.go cmd_generic.go cmd_geo.go cmd_hash.go cmd_list.go cmd_pubsub.go cmd_scripting.go cmd_server.go cmd_set.go cmd_sorted_set.go cmd_stream.go cmd_string.go cmd_transactions.go db.go direct.go geo.go keys.go lua.go miniredis.go pubsub.go redis.go sorted_set.go stream.go

Variables

var (
    // ErrKeyNotFound is returned when a key doesn't exist.
    ErrKeyNotFound = errors.New(msgKeyNotFound)

    // ErrWrongType when a key is not the right type.
    ErrWrongType = errors.New(msgWrongType)

    // ErrIntValueError can returned by INCRBY
    ErrIntValueError = errors.New(msgInvalidInt)

    // ErrFloatValueError can returned by INCRBYFLOAT
    ErrFloatValueError = errors.New(msgInvalidFloat)
)

type Miniredis Uses

type Miniredis struct {
    sync.Mutex

    Ctx       context.Context
    CtxCancel context.CancelFunc
    // contains filtered or unexported fields
}

Miniredis is a Redis server implementation.

func NewMiniRedis Uses

func NewMiniRedis() *Miniredis

NewMiniRedis makes a new, non-started, Miniredis object.

func Run Uses

func Run() (*Miniredis, error)

Run creates and Start()s a Miniredis.

func (*Miniredis) Addr Uses

func (m *Miniredis) Addr() string

Addr returns '127.0.0.1:12345'. Can be given to a Dial(). See also Host() and Port(), which return the same things.

func (*Miniredis) CheckGet Uses

func (m *Miniredis) CheckGet(t T, key, expected string)

CheckGet does not call Errorf() iff there is a string key with the expected value. Normal use case is `m.CheckGet(t, "username", "theking")`.

func (*Miniredis) CheckList Uses

func (m *Miniredis) CheckList(t T, key string, expected ...string)

CheckList does not call Errorf() iff there is a list key with the expected values. Normal use case is `m.CheckGet(t, "favorite_colors", "red", "green", "infrared")`.

func (*Miniredis) CheckSet Uses

func (m *Miniredis) CheckSet(t T, key string, expected ...string)

CheckSet does not call Errorf() iff there is a set key with the expected values. Normal use case is `m.CheckSet(t, "visited", "Rome", "Stockholm", "Dublin")`.

func (*Miniredis) Close Uses

func (m *Miniredis) Close()

Close shuts down a Miniredis.

func (*Miniredis) CommandCount Uses

func (m *Miniredis) CommandCount() int

CommandCount returns the number of processed commands.

func (*Miniredis) CurrentConnectionCount Uses

func (m *Miniredis) CurrentConnectionCount() int

CurrentConnectionCount returns the number of currently connected clients.

func (*Miniredis) DB Uses

func (m *Miniredis) DB(i int) *RedisDB

DB returns a DB by ID.

func (*Miniredis) Del Uses

func (m *Miniredis) Del(k string) bool

Del deletes a key and any expiration value. Returns whether there was a key.

func (*Miniredis) Dump Uses

func (m *Miniredis) Dump() string

Dump returns a text version of the selected DB, usable for debugging.

func (*Miniredis) Exists Uses

func (m *Miniredis) Exists(k string) bool

Exists tells whether a key exists.

func (*Miniredis) FastForward Uses

func (m *Miniredis) FastForward(duration time.Duration)

FastForward decreases all TTLs by the given duration. All TTLs <= 0 will be expired.

func (*Miniredis) FlushAll Uses

func (m *Miniredis) FlushAll()

FlushAll removes all keys from all databases.

func (*Miniredis) FlushDB Uses

func (m *Miniredis) FlushDB()

FlushDB removes all keys from the selected database.

func (*Miniredis) Get Uses

func (m *Miniredis) Get(k string) (string, error)

Get returns string keys added with SET.

func (*Miniredis) HDel Uses

func (m *Miniredis) HDel(k, f string)

HDel deletes a hash key.

func (*Miniredis) HGet Uses

func (m *Miniredis) HGet(k, f string) string

HGet returns hash keys added with HSET. This will return an empty string if the key is not set. Redis would return a nil. Returns empty string when the key is of a different type.

func (*Miniredis) HIncr Uses

func (m *Miniredis) HIncr(k, f string, delta int) (int, error)

HIncr increases a key/field by delta (int).

func (*Miniredis) HIncrBy Uses

func (m *Miniredis) HIncrBy(k, f string, delta int) (int, error)

HIncrBy increases the integer value of a hash field by delta (int).

func (*Miniredis) HIncrByFloat Uses

func (m *Miniredis) HIncrByFloat(k, f string, delta float64) (float64, error)

HIncrByFloat increases a key/field by delta (float).

func (*Miniredis) HIncrfloat Uses

func (m *Miniredis) HIncrfloat(k, f string, delta float64) (float64, error)

HIncrfloat increases a key/field by delta (float).

func (*Miniredis) HKeys Uses

func (m *Miniredis) HKeys(k string) ([]string, error)

HKeys returns all (sorted) keys ('fields') for a hash key.

func (*Miniredis) HSet Uses

func (m *Miniredis) HSet(k string, fv ...string)

HSet sets hash keys. If there is another key by the same name it will be gone.

func (*Miniredis) Host Uses

func (m *Miniredis) Host() string

Host returns the host part of Addr().

func (*Miniredis) Incr Uses

func (m *Miniredis) Incr(k string, delta int) (int, error)

Incr changes a int string value by delta.

func (*Miniredis) IncrByFloat Uses

func (m *Miniredis) IncrByFloat(k string, delta float64) (float64, error)

IncrByFloat increments the float value of a key by the given delta. is an alias for Miniredis.Incrfloat

func (*Miniredis) Incrfloat Uses

func (m *Miniredis) Incrfloat(k string, delta float64) (float64, error)

Incrfloat changes a float string value by delta.

func (*Miniredis) IsMember Uses

func (m *Miniredis) IsMember(k, v string) (bool, error)

IsMember tells if value is in the set.

func (*Miniredis) Keys Uses

func (m *Miniredis) Keys() []string

Keys returns all keys from the selected database, sorted.

func (*Miniredis) List Uses

func (m *Miniredis) List(k string) ([]string, error)

List returns the list k, or an error if it's not there or something else. This is the same as the Redis command `LRANGE 0 -1`, but you can do your own range-ing.

func (*Miniredis) Lpop Uses

func (m *Miniredis) Lpop(k string) (string, error)

Lpop removes and returns the last element in a list.

func (*Miniredis) Lpush Uses

func (m *Miniredis) Lpush(k, v string) (int, error)

Lpush prepends one value to a list. Returns the new length.

func (*Miniredis) Members Uses

func (m *Miniredis) Members(k string) ([]string, error)

Members returns all keys in a set, sorted.

func (*Miniredis) NewSubscriber Uses

func (m *Miniredis) NewSubscriber() *Subscriber

Start a new pubsub subscriber. It can (un) subscribe to channels and patterns, and has a channel to get published messages. Close it with Close(). Does not close itself when there are no subscriptions left.

func (*Miniredis) Pop Uses

func (m *Miniredis) Pop(k string) (string, error)

Pop removes and returns the last element. Is called RPOP in Redis.

func (*Miniredis) Port Uses

func (m *Miniredis) Port() string

Port returns the (random) port part of Addr().

func (*Miniredis) PubSubChannels Uses

func (m *Miniredis) PubSubChannels(pattern string) []string

PubSubChannels is "PUBSUB CHANNELS <pattern>". An empty pattern is fine (meaning all channels). Returned channels will be ordered alphabetically.

func (*Miniredis) PubSubNumPat Uses

func (m *Miniredis) PubSubNumPat() int

PubSubNumPat is "PUBSUB NUMPAT"

func (*Miniredis) PubSubNumSub Uses

func (m *Miniredis) PubSubNumSub(channels ...string) map[string]int

PubSubNumSub is "PUBSUB NUMSUB [channels]". It returns all channels with their subscriber count.

func (*Miniredis) Publish Uses

func (m *Miniredis) Publish(channel, message string) int

Publish a message to subscribers. Returns the number of receivers.

func (*Miniredis) Push Uses

func (m *Miniredis) Push(k string, v ...string) (int, error)

Push add element at the end. Returns the new length.

func (*Miniredis) RPop Uses

func (m *Miniredis) RPop(k string) (string, error)

RPop is an alias for Pop

func (*Miniredis) RPush Uses

func (m *Miniredis) RPush(k string, v ...string) (int, error)

RPush appends one or multiple values to a list. Returns the new length. An alias for Push

func (*Miniredis) RequireAuth Uses

func (m *Miniredis) RequireAuth(pw string)

RequireAuth makes every connection need to AUTH first. Disable again by setting an empty string.

func (*Miniredis) Restart Uses

func (m *Miniredis) Restart() error

Restart restarts a Close()d server on the same port. Values will be preserved.

func (*Miniredis) SAdd Uses

func (m *Miniredis) SAdd(k string, elems ...string) (int, error)

SAdd adds keys to a set. Returns the number of new keys. Alias for SetAdd

func (*Miniredis) SIsMember Uses

func (m *Miniredis) SIsMember(k, v string) (bool, error)

SIsMember tells if value is in the set. Alias for IsMember

func (*Miniredis) SMembers Uses

func (m *Miniredis) SMembers(k string) ([]string, error)

SMembers returns all keys in a set, sorted. Alias for Members.

func (*Miniredis) SRem Uses

func (m *Miniredis) SRem(k string, fields ...string) (int, error)

SRem removes fields from a set. Returns number of deleted fields.

func (*Miniredis) Seed Uses

func (m *Miniredis) Seed(seed int)

func (*Miniredis) Select Uses

func (m *Miniredis) Select(i int)

Select sets the DB id for all direct commands.

func (*Miniredis) Server Uses

func (m *Miniredis) Server() *server.Server

Server returns the underlying server to allow custom commands to be implemented

func (*Miniredis) Set Uses

func (m *Miniredis) Set(k, v string) error

Set sets a string key. Removes expire.

func (*Miniredis) SetAdd Uses

func (m *Miniredis) SetAdd(k string, elems ...string) (int, error)

SetAdd adds keys to a set. Returns the number of new keys.

func (*Miniredis) SetTTL Uses

func (m *Miniredis) SetTTL(k string, ttl time.Duration)

SetTTL sets the TTL of a key.

func (*Miniredis) SetTime Uses

func (m *Miniredis) SetTime(t time.Time)

SetTime sets the time against which EXPIREAT values are compared, and the time used in stream entry IDs. Will use time.Now() if this is not set.

func (*Miniredis) SortedSet Uses

func (m *Miniredis) SortedSet(k string) (map[string]float64, error)

SortedSet returns a raw string->float64 map.

func (*Miniredis) Start Uses

func (m *Miniredis) Start() error

Start starts a server. It listens on a random port on localhost. See also Addr().

func (*Miniredis) StartAddr Uses

func (m *Miniredis) StartAddr(addr string) error

StartAddr runs miniredis with a given addr. Examples: "127.0.0.1:6379", ":6379", or "127.0.0.1:0"

func (*Miniredis) Stream Uses

func (m *Miniredis) Stream(k string) ([]StreamEntry, error)

Stream returns a slice of stream entries. Oldest first.

func (*Miniredis) SwapDB Uses

func (m *Miniredis) SwapDB(i, j int) bool

SwapDB swaps DBs by IDs.

func (*Miniredis) TTL Uses

func (m *Miniredis) TTL(k string) time.Duration

TTL is the left over time to live. As set via EXPIRE, PEXPIRE, EXPIREAT, PEXPIREAT. 0 if not set.

func (*Miniredis) TotalConnectionCount Uses

func (m *Miniredis) TotalConnectionCount() int

TotalConnectionCount returns the number of client connections since server start.

func (*Miniredis) Type Uses

func (m *Miniredis) Type(k string) string

Type gives the type of a key, or ""

func (m *Miniredis) Unlink(k string) bool

Unlink deletes a key and any expiration value. Returns where there was a key. It's exactly the same as Del() and is not async. It is here for the consistency.

func (*Miniredis) XAdd Uses

func (m *Miniredis) XAdd(k string, id string, values []string) (string, error)

XAdd adds an entry to a stream. `id` can be left empty or be '*'. If a value is given normal XADD rules apply. Values should be an even length.

func (*Miniredis) ZAdd Uses

func (m *Miniredis) ZAdd(k string, score float64, member string) (bool, error)

ZAdd adds a score,member to a sorted set.

func (*Miniredis) ZMembers Uses

func (m *Miniredis) ZMembers(k string) ([]string, error)

ZMembers returns all members of a sorted set by score

func (*Miniredis) ZRem Uses

func (m *Miniredis) ZRem(k, member string) (bool, error)

ZRem deletes a member. Returns whether the was a key.

func (*Miniredis) ZScore Uses

func (m *Miniredis) ZScore(k, member string) (float64, error)

ZScore gives the score of a sorted set member.

type PubsubMessage Uses

type PubsubMessage struct {
    Channel string
    Message string
}

PubsubMessage is what gets broadcasted over pubsub channels.

type PubsubPmessage Uses

type PubsubPmessage struct {
    Pattern string
    Channel string
    Message string
}

type RedisDB Uses

type RedisDB struct {
    // contains filtered or unexported fields
}

RedisDB holds a single (numbered) Redis database.

func (*RedisDB) Del Uses

func (db *RedisDB) Del(k string) bool

Del deletes a key and any expiration value. Returns whether there was a key.

func (*RedisDB) Exists Uses

func (db *RedisDB) Exists(k string) bool

Exists tells whether a key exists.

func (*RedisDB) FlushDB Uses

func (db *RedisDB) FlushDB()

FlushDB removes all keys.

func (*RedisDB) Get Uses

func (db *RedisDB) Get(k string) (string, error)

Get returns a string key.

func (*RedisDB) HDel Uses

func (db *RedisDB) HDel(k, f string)

HDel deletes a hash key.

func (*RedisDB) HGet Uses

func (db *RedisDB) HGet(k, f string) string

HGet returns hash keys added with HSET. Returns empty string when the key is of a different type.

func (*RedisDB) HIncr Uses

func (db *RedisDB) HIncr(k, f string, delta int) (int, error)

HIncr increases a key/field by delta (int).

func (*RedisDB) HIncrfloat Uses

func (db *RedisDB) HIncrfloat(k, f string, delta float64) (float64, error)

HIncrfloat increases a key/field by delta (float).

func (*RedisDB) HKeys Uses

func (db *RedisDB) HKeys(key string) ([]string, error)

HKeys returns all (sorted) keys ('fields') for a hash key.

func (*RedisDB) HSet Uses

func (db *RedisDB) HSet(k string, fv ...string)

HSet sets hash keys. If there is another key by the same name it will be gone.

func (*RedisDB) Incr Uses

func (db *RedisDB) Incr(k string, delta int) (int, error)

Incr changes a int string value by delta.

func (*RedisDB) Incrfloat Uses

func (db *RedisDB) Incrfloat(k string, delta float64) (float64, error)

Incrfloat changes a float string value by delta.

func (*RedisDB) IsMember Uses

func (db *RedisDB) IsMember(k, v string) (bool, error)

IsMember tells if value is in the set.

func (*RedisDB) Keys Uses

func (db *RedisDB) Keys() []string

Keys returns all keys, sorted.

func (*RedisDB) List Uses

func (db *RedisDB) List(k string) ([]string, error)

List returns the list k, or an error if it's not there or something else. This is the same as the Redis command `LRANGE 0 -1`, but you can do your own range-ing.

func (*RedisDB) Lpop Uses

func (db *RedisDB) Lpop(k string) (string, error)

Lpop removes and returns the last element in a list.

func (*RedisDB) Lpush Uses

func (db *RedisDB) Lpush(k, v string) (int, error)

Lpush prepends one value to a list. Returns the new length.

func (*RedisDB) Members Uses

func (db *RedisDB) Members(k string) ([]string, error)

Members gives all set keys. Sorted.

func (*RedisDB) Pop Uses

func (db *RedisDB) Pop(k string) (string, error)

Pop removes and returns the last element. Is called RPOP in Redis.

func (*RedisDB) Push Uses

func (db *RedisDB) Push(k string, v ...string) (int, error)

Push add element at the end. Is called RPUSH in redis. Returns the new length.

func (*RedisDB) SRem Uses

func (db *RedisDB) SRem(k string, fields ...string) (int, error)

SRem removes fields from a set. Returns number of deleted fields.

func (*RedisDB) Set Uses

func (db *RedisDB) Set(k, v string) error

Set sets a string key. Removes expire. Unlike redis the key can't be an existing non-string key.

func (*RedisDB) SetAdd Uses

func (db *RedisDB) SetAdd(k string, elems ...string) (int, error)

SetAdd adds keys to a set. Returns the number of new keys.

func (*RedisDB) SetTTL Uses

func (db *RedisDB) SetTTL(k string, ttl time.Duration)

SetTTL sets the time to live of a key.

func (*RedisDB) SortedSet Uses

func (db *RedisDB) SortedSet(k string) (map[string]float64, error)

SortedSet returns a raw string->float64 map.

func (*RedisDB) Stream Uses

func (db *RedisDB) Stream(k string) ([]StreamEntry, error)

Stream returns a slice of stream entries. Oldest first.

func (*RedisDB) TTL Uses

func (db *RedisDB) TTL(k string) time.Duration

TTL is the left over time to live. As set via EXPIRE, PEXPIRE, EXPIREAT, PEXPIREAT. 0 if not set.

func (*RedisDB) Type Uses

func (db *RedisDB) Type(k string) string

Type gives the type of a key, or ""

func (db *RedisDB) Unlink(k string) bool

Unlink deletes a key and any expiration value. Returns where there was a key. It's exactly the same as Del() and is not async. It is here for the consistency.

func (*RedisDB) XAdd Uses

func (db *RedisDB) XAdd(k string, id string, values []string) (string, error)

XAdd adds an entry to a stream. `id` can be left empty or be '*'. If a value is given normal XADD rules apply. Values should be an even length.

func (*RedisDB) ZAdd Uses

func (db *RedisDB) ZAdd(k string, score float64, member string) (bool, error)

ZAdd adds a score,member to a sorted set.

func (*RedisDB) ZMembers Uses

func (db *RedisDB) ZMembers(k string) ([]string, error)

ZMembers returns all members of a sorted set by score

func (*RedisDB) ZRem Uses

func (db *RedisDB) ZRem(k, member string) (bool, error)

ZRem deletes a member. Returns whether the was a key.

func (*RedisDB) ZScore Uses

func (db *RedisDB) ZScore(k, member string) (float64, error)

ZScore gives the score of a sorted set member.

type StreamEntry Uses

type StreamEntry struct {
    ID     string
    Values []string
}

A StreamEntry is an entry in a stream. The ID is always of the form "123-123". Values should have an even length of entries.

type Subscriber Uses

type Subscriber struct {
    // contains filtered or unexported fields
}

Subscriber has the (p)subscriptions.

func (*Subscriber) Channels Uses

func (s *Subscriber) Channels() []string

List all subscribed channels, in alphabetical order

func (*Subscriber) Close Uses

func (s *Subscriber) Close()

Close the listening channel

func (*Subscriber) Count Uses

func (s *Subscriber) Count() int

Count the total number of channels and patterns

func (*Subscriber) Messages Uses

func (s *Subscriber) Messages() <-chan PubsubMessage

The channel to read messages for this subscriber. Only for messages matching a SUBSCRIBE.

func (*Subscriber) Patterns Uses

func (s *Subscriber) Patterns() []string

List all subscribed patterns, in alphabetical order

func (*Subscriber) Pmessages Uses

func (s *Subscriber) Pmessages() <-chan PubsubPmessage

The channel to read messages for this subscriber. Only for messages matching a PSUBSCRIBE.

func (*Subscriber) Psubscribe Uses

func (s *Subscriber) Psubscribe(pat string) int

Subscribe to a pattern. Returns the total number of (p)subscriptions after subscribing.

func (*Subscriber) Publish Uses

func (s *Subscriber) Publish(c, msg string) int

Publish a message. Will return return how often we sent the message (can be a match for a subscription and for a psubscription.

func (*Subscriber) Punsubscribe Uses

func (s *Subscriber) Punsubscribe(pat string) int

Unsubscribe a pattern. Returns the total number of (p)subscriptions after unsubscribing.

func (*Subscriber) Subscribe Uses

func (s *Subscriber) Subscribe(c string) int

Subscribe to a channel. Returns the total number of (p)subscriptions after subscribing.

func (*Subscriber) Unsubscribe Uses

func (s *Subscriber) Unsubscribe(c string) int

Unsubscribe a channel. Returns the total number of (p)subscriptions after unsubscribing.

type T Uses

type T interface {
    Fail()
}

T is implemented by Testing.T

Directories

PathSynopsis
geohashPackage geohash provides encoding and decoding of string and integer geohashes.
server

Package miniredis imports 25 packages (graph) and is imported by 11 packages. Updated 2020-03-23. Refresh now. Tools for package owners.