美文网首页swift专题...我爱编程
Go DB6. 使用Redis数据库

Go DB6. 使用Redis数据库

作者: 副班长国伟 | 来源:发表于2018-06-19 20:51 被阅读0次

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数据库

    NoSQL(Not Only SQL),指的是非关系型的数据库。目前流行的NOSQL主要有redis、mongoD...

  • Go语言操作Redis

    Go语言操作Redis 在项目开发中redis的使用也比较频繁,本文介绍了Go语言中go-redis库的基本使用。...

  • Golang使用Redis

    go使用Redis 文档链接:https://godoc.org/github.com/go-redis/redis

  • go使用redis

    在go中可以使用github.com/go-redis/redis[https://github.com/go-r...

  • 22.Redis

    在项目开发中redis的使用也比较频繁,本文介绍了Go语言中go-redis库的基本使用。《Redis 实战》 R...

  • go-redis库的返回值

    github.com/go-redis/redis 是go语言中封装的最便利使用的redis客户端,但是它的使用会...

  • go-redis 发布/订阅

    go-redis 发布/订阅 最近golang 的项目开始使用redis 对于redis 真的是接触少,而且是go...

  • 学习规划

    大数据 Flink 数据库 - MySQL, Redis, TIDB 语言 - Java Python Go C ...

  • Thinkphp5怎么扩展Redis数据库,实现Redis的CU

    Thinkphp5怎么扩展Redis数据库,实现Redis的CURD操作 Redis怎么使用Redis数据库,本篇...

  • 云数据库 Redis 版功能特性

    关于云数据库 Redis 版详细了解: 云数据库 Redis 版使用教程 (云数据库Redis版是兼容Redis协...

网友评论

    本文标题:Go DB6. 使用Redis数据库

    本文链接:https://www.haomeiwen.com/subject/hclhjftx.html