redis

package module
v1.0.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 29, 2017 License: MIT Imports: 8 Imported by: 0

README

Redis

Helpers for redis package

Usage

Single connection
  import "gopkg.in/adone/go.redis.v1"
  config := redis.Configuration{
    Address:        "localhost:6379",
    ConnectTimeout: 1 * time.Second,
    ReadTimeout:    1 * time.Second,
    WriteTimeout:   5 * time.Second,
    Database:       1,
  }
  // TEST_REDIS_ADDRESS=localhost:6379
  // TEST_REDIS_DATABASE=1
  // TEST_REDIS_TIMEOUT=1s
  // TEST_REDIS_WRITE_TIMEOUT=5s
  config := redis.ENV("TEST")
  // TEST_REDIS_ADDRESS=localhost:6379
  // REDIS_TIMEOUT=1s
  // TEST_REDIS_TIMEOUT=2s

  config := redis.ENV("TEST")
  config.Timeout // => 2 * time.Second
  // TEST_REDIS_SERVICE_HOST=10.0.0.2
  // TEST_REDIS_SERVICE_PORT=9736
  // TEST_REDIS_DATABASE=1

  config := redis.ENV("TEST")
  config.Address() // => "10.0.0.2:9736"
  // TEST_REDIS_DATABASE=1
  redis.Database("TEST") // => 1

  // TEST_REDIS_TIMEOUT=1s
  redis.CommonTimeout("TEST") // => time.Second
package main

import (
    "fmt"

    "gopkg.in/adone/go.redis.v1"
)

func main() {
    conn, err := redis.New(redis.ENV("TEST"))
    if err != nil {
        panic(err)
    }
    defer conn.Close()

    message, err := redis.String(conn.Do("PING", "FOOBAR"))
    fmt.Println(message, err)
}

Support ENV variables:

  • PREFIX_REDIS_URL
  • PREFIX_REDIS_SERVICE_HOST
  • PREFIX_REDIS_SERVICE_PORT
  • PREFIX_REDIS_USERNAME
  • PREFIX_REDIS_PASSWORD
  • PREFIX_REDIX_DATABASE
  • PREFIX_REDIS_TIMEOUT
  • REDIS_TIMEOUT
  • PREFIX_REDIS_CONNECT_TIMEOUT
  • REDIS_CONNECT_TIMEOUT
  • PREFIX_REDIS_WRITE_TIMEOUT
  • REDIS_WRITE_TIMEOUT
  • PREFIX_REDIS_READ_TIMEOUT
  • REDIS_READ_TIMEOUT
  • PREFIX_SENTINEL_HOSTS_PORTS
  • PREFIX_SENTINEL_MASTER_NAME
PREFIX_SENTINEL_ADDRESSES

PREFIX_SENTINEL_ADDRESSES=host1:port1,host2:port2,host3:port3

Pool
  import "gopkg.in/adone/go.redis.v1/pool"
  config := pool.Configuration{
    WaitConnection:           true,
    MaxIdleConnectionCount:   8,
    MaxActiveConnectionCount: 32,
    IdleConnectionTimeout:    1 * time.Hour,
    CheckConnectionFrequency: 1 * time.Minute,
  }
  // TEST_REDIS_ACTIVE_POOL_SIZE=32
  // TEST_REDIS_IDLE_POOL_SIZE=8
  // TEST_REDIS_POOL_TIMEOUT=1h
  // TEST_REDIS_POOL_CHECK_TIMEOUT=1m
  config := pool.ENV("TEST")

Full example:

package main

import (
    "fmt"

    redigo "github.com/garyburd/redigo/redis"

    "gopkg.in/adone/go.redis.v1"
    "gopkg.in/adone/go.redis.v1/pool"
)

func main() {
    config := pool.ENV("TEST")

    pl := pool.New(config,
        redis.Connect(redis.ENV("TEST")),
        pool.Check(config),
    )

    conn := pl.Get()
    defer conn.Close()

    message, err := redis.String(conn.Do("PING", "FOOBAR"))
    fmt.Println(message, err)
}

Support ENV variables:

  • PREFIX_REDIS_ACTIVE_POOL_SIZE
  • REDIS_ACTIVE_POOL_SIZE
  • PREFIX_REDIS_IDLE_POOL_SIZE
  • REDIS_IDLE_POOL_SIZE
  • REDIS_POOL_SIZE
  • PREFIX_REDIS_POOL_TIMEOUT
  • REDIS_POOL_IDLE_TIMEOUT
  • REDIS_POOL_TIMEOUT
  • PREFIX_REDIS_POOL_CHECK_TIMEOUT
  • REDIS_POOL_CHECK_TIMEOUT
Storage
import "gopkg.in/adone/go.redis.v1/storage"

