redis 学习(6)-- 集合类型
redis 学习(6)-- 集合类型
set 结构
- 无序
 - 无重复
 - 集合间操作
 
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 命令来实现。返回所有集合的交集。
一些小建议
- SADD = Tagging (用来存放标签)
 - SPOP/SRANDMEMBER = Random item (用来做一些随机数操作)
 - SADD + SINTER = Social Graph (用来做一些社交关系)
 
redis 学习(6)-- 集合类型的更多相关文章
- 第二百九十八节,python操作redis缓存-Set集合类型,可以理解为不能有重复元素的列表
		
python操作redis缓存-Set集合类型,可以理解为不能有重复元素的列表 sadd(name,values)name对应的集合中添加元素 #!/usr/bin/env python # -*- ...
 - 尚硅谷redis学习4-数据类型
		
redis的数据类型包括String,Hash(类似于JAVA里的map),List,Set,Zset(sorted Set) String(字符串) string是redis最基本的类型,你可以理解 ...
 - Redis之无序集合类型命令
		
Redis 集合(Set) Redis 的 Set 是 String 类型的无序集合.集合成员是唯一的,这就意味着集合中不能出现重复的数据. Redis 中集合是通过哈希表实现的,所以添加,删除,查找 ...
 - Python学习笔记——集合类型
		
集合类型有两种不同的类型——可变集合(set)和不可变集合(frozenset) 可变集合不是可哈希的,不能用作字典的键,也不能用做其他集合中的元素 不可变集合是有哈希值的,能被用做字典的键或者是作为 ...
 - [Google Guava]学习--新集合类型BiMap
		
BiMap提供了一种新的集合类型,它提供了key和value的双向关联的数据结构. Bimap 能非常方便的实现map<key,value>的转置要求,也就是value变为key,key变 ...
 - [Google Guava]学习--新集合类型Multimap
		
每个有经验的Java程序员都在某处实现过Map<K, List<V>>或Map<K, Set<V>>,并且要忍受这个结构的笨拙. 假如目前有个需求是给两 ...
 - [Google Guava]学习--新集合类型Multiset
		
Guava提供了一个新集合类型Multiset,它可以多次添加相等的元素,且和元素顺序无关.Multiset继承于JDK的Cllection接口,而不是Set接口. Multiset主要方法介绍: a ...
 - Scala学习笔记--集合类型Queue,Set
		
补充知识:http://www.importnew.com/4543.html 正文开始 scala.collection.immutable scala.collection.mutable 队列Q ...
 - Swift 学习- 05 -- 集合类型
		
// 集合类型 // swift 提供 Arrays , Sets 和 Dictionaries 三种基本的集合类型用来存储数据 , 数组(Arrays) 是有序数据的集, 集合(Sets)是无序无重 ...
 - StackExchange.Redis 之 Set集合 类型示例
		
话不多说直接上代码: // set添加单个元素 stopwatch.Start(); "); stopwatch.Stop(); Console.WriteLine("set添加单 ...
 
随机推荐
- mysql统计前24小时数据没有补0
			
SELECT t1. HOUR HOUR, COUNT(t2. HOUR) count FROM ( SELECT DATE_FORMAT( HOUR), '%y-%m-%d %H' ) HOUR F ...
 - LeetCode 260. 只出现一次的数字 III(Single Number III)
			
题目描述 给定一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次. 找出只出现一次的那两个元素. 示例 : 输入: [1,2,1,3,2,5] 输出: [3,5] 注意: 结 ...
 - oc中枚举映射字符串技巧
			
后台返枚举数据给app,app需要对不同枚举转换成字符串显示. 一般想到方法用 switch 根据不同枚举变量返回不同字符串,结果就是判断代码写得很长,不优雅.更简便方式有如下: typedef NS ...
 - git add时遇到类似fatal: Path 'XXX' is in submodule 'XXX'错误提示如何解决?
			
答:示例如下: fatal: Pathspec 'Vundle.vim/autoload/vundle.vim' is in submodule '.vim/bundle/Vundle.vim' 解决 ...
 - windows安装python flask虚拟环境
			
安装pipenv的虚拟环境主要是为了防止不同python版本之间冲突的问题,虚拟环境安装的包包不会对外部真实环境产生任何作用,只会作用于虚拟环境.这样,一个flask框架应用对应一个pipenv虚拟环 ...
 - DEDECMS 漏洞汇总
			
日期:2019-08-08 10:20:28 更新: 作者:Bay0net 介绍: 0x01.组合拳拿 shell 漏洞版本:v5.5 - v5.7 前台任意用户密码重置 首先注册一个账户,账户名为 ...
 - kubernetes学习:CKA考试认证(二)
			
1. 它题的意思是 在 development 名称空间里面 找到名为 baz的 service 然后通过这个service的selector 找出 对应的pod . 要用 kubectl des ...
 - 使用gimp画线、矩形、圆等
			
使用gimp画线.矩形.圆等 https://blog.csdn.net/tody_guo/article/details/7628508 2012年06月03日 19:08:47 Tody Guo ...
 - on namespace ceilometer.$cmd failed: Authentication failed.  问题处理方案
			
on namespace ceilometer.$cmd failed: Authentication failed. UserNotFound: Could not find user ceilom ...
 - linux常用命令(8)cat命令
			
cat命令的用途是连接文件或标准输入并打印.这个命令常用来显示文件内容,或者将几个文件连接起来显示,或者从标准输入读取内容并显示,它常与重定向符号配合使用. 1 命令格式:cat [选项] [文件]. ...