Documentation ¶
Overview ¶
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")`.
Example ¶
package main import ( "time" "github.com/alicebob/miniredis" "github.com/gomodule/redigo/redis" ) func main() { 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") } }
Output:
Index ¶
- Variables
- type Miniredis
- func (m *Miniredis) Addr() string
- func (m *Miniredis) CheckGet(t T, key, expected string)
- func (m *Miniredis) CheckList(t T, key string, expected ...string)
- func (m *Miniredis) CheckSet(t T, key string, expected ...string)
- func (m *Miniredis) Close()
- func (m *Miniredis) CommandCount() int
- func (m *Miniredis) CurrentConnectionCount() int
- func (m *Miniredis) DB(i int) *RedisDB
- func (m *Miniredis) Del(k string) bool
- func (m *Miniredis) Dump() string
- func (m *Miniredis) Exists(k string) bool
- func (m *Miniredis) FastForward(duration time.Duration)
- func (m *Miniredis) FlushAll()
- func (m *Miniredis) FlushDB()
- func (m *Miniredis) Get(k string) (string, error)
- func (m *Miniredis) HDel(k, f string)
- func (m *Miniredis) HGet(k, f string) string
- func (m *Miniredis) HIncr(k, f string, delta int) (int, error)
- func (m *Miniredis) HIncrfloat(k, f string, delta float64) (float64, error)
- func (m *Miniredis) HKeys(k string) ([]string, error)
- func (m *Miniredis) HSet(k, f, v string)
- func (m *Miniredis) Host() string
- func (m *Miniredis) Incr(k string, delta int) (int, error)
- func (m *Miniredis) Incrfloat(k string, delta float64) (float64, error)
- func (m *Miniredis) IsMember(k, v string) (bool, error)
- func (m *Miniredis) Keys() []string
- func (m *Miniredis) List(k string) ([]string, error)
- func (m *Miniredis) Lpop(k string) (string, error)
- func (m *Miniredis) Lpush(k, v string) (int, error)
- func (m *Miniredis) Members(k string) ([]string, error)
- func (m *Miniredis) Pop(k string) (string, error)
- func (m *Miniredis) Port() string
- func (m *Miniredis) Push(k string, v ...string) (int, error)
- func (m *Miniredis) RequireAuth(pw string)
- func (m *Miniredis) Restart() error
- func (m *Miniredis) SRem(k string, fields ...string) (int, error)
- func (m *Miniredis) Select(i int)
- func (m *Miniredis) Set(k, v string) error
- func (m *Miniredis) SetAdd(k string, elems ...string) (int, error)
- func (m *Miniredis) SetTTL(k string, ttl time.Duration)
- func (m *Miniredis) SetTime(t time.Time)
- func (m *Miniredis) SortedSet(k string) (map[string]float64, error)
- func (m *Miniredis) Start() error
- func (m *Miniredis) StartAddr(addr string) error
- func (m *Miniredis) TTL(k string) time.Duration
- func (m *Miniredis) TotalConnectionCount() int
- func (m *Miniredis) Type(k string) string
- func (m *Miniredis) ZAdd(k string, score float64, member string) (bool, error)
- func (m *Miniredis) ZMembers(k string) ([]string, error)
- func (m *Miniredis) ZRem(k, member string) (bool, error)
- func (m *Miniredis) ZScore(k, member string) (float64, error)
- type RedisDB
- func (db *RedisDB) Del(k string) bool
- func (db *RedisDB) Exists(k string) bool
- func (db *RedisDB) FlushDB()
- func (db *RedisDB) Get(k string) (string, error)
- func (db *RedisDB) HDel(k, f string)
- func (db *RedisDB) HGet(k, f string) string
- func (db *RedisDB) HIncr(k, f string, delta int) (int, error)
- func (db *RedisDB) HIncrfloat(k, f string, delta float64) (float64, error)
- func (db *RedisDB) HKeys(key string) ([]string, error)
- func (db *RedisDB) HSet(k, f, v string)
- func (db *RedisDB) Incr(k string, delta int) (int, error)
- func (db *RedisDB) Incrfloat(k string, delta float64) (float64, error)
- func (db *RedisDB) IsMember(k, v string) (bool, error)
- func (db *RedisDB) Keys() []string
- func (db *RedisDB) List(k string) ([]string, error)
- func (db *RedisDB) Lpop(k string) (string, error)
- func (db *RedisDB) Lpush(k, v string) (int, error)
- func (db *RedisDB) Members(k string) ([]string, error)
- func (db *RedisDB) Pop(k string) (string, error)
- func (db *RedisDB) Push(k string, v ...string) (int, error)
- func (db *RedisDB) SRem(k string, fields ...string) (int, error)
- func (db *RedisDB) Set(k, v string) error
- func (db *RedisDB) SetAdd(k string, elems ...string) (int, error)
- func (db *RedisDB) SetTTL(k string, ttl time.Duration)
- func (db *RedisDB) SortedSet(k string) (map[string]float64, error)
- func (db *RedisDB) TTL(k string) time.Duration
- func (db *RedisDB) Type(k string) string
- func (db *RedisDB) ZAdd(k string, score float64, member string) (bool, error)
- func (db *RedisDB) ZMembers(k string) ([]string, error)
- func (db *RedisDB) ZRem(k, member string) (bool, error)
- func (db *RedisDB) ZScore(k, member string) (float64, error)
- type T
Examples ¶
Constants ¶
This section is empty.
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) )
Functions ¶
This section is empty.
Types ¶
type Miniredis ¶
Miniredis is a Redis server implementation.
func NewMiniRedis ¶
func NewMiniRedis() *Miniredis
NewMiniRedis makes a new, non-started, Miniredis object.
func (*Miniredis) Addr ¶
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 ¶
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 ¶
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 ¶
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) CommandCount ¶
CommandCount returns the number of processed commands.
func (*Miniredis) CurrentConnectionCount ¶
CurrentConnectionCount returns the number of currently connected clients.
func (*Miniredis) Del ¶
Del deletes a key and any expiration value. Returns whether there was a key.
func (*Miniredis) FastForward ¶
FastForward decreases all TTLs by the given duration. All TTLs <= 0 will be expired.
func (*Miniredis) FlushAll ¶
func (m *Miniredis) FlushAll()
FlushAll removes all keys from all databases.
func (*Miniredis) FlushDB ¶
func (m *Miniredis) FlushDB()
FlushDB removes all keys from the selected database.
func (*Miniredis) HGet ¶
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) HIncrfloat ¶
HIncrfloat increases a key/field by delta (float).
func (*Miniredis) HSet ¶
HSet sets a hash key. If there is another key by the same name it will be gone.
func (*Miniredis) List ¶
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) Push ¶
Push add element at the end. Is called RPUSH in redis. Returns the new length.
func (*Miniredis) RequireAuth ¶
RequireAuth makes every connection need to AUTH first. Disable again by setting an empty string.
func (*Miniredis) Restart ¶
Restart restarts a Close()d server on the same port. Values will be preserved.
func (*Miniredis) SetTime ¶
SetTime sets the time against which EXPIREAT values are compared. EXPIREAT will use time.Now() if this is not set.
func (*Miniredis) Start ¶
Start starts a server. It listens on a random port on localhost. See also Addr().
func (*Miniredis) StartAddr ¶
StartAddr runs miniredis with a given addr. Examples: "127.0.0.1:6379", ":6379", or "127.0.0.1:0"
func (*Miniredis) TTL ¶
TTL is the left over time to live. As set via EXPIRE, PEXPIRE, EXPIREAT, PEXPIREAT. 0 if not set.
func (*Miniredis) TotalConnectionCount ¶
TotalConnectionCount returns the number of client connections since server start.
type RedisDB ¶
type RedisDB struct {
// contains filtered or unexported fields
}
RedisDB holds a single (numbered) Redis database.
func (*RedisDB) HGet ¶
HGet returns hash keys added with HSET. Returns empty string when the key is of a different type.
func (*RedisDB) HIncrfloat ¶
HIncrfloat increases a key/field by delta (float).
func (*RedisDB) HSet ¶
HSet sets a hash key. If there is another key by the same name it will be gone.
func (*RedisDB) List ¶
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) Push ¶
Push add element at the end. Is called RPUSH in redis. Returns the new length.
func (*RedisDB) Set ¶
Set sets a string key. Removes expire. Unlike redis the key can't be an existing non-string key.
func (*RedisDB) TTL ¶
TTL is the left over time to live. As set via EXPIRE, PEXPIRE, EXPIREAT, PEXPIREAT. 0 if not set.