Commands:

  • INCRBY
  err := client.Increment("key", 1)
  • EXPIRE
  err := client.Expire("key", 1)
  err := client.Expire("key", time.Minute)
  err := client.Expire("key", func(key string) int { return 1 })
  • SET
  err := client.Set("key", []byte("value"))
  • SETEX

storage automatic change SET to SETEX if KeyTTL is set

  client.New(storage.Configuration{KeyTTL: 100})
  client.Set("key", []byte("value")) // => SETEX key 100 value
  client.New(storage.Configuration{KeyTTL: func(key string) int { return 10 }})
  client.Set("key", []byte("value")) // => SETEX key 10 value

TTL can be set in storage.Setter

  setter := storage.Setter{
    Storage: client,
    Key:     "key",
    Value:   []byte("value"),
    TTL:     1*time.Hour,
  }
  err := setter.Call()
  setter := storage.Setter{
    Storage: client,
    Key:     "key",
    Value:   []byte("value"),
  }
  err := setter.Set(3600)
  • GET
  value, err := client.Get("key")
  • DEL
  err := client.Delete("key")
  err := client.Delete("key1", "key2", "key3")
  • SCAN
  keys, err := client.Keys("key.*.template")
  iterator := storage.Iterator{
    Storage:   client,
    Template:  "key.*.template",
    BatchSize: 100,
  }

  keys, err := iterator.Call()
  • HSET
  client.AddField("key", "field", []byte("value"))
  • HEXIST
  client.FieldExist("key", "field")
  • HGET
  client.GetField("key", "value")
  • HVALS
  values, err := client.GetValues("key")
  • HDEL
  client.DeleteFields("key", "field")
  • SMEMBERS
data, err := client.GetAllFromSet("setname")
  • SISMEMBER
exist, err := client.IsMemberOfSet("setname", "value")
  client.DeleteFields("key", "field1", "filed2", "filed3")
  • PUBLISH
  err := client.Publish("key", []byte("value"))

Full example:

package main

import (
    "fmt"

    "gopkg.in/adone/go.redis.v1"
    "gopkg.in/adone/go.redis.v1/pool"
    "gopkg.in/adone/go.redis.v1/storage"
)

func main() {
    config := storage.ENV("TEST")
    config.Pool = pool.New(pool.ENV("TEST"),
        redis.Connect(redis.ENV("TEST")),
        pool.Check(pool.ENV("TEST")),
    )

    client = storage.New(config)

    err := client.Set("foo", []byte("bar"))
    fmt.Println(err)

    message, err := client.Get("foo")
    fmt.Printf("%s %v", message, err)

    count, err := client.Delete("foo")
    fmt.Println(count, err)
}

Documentation

Overview

Package redis contains helper functions and structs for working with Redis.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func CommonTimeout

func CommonTimeout(prefix string) time.Duration

CommonTimeout общий таймаут

func Connect

func Connect(configuration *Configuration) func() (redis.Conn, error)

func ConnectionTimeout

func ConnectionTimeout(prefix string) time.Duration

ConnectionTimeout таймаут на подключение

func Database

func Database(prefix string) int

func MasterName

func MasterName(prefix string) string

func New

func New(config *Configuration) (redis.Conn, error)

New creates new redis connection

func NewSentinel

func NewSentinel(config *Configuration) *sentinel.Sentinel

NewSentinel creates new Sentinel connection

func ReadTimeout

func ReadTimeout(prefix string) time.Duration

ReadTimeout таймаут на чтение

func SentinelAddresses

func SentinelAddresses(prefix string) []string

func WriteTimeout

func WriteTimeout(prefix string) time.Duration

WriteTimeout таймаут на запись

Types

type Configuration

type Configuration struct {
	MasterName        string
	SentinelAddresses []string
	Sentinel          *sentinel.Sentinel
	Timeout           time.Duration
	ConnectTimeout    time.Duration
	ReadTimeout       time.Duration
	WriteTimeout      time.Duration
	Database          int
	Password          string
	// contains filtered or unexported fields
}

Configuration

func ENV

func ENV(prefix string) *Configuration

ENV return configuration from env variables

func (Configuration) Address

func (config Configuration) Address() (string, error)

Address return redis addess

func (Configuration) GetConnectTimeout

func (config Configuration) GetConnectTimeout() time.Duration

GetConnectTimeout returns connection timeout

func (Configuration) GetReadTimeout

func (config Configuration) GetReadTimeout() time.Duration

GetReadTimeout returns response read timeout

func (Configuration) GetWriteTimeout

func (config Configuration) GetWriteTimeout() time.Duration

GetWriteTimeout returns request write timeout

type Dialer

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

func NewDialer

func NewDialer(config *Configuration) *Dialer

func (Dialer) Dial

func (dialer Dialer) Dial(address string) (redis.Conn, error)

Directories

Path Synopsis
Package storage contains helper functions & structs for high-level work with Redis
Package storage contains helper functions & structs for high-level work with Redis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL