简介:
Set类似于Java中的HashSet,实际上是一个比较特殊的Map,所有的value都为null。Set结构和Java中一样,有自动去重的功能,在一些需要去重的场景下可以使用。
操作:
添加元素:sadd setName value
移除元素:srem setName value
查看set中所有元素 smember setName:
随机返回删除的元素:spop setName [count] // count为弹出的元素的个数
加上个数:
取后续集合中没有,但第一个集合中存在的元素:sdiff set1Name set2Name .....:
取后续集合中没有,但第一个集合中存在的元素,并放入到指定的集合中:sdiffstore dstSet set1Name set2Name set3Name ....:
取交集,sinter set1Name set2Name ...
取交集,结果放入一个指定的集合中:sinterstore dstSet set1Name set2Name ...
取并集,sunion payList promotionList
取并集,结果放入一个指定的集合中:sunionstore dstSet set1Name set2Name ...
将一个集合中的元素移动到另外一个集合中:smove srcSet dstSet value:
获取集合的大小,scard setName:
判断元素是否是该集合中的,sismember setName value:
下面编写一段Go代码来操作Set结构:
package main import ( "github.com/garyburd/redigo/redis" "fmt" ) func main(){ // 连接redis conn,err := redis.Dial("tcp", "localhost:6379") if err != nil { fmt.Errorf("connection redis failed. error info: ", err) return } _,err = conn.Do("sadd", "payList", "zhangfei", "machao", "liubei", "guanyu") if err != nil { fmt.Errorf("sadd operation is failed. error info: ", err) return } _, err = conn.Do("srem", "payList", "zhangfei") if err != nil { fmt.Errorf("srem operation is failed. error info: ", err) return } name, err1:= redis.String(conn.Do("spop", "payList")) if err1 != nil { fmt.Errorf("spop operation is failed. error info: ", err1) return } fmt.Println("the spop get value: ", name) defer conn.Close() }
运行效果: