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()
}

时间: 2024-09-22 22:52:52

go使用redis的相关文章

Redis 数据备份与恢复

Redis SAVE 命令用于创建当前数据库的备份. 语法 redis Save 命令基本语法如下: redis 127.0.0.1:6379> SAVE 实例 redis 127.0.0.1:6379> SAVE OK 该命令将在 redis 安装目录中创建dump.rdb文件. 恢复数据 如果需要恢复数据,只需将备份文件 (dump.rdb) 移动到 redis 安装目录并启动服务即可.获取 redis 目录可以使用 CONFIG 命令,如下所示: redis 127.0.0.1:6379

Redis之七种武器

长生剑.孔雀翎.碧玉刀.多情环.离别钩.霸王枪.拳头是古龙笔下的七种武器,而本文打算将Redis的几种使用方式 Strings.Hashs.Lists.Sets.Sorted Sets.Pub/Sub.Transactions 也比作七种武器,为大家讲解Redis的七种特性,并列举其适合的应用场景. Strings Strings 数据结构是简单的key-value类型,value其实不仅是String,也可以是数字.使用Strings类型,你可以完全实现目前 Memcached 的功能,并且效

java实现redis数据库访问

分析亚马逊AWS数据存储-----http://edu.csdn.net/course/detail/873 一.server端安装 1.下载 https://github.com/MSOpenTech/redis 可看到当前可下载版本:redis2.6 下载windows平台文件: 解压后,选择当前64位win7系统对应的版本: 2.安装 1)解压后将里面所有文件拷贝至redis安装目录: 几个exe程序的功能:   redis-benchmark.exe:性能测试,用以模拟同时由N个客户端发

Redis内存数据库操作命令详解

一.连接操作相关的命令    quit关闭连接connection    auth简单密码认证 二.对value操作的命令    exists(key)确认一个key是否存在    del(key)删除一个key    type(key)返回值的类型    keys(pattern)返回满足给定pattern的所有key    randomkey随机返回key空间的一个key    rename(oldname, newname)将key由oldname重命名为newname若newname存在

Windows Server 2016 配置指南 之 安装 PHP redis 拓展

前文 安装 Redis3.0 介绍了服务器安装 Redis3.0,但是就像我们安装了 Mysql 依旧需要然后对应的 php 驱动拓展一样,redis 也是.这里就讲一下如何安装 Redis 的 php 拓展. 尽管 PHP7 正式版出来已经有个把月数了,但是提供 Windows 系统使用的 phpredis 已经没有更新.见地址:http://windows.php.net/downloads/pecl/releases/redis/ ,依旧是旧的. 不过么,phpredis 的 php7 分

java如何队列同步redis?

问题描述 java如何队列同步redis? 就是数据批量插入redis,然后再同步插入到数据库里面,怎么搞 解决方案 java redis使用之利用jedis实现redis消息队列0135 java redis使用之利用jedis实现redis消息队列java redis使用之利用jedis实现redis消息队列 解决方案二: 一般是数据先插入数据库,然后再利用触发器等把数据插入redis.或者用过期方式来从数据库同步数据到redis

redis 异常,Could not return the resource to the pool

问题描述 redis 异常,Could not return the resource to the pool 解决方案 Redis没启动还有防火墙连接不上吧. 解决方案二: http://blog.csdn.net/freebird_lb/article/details/7460328 解决方案三: https://github.com/xetorthio/jedis/issues/560 解决方案四: http://blog.csdn.net/testcs_dn/article/detail

Redis 代理服务Twemproxy

1.twemproxy explore &http://www.aliyun.com/zixun/aggregation/37954.html">nbsp;     当11545.html">我们有大量 Redis 或 Memcached 的时候,通常只能通过客户端的一些数据分配算法(比如一致性哈希),来实现集群存储的特性.虽然Redis 2.6版本已经发布Redis Cluster,但还不是很成熟适用正式生产环境. Redis 的 Cluster 方案还没有正式推

redis的那些事

持久化  redis支持RDB和AOF两种持久化方式   The RDB persistence performs point-in-time snapshots of your dataset at specified intervals. RDB是一种即时快照的存储方式,定时对数据库进行snapshot RDB优点: 1 RDB对于数据备份非常容易.你可以设置1天或者30天对数据进行一次备份,这样当发生数据灾难的时候能很容易恢复 2 由于RDB对数据备份时redis只做备份操作,所以备份最大

Redis缓存数据库安装

简单介绍: redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorted set --有序集合)和hashs(哈希类型).这些数据类型都支持push/pop.add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的.在此基础上,redis支持各种不同方式的排序.与memcached一样,为了保证效率,数据都是缓存在内存中. 区别的是redis会周