Go DB6. 使用Redis数据库

NoSQL(Not Only SQL),指的是非关系型的数据库。目前流行的NOSQL主要有redis、mongoDB、Cassandra和Membase等。这些数据库都有高性能、高并发读写等特点,目前已经广泛应用于各种应用中。

Redis

redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)和zset(有序集合)。

Go目前支持redis的驱动有如下

https://github.com/garyburd/redigo(推荐)

https://github.com/go-redis/redis

https://github.com/hoisie/redis

https://github.com/alphazero/Go-Redis

https://github.com/simonz05/godis

示例代码

1、以redigo驱动为例来演示如何进行数据的操作:

package main

import (

    "fmt"

    "os"

    "os/signal"

    "syscall"

    "time"

    "github.com/garyburd/redigo/redis"

)

var (

    Pool *redis.Pool

)

func init() {

    redisHost := ":6379"

    Pool = newPool(redisHost)

    close()

}

func newPool(server string) *redis.Pool {

    return &redis.Pool{

        MaxIdle:    3,

        IdleTimeout: 240 * time.Second,

        Dial: func() (redis.Conn, error) {

            c, err := redis.Dial("tcp", server)

            if err != nil {

                return nil, err

            }

            return c, err

        },

        TestOnBorrow: func(c redis.Conn, t time.Time) error {

            _, err := c.Do("PING")

            return err

        },

    }

}

func close() {

    c := make(chan os.Signal, 1)

    signal.Notify(c, os.Interrupt)

    signal.Notify(c, syscall.SIGALRM)

    signal.Notify(c, syscall.SIGKILL)

    go func() {

        <-c

        Pool.Close()

        os.Exit(0)

    }()

}

func Get(key string) ([]byte, error) {

    conn := Pool.Get()

    defer conn.Close()

    var data []byte

    data, err := redis.Bytes(conn.Do("GET", key))

    if err != nil {

        return data, fmt.Errorf("error get key %s: %v", key, err)

    }

    return data, err

}

func main() {

    test, err := Get("test")

    fmt.Println(test, err)

}

2、以goredis驱动为例来演示如何进行数据的操作:

package main

import (

    "fmt"

    "github.com/astaxie/goredis"

)

func main() {

    var client goredis.Client

    // 设置端口为redis默认端口

    client.Addr = "127.0.0.1:6379"    

    // 字符串操作

    client.Set("a", []byte("hello"))

    val, _ := client.Get("a")

    fmt.Println(string(val))

    client.Del("a")

    // list操作

    vals := []string{"a", "b", "c", "d", "e"}

    for _, v := range vals {

        client.Rpush("l", []byte(v))

    }

    dbvals, _ := client.Lrange("l", 0, 4)

    for i, v := range dbvals {

        println(i, ":", string(v))

    }

    client.Del("l")

}

你可能感兴趣的:(Go DB6. 使用Redis数据库)