go使用redis-阿里云开发者社区

开发者社区> 杨粼波> 正文

go使用redis

简介:
+关注继续查看
Go语言的Redis客户端,官方推荐了两个客户端:redigo和radix.v2
安装之:
go get github.com/mediocregopher/radix.v2
go get github.com/garyburd/redigo/redis

test_redigo.go
package main

import (
    "fmt"
    "github.com/garyburd/redigo/redis"
    "log"
)

// test common
func testCommonOperate() {
    // connect redis server
    c, err := redis.Dial("tcp""127.0.0.1:6379")
    if err != nil {
        fmt.Println(err)
        log.Fatal("connect redis-server error: ", err)
        return
    }
    defer c.Close()

    // SET
    v, err := c.Do("SET""name""red")
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(v)

    // GET
    v, err = redis.String(c.Do("GET""name"))
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(v)

    // LPUSH
    c.Do("lpush""redlist""qqq")
    c.Do("lpush""redlist""www")
    c.Do("lpush""redlist""eee")

    // LRANGE
    values, _ := redis.Values(c.Do("lrange""redlist""0""100"))
    for _, v := range values {
        fmt.Println(string(v.([]byte)))
    }

    // Scan
    var v1 string
    redis.Scan(values, &v1)
    fmt.Println(v1)

    // piple line
    c.Send("SET""name""red")
    c.Send("GET""name")
    c.Flush()
    c.Receive()
    c.Receive()
}

func subscribe() {
    c, err := redis.Dial("tcp""127.0.0.1:6379")
    if err != nil {
        fmt.Println(err)
        return
    }
    defer c.Close()

    psc := redis.PubSubConn{c}
    psc.Subscribe("redChatRoom")
    for {
        switch v := psc.Receive().(type) {
        case redis.Message:
            fmt.Printf("%s: message: %s\n", v.Channel, v.Data)
        case redis.Subscription:
            fmt.Printf("%s: %s %d\n", v.Channel, v.Kind, v.Count)
        case error:
            fmt.Println(v)
            return
        }
    }
}

func testSubscribe() {
    go subscribe()
    go subscribe()
    go subscribe()
    go subscribe()
    go subscribe()

    c, err := redis.Dial("tcp""127.0.0.1:6379")
    if err != nil {
        fmt.Println(err)
        return
    }
    defer c.Close()

    for {
        var s string
        fmt.Scanln(&s)
        _, err := c.Do("PUBLISH""redChatRoom", s)
        if err != nil {
            fmt.Println("pub err: ", err)
            return
        }
    }
}

func main() {
    testCommonOperate()
    //testSubscribe()
}


test_radixv2.go
package main

import (
    "fmt"
    "github.com/mediocregopher/radix.v2/redis"
    "log"
    "strconv"
)

func test1() {
    conn, err := redis.Dial("tcp""localhost:6379")
    if err != nil {
        log.Fatal(err)
        return
    }
    defer conn.Close()

    resp := conn.Cmd("HMSET""album:1""title""Electric Ladyland""artist""Jimi Hendrix""price", 4.95, "likes", 8)
    if resp.Err != nil {
        log.Fatal(resp.Err)
    }

    fmt.Println("Electric Ladyland added!")
}

func test2() {
    conn, err := redis.Dial("tcp""localhost:6379")
    if err != nil {
        log.Fatal(err)
    }
    defer conn.Close()

    title, err := conn.Cmd("HGET""album:1""title").Str()
    if err != nil {
        log.Fatal(err)
    }

    artist, err := conn.Cmd("HGET""album:1""artist").Str()
    if err != nil {
        log.Fatal(err)
    }

    price, err := conn.Cmd("HGET""album:1""price").Float64()
    if err != nil {
        log.Fatal(err)
    }

    likes, err := conn.Cmd("HGET""album:1""likes").Int()
    if err != nil {
        log.Fatal(err)
    }

    fmt.Printf("%s by %s: £%.2f [%d likes]\n", title, artist, price, likes)
}

type Album struct {
    Title  string
    Artist string
    Price  float64
    Likes  int
}

func populateAlbum(reply map[string]string) (*Album, error) {
    var err error
    ab := new(Album)
    ab.Title = reply["title"]
    ab.Artist = reply["artist"]
    ab.Price, err = strconv.ParseFloat(reply["price"], 64)
    if err != nil {
        return nil, err
    }

    ab.Likes, err = strconv.Atoi(reply["likes"])
    if err != nil {
        return nil, err
    }
    return ab, nil
}

func test3() {
    conn, err := redis.Dial("tcp""localhost:6379")
    if err != nil {
        log.Fatal(err)
    }
    defer conn.Close()

    reply, err := conn.Cmd("HGETALL""album:1").Map()
    if err != nil {
        log.Fatal(err)
    }

    ab, err := populateAlbum(reply)
    if err != nil {
        log.Fatal(err)
    }

    fmt.Println(ab)
}

func main() {
    test1()
    //test2()
    //test3()
}

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
8502 0
使用Redis搭建持久化K-V存储
最近在项目中需要在多机之间共享一些集合,Hash等有类型的数据结构,如果基于Mysql来存储的话需要预先定义一系列表结构并维护表结构和数据结构的一致性,后续还需要根据时间对数据库做旧数据清理工作,所以开始调研一些能满足下列需求的存储引擎。 具有高可用,持久化的特性。 数据可以设置失效时间,方便自动数据清理。 支持常用数据结构,如集合,有序集合,Hash map,列表等。 支持事务操作,
4367 0
使用OpenApi弹性释放和设置云服务器ECS释放
云服务器ECS的一个重要特性就是按需创建资源。您可以在业务高峰期按需弹性的自定义规则进行资源创建,在完成业务计算的时候释放资源。本篇将提供几个Tips帮助您更加容易和自动化的完成云服务器的释放和弹性设置。
11889 0
最近使用redis的总结
  线上的redis出现了两次,数据被清空的情况,所以一些安全上的措施是必须要做的。 1、修改redis的默认端口,添加密码 默认的6379端口改成其他的 requirepass 新的密码 2、重命名redis命令,类似于FLUSHALL 的命令...
777 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
12179 0
+关注
杨粼波
网游的老兵
1135
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载