栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Go语言

GO语言操作redis

Go语言 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

GO语言操作redis

目录

前言

一、Redigo

1.redigo连接redis服务器

2.set、get操作

2.List操作

3.Hash表

4.set

5.zset

6.连接池

7.事务

总结


前言

刚学完redis,在此记录如何使用redis。redis有许多go语言的客户端包,都能实现对redis的操作。例如redigo、go-redis。

一、Redigo

1.redigo连接redis服务器
package main

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

func main() {
    client, err := redis.Dial("tcp", "localhost:6379")
    if err != nil {
        fmt.Println("redis connect failed,", err)
        return
    } 

    fmt.Println("redis connect success")

    defer client.Close()
}

2.set、get操作
  • 设置值
    _, err = client.Do("Set", "abc", 100)
    if err != nil {
        fmt.Println("set string failed", err)
        return
    }
    _, err = client.Do("Set", "36D", "good")
    if err != nil {
        fmt.Println("set string failed", err)
        return
    }
  • 获取值
    // redigo 通过redis.Int()函数来获取整型
    res, err := redis.Int(client.Do("Get", "abc"))
    if err != nil {
        fmt.Println("get string failed,", err)
        return
    }
    fmt.Println(res)
    // redigo 通过redis.String()函数来获取字符串
    res1, err := redis.String(client.Do("Get", "36D"))
    if err != nil {
        fmt.Println("get string failed,", err)
        return
    }
    fmt.Println(res1)
  • 批量获取
    res3, err := redis.Strings(client.Do("MGet", "36", "32"))
    if err != nil {
        fmt.Println("get string failed,", err)
        return
    }
    fmt.Println(res3)
  • 设置过期时间
    // 设置过期时间
    _, err = client.Do("setex" , "a", 2, "10")
    if err != nil {
        fmt.Println("set string failed", err)
        return
    }
    
    res2, err := redis.String(client.Do("Get", "a"))
    if err != nil {
        fmt.Println("get string failed,", err)
        return
    }
    fmt.Println(res2)
    time.Sleep(5 * time.Second)
    fmt.Println("5秒后")
    res2, err = redis.String(client.Do("Get", "a"))
    if err != nil {
        fmt.Println("get string failed,", err)
        return
    }
    fmt.Println(res2)

  输出如下:

10
5秒后
get string failed, redigo: nil returned

2.List操作
  • lpush key element1 element2:向列表左侧插入若干个元素
    // 从左边放入元素
    _, err = client.Do("lpush", "NBAplayer", "Jordon", "Kobe", "Lebron")
    if err != nil {
        fmt.Println("push element failed")
        return
    }
  • lrange key start end:返回范围内的所有元素
    // 取出所有元素
    res4, err := redis.Strings(client.Do("lrange", "NBAplayer", "0", "-1"))
    if err != nil {
        fmt.Println("get element failed")
        return
    }
    for _, v := range res4{
        fmt.Println(v)
    }

  输出结果:

Lebron
Kobe
Jordon

3.Hash表
  • hset key field value:添加或修改hash类型key的field的值
    // 单个插入
    _, err = client.Do("HSet", "DSB", "name", "SB")
    if err != nil {
        fmt.Println("hset failed")
        return
    }
  • hmset key field1 value1 field2 value2:批量添加多个hash类型key的field值
    _, err = client.Do("HmSet", "DSB", "age", "18", "addr", "usa")
    if err != nil {
        fmt.Println("hmset failed")
        return
    }
  • hget key field:获取一个hash类型的key的field的值
    // 单个获取
    res5, err := redis.String(client.Do("Hget", "DSB", "name"))
    if err != nil {
        fmt.Println("hget element failed")
        return
    }
    fmt.Println(res5)
  • hmget key field1 field2:批量获取hash类型key多个field的value值
    // 批量获取
    res6, err := redis.Strings(client.Do("HmGet", "DSB", "name", "age", "addr"))
    if err != nil {
        fmt.Println("hmget failed")
        return
    }
    fmt.Println(res6)

4.set
  • sadd key member1 member2:向set中添加若干个元素
    _, err = client.Do("sadd", "qin", "18", "male", "handsome")
    if err != nil {
        fmt.Println("sadd failed, err:", err)
        return
    }
    _, err = client.Do("sadd", "yi", "19", "male", "handsome")
    if err != nil {
        fmt.Println("sadd failed, err:", err)
        return
    }
  • smembers key:返回set中所有元素s
    res, err := redis.Strings(client.Do("smembers", "qin")) 
    if err != nil {
        fmt.Println("smembers failed, err:", err)
        return
    }
    fmt.Println(res)
  • sinter key1 key2:求key1、key2的交集
    res, err := redis.Strings(client.Do("sinter", "qin", "yi"))
    if err != nil {
        fmt.Println("sinter failed, err:", err)
        return
    }
    fmt.Println(res)
  • sdiff key1 key2:求key1、key2的差集
    res, err = redis.Strings(client.Do("sdiff", "qin", "yi"))
    if err != nil {
        fmt.Println("sinter failed, err:", err)
        return
    }
    fmt.Println(res)
  • sunion key1 key2:求key1、key2的并集
    res, err = redis.Strings(client.Do("sunion", "qin", "yi"))
    if err != nil {
        fmt.Println("sinter failed, err:", err)
        return
    }
    fmt.Println(res)
  • sismember key member:判断元素是否存在于set中
    res, err := redis.Bool(client.Do("sismember", "qin", "20")) 
    if err != nil {
        fmt.Println("sismember failed, err:", err)
    }
    fmt.Println(res) 

scard key:返回set中元素的个数

    res, err := redis.Int(client.Do("scard", "qin")) 
    if err != nil {
        fmt.Println("scard failed, err:", err)
    }
    fmt.Println(res) 

srem key member1 member2:移除set中指定元素

    res, err := redis.Int(client.Do("srem", "qin", 18)) 
    if err != nil {
        fmt.Println("srem failed, err:", err)
    }
    fmt.Println(res)  

5.zset
  • zadd key score member:添加若干个元素到zset,如果存在则覆盖
    _, err = client.Do("zadd", "RankOfNBAplayer", 1, "Jordon", 2, "LeBron", 3, "kobe", 4, "YaoMing", 5, "JRSmith")
    if err != nil {
        fmt.Println("zadd failed, err:", err)
        return
    }
  • zrem key member:删除zset中指定的元素
    _, err = client.Do("zrem", "RankOfNBAplayer", "JRSmith")
    if err != nil {
        fmt.Println("zrem failed, err:", err)
        return
    }

  • zscore key member:获取zset中指定元素的score值
    res, err := redis.Int(client.Do("zscore", "RankOfNBAplayer", "Jordon"))
    if err != nil {
        fmt.Println("zscore failed, err:", err)
        return
    }
    fmt.Println(res)

  • zrank key member:获取zset中指定元素的排名
    res, err := redis.Int(client.Do("zrank", "RankOfNBAplayer", "Jordon"))
    if err != nil {
        fmt.Println("zrank failed, err:", err)
        return
    }
    fmt.Println(res)

  • zcard key:获取zset中元素个数
    res, err := redis.Int(client.Do("zcard", "RankOfNBAplayer"))
    if err != nil {
        fmt.Println("zcard failed, err:", err)
        return
    }
    fmt.Println(res)

  • zcount key min max:统计score值在范围中的元素个数
    res, err := redis.Int(client.Do("zcount", "RankOfNBAplayer", 0, 3))
    if err != nil {
        fmt.Println("zcount failed, err:", err)
        return
    }
    fmt.Println(res)

  • zincrby key increment member:指定zset中指定元素的自增步长
    res, err := redis.Int(client.Do("zincrby", "RankOfNBAplayer", 10, "JRSmith"))
    if err != nil {
        fmt.Println("zincrby failed, err:", err)
        return
    }
    fmt.Println(res)

  • zrange key start end:获取范围内的元素
    res, err := redis.Strings(client.Do("zrange", "RankOfNBAplayer", 0, -1))
    if err != nil {
        fmt.Println("zincrby failed, err:", err)
        return
    }

  • zrangebyscore key min max:按照分数排序
    res, err := redis.Strings(client.Do("zrangebyscore", "RankOfNBAplayer", 0, 3))
    if err != nil {
        fmt.Println("zincrby failed, err:", err)
        return
    }
    fmt.Println(res)

6.连接池
 
// 创建redis连接池
var pool *redis.Pool

func init() {
	pool = &redis.Pool{
		MaxIdle:     16,  // 连接数量
		MaxActive:   0,   // 最大连接数量,不确定用0
		IdleTimeout: 300, //连接关闭时间
		Dial: func() (redis.Conn, error) { //需要连接的数据库
			return redis.Dial("tcp", "localhost:6379")
		},
	}
}
func main() {
	// 从连接池中获取连接
	client := pool.Get()
    // 把连接放回连接池
	defer client.Close()
	_, err := client.Do("Set", "CSDN", "good")
	if err != nil {
		fmt.Println("set string failed, err:", err)
		return
	}

	res, err := redis.String(client.Do("Get", "CSDN"))
	if err != nil {
		fmt.Println("set string failed, err:", err)
		return
	}
	fmt.Println(res)
	// 关闭连接池
	pool.Close()
}

7.事务
    // 开启事务
    client.Send("MULTI")
    client.Send("set", "k1", "v1")
    client.Send("set", "k2", "v2")
    // 执行事务
    res, err := client.Do("EXEC")
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(res)

总结

本文仅仅简单介绍了如何使用go语言操作redis。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/965455.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号