golang-redis之set类型简单操作

17 篇文章 2 订阅

1:安装redigo

go get github.com/garyburd/redigo/redis

2:连接redis

import (
    "github.com/garyburd/redigo/redis"
)
c, err := redis.Dial("tcp", "192.168.2.225:6379")
if err != nil {
    fmt.Println("connect to redis err", err.Error())
    return
}
defer c.Close()

3:命令执行

n,err := c.Do("sadd","key","value")  //写
result,err := redis.Values(c.Do("smembers","key"))//读

4:set类型常见操作

sadd(key, member):向名称为keyset中添加元素member
srem(key, member) :删除名称为keyset中的元素member
spop(key) :随机返回并删除名称为keyset中一个元素
smove(srckey, dstkey, member) :移到集合元素
scard(key) :返回名称为keyset的基数
sismember(key, member) :member是否是名称为keyset的元素
sinter(key1, key2,…key N) :求交集
sinterstore(dstkey, (keys)) :求交集并将交集保存到dstkey的集合
sunion(key1, (keys)) :求并集
sunionstore(dstkey, (keys)) :求并集并将并集保存到dstkey的集合
sdiff(key1, (keys)) :求差集
sdiffstore(dstkey, (keys)) :求差集并将差集保存到dstkey的集合
smembers(key) :返回名称为keyset的所有元素
srandmember(key) :随机返回名称为keyset的一个元素

5:示例
5.1:sadd/smembers示例

_, err = c.Do("sadd", "myset", "mobike", "foo", "ofo", "bluegogo")
if err != nil {
    fmt.Println("set add failed", err.Error())
}
value, err := redis.Values(c.Do("smembers", "myset"))
if err != nil {
    fmt.Println("set get members failed", err.Error())
} else {
    fmt.Printf("myset members :")
    for _, v := range value {
        fmt.Printf("%s ", v.([]byte))
    }
    fmt.Printf("\n")
}

5.2:srandmember示例

ret, err := c.Do("srandmember", "myset")
if err != nil {
    fmt.Println("srandmember get failed")
} else {
    fmt.Printf("srandmember get value is:%s\n", ret)
}

5.3:srem示例

_, err = c.Do("srem", "myset", "bluegogo")
if err != nil {
    fmt.Println("srem myset error", err.Error())
} else {
    value, err = redis.Values(c.Do("smembers", "myset"))
    if err != nil {
        fmt.Println("set get members failed", err.Error())
    } else {
        fmt.Printf("myset members :")
        for _, v := range value {
            fmt.Printf("%s ", v.([]byte))
        }
        fmt.Printf("\n")
    }
}

5.4:smove示例

_, err = c.Do("smove", "myset", "dbset", "mobike")
if err != nil {
    fmt.Println("smove failed", err.Error())
} else {
    value, err = redis.Values(c.Do("smembers", "dbset"))
    if err != nil {
        fmt.Println("get new dbset members failed", err.Error())
    } else {
        fmt.Printf("get new dbset members :")
        for _, v := range value {
            fmt.Printf("%s ", v.([]byte))
        }
        fmt.Printf("\n")
    }
}

5.5:scard示例

num, err := c.Do("scard", "myset")
if err != nil {
    fmt.Println("scard error", err.Error())
} else {
    fmt.Println("scard get num :", num)
}

5.6:sismember

isMember, err := c.Do("sismember", "myset", "foo")
if err != nil {
    fmt.Println("sismember get failed", err.Error())
} else {
    fmt.Println("foo is or not myset's member", isMember)
}

5.7:sinter示例

_, err = c.Do("sadd", "dbset", "foo", "ofo", "xiaolan")
if err != nil {
    fmt.Println("set add failed", err.Error())
}
inner, err := redis.Values(c.Do("sinter", "myset", "dbset"))
if err != nil {
    fmt.Println("sinter error", err.Error())
} else {
    fmt.Printf("two set inter is:")
    for _, v := range inner {
        fmt.Printf(" %s ", v.([]byte))
    }
    fmt.Printf("\n")
}

5.8:sinterstore

_, err = c.Do("sinterstore", "newset", "dbset", "myset")
if err != nil {
    fmt.Println("sinterstore between myset and dbset error", err.Error())
} else {
    value, err := redis.Values(c.Do("smembers", "newset"))
    if err != nil {
        fmt.Println("set get members failed", err.Error())
    } else {
        fmt.Printf("newset members :")
        for _, v := range value {
            fmt.Printf("%s ", v.([]byte))
        }
        fmt.Printf("\n")
    }
}

5.9:sunion

unino, err := redis.Values(c.Do("sunion", "myset", "dbset"))
if err != nil {
    fmt.Println("sunion err", err.Error())
} else {
    fmt.Printf("two set union is:")
    for _, v := range unino {
        fmt.Printf(" %s ", v.([]byte))
    }
    fmt.Printf("\n")
}

5.10:sunionstore

_, err = c.Do("sunionstore", "unewset", "myset", "dbset")
if err != nil {
    fmt.Println("sunionstore failed", err.Error())
} else {
    value, err := redis.Values(c.Do("smembers", "unewset"))
    if err != nil {
        fmt.Println("set get members failed", err.Error())
    } else {
        fmt.Printf("unewset members :")
        for _, v := range value {
            fmt.Printf("%s ", v.([]byte))
        }
        fmt.Printf("\n")
    }
}

5.11:sdiff

diff, err := redis.Values(c.Do("sdiff", "dbset", "myset"))
if err != nil {
    fmt.Println("sdiff err", err.Error())
} else {
    fmt.Printf("two set diff is:")
    for _, v := range diff {
        fmt.Printf(" %s ", v.([]byte))
    }
    fmt.Printf("\n")
}

5.12:sdiffstore

_, err = c.Do("sdiffstore", "dnewset", "dbset", "myset")
if err != nil {
    fmt.Println("sdiffstore failed", err.Error())
} else {
    value, err := redis.Values(c.Do("smembers", "dnewset"))
    if err != nil {
        fmt.Println("set get members failed", err.Error())
    } else {
        fmt.Printf("dnewset members :")
        for _, v := range value {
            fmt.Printf("%s ", v.([]byte))
        }
        fmt.Printf("\n")
    }
}

5.13:spop

res, err := c.Do("spop", "myset")
if err != nil {
    fmt.Println("spop failed", err.Error())
} else {
    fmt.Printf("spop element is:%s\n", res)
}
value, err = redis.Values(c.Do("smembers", "myset"))
if err != nil {
    fmt.Println("after spop  get members failed", err.Error())
} else {
    fmt.Printf("after spop myset members :")
    for _, v := range value {
        fmt.Printf("%s ", v.([]byte))
    }
    fmt.Printf("\n")
}

6:运行结果
这里写图片描述

完整代码路径

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值