Set(集合特点)
1.集合中元素是无序的
2.集合中的元素不可以重复
SADD key member(注意这个key,必须是你自定义名字,不能用key)
SMEMBERS key-查询所有的key中的值
spop key [count]不写的时候,随机去删除一个,写的时候,写几个我就去删除几个
SMOVE source destination member。把member从source中删除再移动到destination中(假如移动到元素在source中不存在,此时返回0表示移动失败)
SREM key member删除1个或多个member
集合间操作交集(inter 和数学上的一样),并集(union),差集(diff)
SINTERSTORE交集,并把交集存储到一个key中
SUNIONSTORE并集,把并集存储到一个key中
SDIFFSTORE-差集,存储差集(注意那个在左边,他的差集,就是从他现有的位置做差集)
set内部编码:
intset(整数集合)
为了节省空间,做的特定优化,元素均为整数,且元素个数不是很多的情况下。
hashtable(哈希表)
set应用场景:用set保存用户的标签
1.set方便算交集,易找到两个用户之间的公共标签
2.计算用户间的共同好友
3.用set统计UV
PV -page view用户每次访问服务器,每次都会产生一个PV
UV -user view每个用户访问服务器,都会产生一个UV
ZSET-有序集合(升序/降序)
排序的规则:引入的score浮点类型,按照分数大小进行升序/降序排序,使用zadd往有序结合中添加元素和分数
ZADD key score memeber(不加NX|XX选项时,member不存在,会达到新member的效果
XX:只更新当前已经存在,NX:只添加新的,老的不去处理
CH:描述返回值,返回什么信息(包括修改的个数,影响zadd返回值)
ZINCRBY key score members-针对key的元素的分数+score
ZSET-内部跳表(内部升序排列)如果分数相同则会按照元素字符串的字典序
set list添加都是O(1)但是zset添加则需要Olog(N)(因为有顺序)
redis内部存储数据的时候,按二进制方式存储的,这也意味着redis服务器并不负责字符编码
由于这里我们存储的是汉字,他是由二进制存储的,所以会\x...
redis-cli --raw(使用字符集utf-8编码方式而不是ac码)
ZCARD key-获取一个元素的个数
ZCount查找指定score区间,元素的个数(两个闭区间)
开区间的设置方法
zcount key (95,(97
zset内部会记录当前每个元素的排行次序,max -min这种
inf无穷大
-inf负无穷大
ZRANGE key start stop [with score]-按照分数的升序排列
ZREVRANGE-按照分数的降序排列
ZRANGEBYSCORE-按照分数区间,来去查找元素。
ZPOPMAX--删除并且返回分数最高的count个元素
分数是主要因素,如果分数相同则按照字典序,调用的是通用删除函数,但是其实也可以把最后一个元素标记,直接去尾删(官方针对这个没去优化,使用的次数较少)
BZPOPMAX key [timeout]-实现类似于阻塞队列的效果
zpopmin删除有序集合中最小的元素
BZPOPMIN key删除最小元素(阻塞版本)
ZRANK获取指定元素排名
ZREVRANK-获取指定元素的排名,从后往前数
ZSCORE查询指定元素的分数
ZREM key member 移除对应元素
ZREMRANGEBYSCORE-按照指定分数区间去删除
ZINCRBY 针对元素的分数进行增加
集合间运算
inter:交集
union:并集
diff:差集
ZINTERSTORE进行交集运算后,存储在一个key中
后面的参数:
[weight]权重 aggregate <sum(用于描述分数,默认是用它,作用是求和,下图的分数,是两个key中分数求和后的分数)|MIN|MAX>
其中的最小值,最大值也同理,就不举例了
ZUNIONSTORE :获取其中并集,然后存储到key 中