redis 学习(6)-- 集合类型

set 结构

  1. 无序
  2. 无重复
  3. 集合间操作

set 集合内操作

命令 含义
sadd key memebr1 [member2...] 向集合中添加一个或多个成员
srem key member1 [member2...] 从集合中删除一个或多个成员
scard key 获取集合中的元素个数
sismember key member 判断member元素是不是集合的成员
srandmember key count 随机从集合中取出count个成员
spop key 随机移除并返回集合中的一个成员
smembers key 获取集合中的所有成员。时间复杂度为O(n),不建议使用,类似的操作可以使用SSCAN

演示

实战

抽奖系统

思路:将参与抽奖的用户数放在 set 中,使用 spop 操作随机弹出集合中的一个成员,即为中奖用户。

类似微博中的喜欢,赞,踩功能实现

思路:将用户的操作数保存在集合中。

set 集合间操作

即差集、交集、并集。

命令 含义
sdiff key1 [key2...] 返回给定所有集合的差集
sdiffstore destKey key1 [key2...] 计算给定所有集合的差集,并存入destKey
sinter key1 [key2...] 返回给定所有集合的交集
sinterstore destKey key1 [key2...] 计算给定所有集合的交集,并存入destKey
sunion key1 [key2...] 返回给定所有集合的并集
sunionstore destKey key1 [key2...] 计算给定所有集合的并集,并存入destKey

实战

共同关注的人,同时关注他的人

可以使用 sinter 命令来实现。返回所有集合的交集。

一些小建议

  1. SADD = Tagging (用来存放标签)
  2. SPOP/SRANDMEMBER = Random item (用来做一些随机数操作)
  3. SADD + SINTER = Social Graph (用来做一些社交关系)

redis 学习(6)-- 集合类型的更多相关文章

  1. 第二百九十八节,python操作redis缓存-Set集合类型,可以理解为不能有重复元素的列表

    python操作redis缓存-Set集合类型,可以理解为不能有重复元素的列表 sadd(name,values)name对应的集合中添加元素 #!/usr/bin/env python # -*- ...

  2. 尚硅谷redis学习4-数据类型

    redis的数据类型包括String,Hash(类似于JAVA里的map),List,Set,Zset(sorted Set) String(字符串) string是redis最基本的类型,你可以理解 ...

  3. Redis之无序集合类型命令

    Redis 集合(Set) Redis 的 Set 是 String 类型的无序集合.集合成员是唯一的,这就意味着集合中不能出现重复的数据. Redis 中集合是通过哈希表实现的,所以添加,删除,查找 ...

  4. Python学习笔记——集合类型

    集合类型有两种不同的类型——可变集合(set)和不可变集合(frozenset) 可变集合不是可哈希的,不能用作字典的键,也不能用做其他集合中的元素 不可变集合是有哈希值的,能被用做字典的键或者是作为 ...

  5. [Google Guava]学习--新集合类型BiMap

    BiMap提供了一种新的集合类型,它提供了key和value的双向关联的数据结构. Bimap 能非常方便的实现map<key,value>的转置要求,也就是value变为key,key变 ...

  6. [Google Guava]学习--新集合类型Multimap

    每个有经验的Java程序员都在某处实现过Map<K, List<V>>或Map<K, Set<V>>,并且要忍受这个结构的笨拙. 假如目前有个需求是给两 ...

  7. [Google Guava]学习--新集合类型Multiset

    Guava提供了一个新集合类型Multiset,它可以多次添加相等的元素,且和元素顺序无关.Multiset继承于JDK的Cllection接口,而不是Set接口. Multiset主要方法介绍: a ...

  8. Scala学习笔记--集合类型Queue,Set

    补充知识:http://www.importnew.com/4543.html 正文开始 scala.collection.immutable scala.collection.mutable 队列Q ...

  9. Swift 学习- 05 -- 集合类型

    // 集合类型 // swift 提供 Arrays , Sets 和 Dictionaries 三种基本的集合类型用来存储数据 , 数组(Arrays) 是有序数据的集, 集合(Sets)是无序无重 ...

  10. StackExchange.Redis 之 Set集合 类型示例

    话不多说直接上代码: // set添加单个元素 stopwatch.Start(); "); stopwatch.Stop(); Console.WriteLine("set添加单 ...

随机推荐

  1. c源码编译

    #include<stdio.h> #include<math.h> //程序中要调用求平方根函数sqrt int main() { double a,b,c,disc,x1, ...

  2. NDK OpenGLES3.0 开发(五):FBO 离屏渲染

    什么是 FBOFBO(Frame Buffer Object)即帧缓冲区对象,实际上是一个可添加缓冲区的容器,可以为其添加纹理或渲染缓冲区对象(RBO). FBO 本身不能用于渲染,只有添加了纹理或者 ...

  3. linux安装mysql以及修改密码和重启mysql等相关命令

    Linux/UNIX 上安装 MySQL Linux平台上推荐使用RPM包来安装Mysql,MySQL AB提供了以下RPM包的下载地址: MySQL - MySQL服务器.你需要该选项,除非你只想连 ...

  4. SRS之SrsRtmpConn::stream_service_cycle详解

    首先使用 obs 推流符合如下流程:参考自 Hanvision Makito X cann't publish to SRS.. FFMPEG: C/S: Handshake C: ConnectAp ...

  5. Unexpected ConvertTo-Json results? Answer: it has a default -Depth of 2

    Unexpected ConvertTo-Json results? Answer: it has a default -Depth of 2 问题 Why do I get unexpected C ...

  6. Ansible 快速安装配置,常用模块

    Ansible是一个轻量级的工具,基于python语言实现,通过python中的paramiko来连接并管理机器, 功能强大(YAML,PlayBook,模块化功能),不需要安装客户端, 通过ssh连 ...

  7. jxbrowser 实现自定义右键菜单

    https://blog.csdn.net/shuaizai88/article/details/73743691 public static void main(String[] args) { J ...

  8. vue.js-动态绑定class 利用index实现导航

    <template> <div class="stock"> <div class="buin_leftcont nav_ctrl" ...

  9. flutter json转字符串 字符串转json

    一段json字符串 var jsonStr = '{\"errorCode\": \"0\", \"message\": \"成功 ...

  10. Ceph 的用户管理与认证

    目录 文章目录 目录 前言 Ceph 的用户管理 用户管理常规操作 CephX 认证系统 身份认证原理 使用 ceph-authtool 进行密钥环管理 注意事项 前言 常规的身份认证系统无非三点: ...