redis学习篇(五)-----set类型和sorted set类型及相关操作
2016-08-07 00:00
459 查看
Set类型
Set数据类型是一种无序集合,在Redis内部通过HashTable实现,查找和删除元素的时间复杂度为O(1)。Set数据类型的优点是快速查找元素是否存在,用于记录一些不能重复的数据。例如,在网站注册账号名不能重复,使用Set记录注册用户,如果注册的用户名已经存在于Set中,则拒绝此次用户注册。
Set类型支持的命令如下:
Set类型通常用于记录做过某些事情。例如在某些投票系统中,每个用户每天只能投票一次,那么可以使用Set来记录某个用户的投票情况,只需要以日期作为Set的key,将此用户的ID作为member即可。当以今天的日期作为key查找Set中某用户的ID是否存在,就知道该用户今天是否已经投过票。
Sorted Set类型
Sorted Set类型与Set类型相似,都是String类型元素的集合,不同的是Sorted Set属于有序集合,通过一个double类型的正数score进行排序。Sorted Set通过SkipList(跳跃表)和HashTable组合完成。SkipList负责排序功能,而HashTable负责保存数据。
因为Sorted Set是排序的Set,所以Set能做的事情Sorted Set也可以完成。而Sorted Set还可以完成一些Set不能完成的事情。例如,使用Sorted Set构建一个具有优先级的队列,这也是List类型不能实现的。
sorted set类型支持的操作类型如下:
Sorted Set类型在Web应用中非常有用。例如排行榜中按顶贴次数排序,方法是将排序的值设置成Sorted Set的score值,将具体数据设置成相应的value,用户每次按"顶贴"按钮时,只需执行zadd命令修改score的值。
Set数据类型是一种无序集合,在Redis内部通过HashTable实现,查找和删除元素的时间复杂度为O(1)。Set数据类型的优点是快速查找元素是否存在,用于记录一些不能重复的数据。例如,在网站注册账号名不能重复,使用Set记录注册用户,如果注册的用户名已经存在于Set中,则拒绝此次用户注册。
Set类型支持的命令如下:
--sadd key member [member1..] -- 添加一个String元素到key对应的set集合中,成功返回1,如果元素在集合中已存在,返回0。key对应的set不存在则返回错误。 --srem key member -- 从key对应的set中移除指定元素,成功返回1。当指定元素不存在时返回0。如果key对应的不是set类型则返回错误。 --spop key [count] -- 从key对应的set中随机弹出count个元素,count默认为1,为0不弹出,count为负数时返回错误。set为空时返回nil,否则返回 pop出的元素。 --srandmember key [count] -- 同pop,随机从set中取count个元素,默认为1,但是不删除 如果 count 为正数,且小于集合基数,那么命令返回一个包含 count 个元素的数组,数组中的元素各不相同。如果count大于等 于集合基数,那么返回整个集合。 如果 count 为负数,那么命令返回一个数组,数组中的元素可能会重复出现多次,而数组的长度为 count 的绝对值。 --smove fromkey tokey member -- 从fromkey对应的set中将member移到tokey对应的set中,成功返回1。member不存在时返回0,key对应的不是set返回错误。 --scard key -- 返回key对应的set中元素的个数。key不存在返回0。key对应的不是set返回错误。 --sismember key member -- 判断member是否在key对应的member中,存在返回1,不存在或者set不存在,返回0。key对应的不是set返回错误。 --sinter key [key1...] -- 返回所有给定key对应set的交集,没有返回空。若只有一个key,则返回key对应set中所有的值。若key对应不是set,返回错误。 --sinterstore tokey key [key1..] -- 同sinter,但是会将结果保存在tokey对应的值中。此操作会重新赋值tokey对应的数据,如果key,key1等没有交集,则删除 tokey对应数据。 --sunion key [key1...] -- 同sinter,只是取的是并集。 --sunionstore key [key1...] -- 同sinterstore,只是取的是并集。 --sdiff key [key1...] -- 同sinter,只是求key对[key1..]等对应set的差集。 --sdiffstore key [key1...] -- 同sinterstore,只是求key对[key1..]等对应的差集。 --smembers key -- 返回key对应set中所有的member,结果是无序的。
Set类型通常用于记录做过某些事情。例如在某些投票系统中,每个用户每天只能投票一次,那么可以使用Set来记录某个用户的投票情况,只需要以日期作为Set的key,将此用户的ID作为member即可。当以今天的日期作为key查找Set中某用户的ID是否存在,就知道该用户今天是否已经投过票。
Sorted Set类型
Sorted Set类型与Set类型相似,都是String类型元素的集合,不同的是Sorted Set属于有序集合,通过一个double类型的正数score进行排序。Sorted Set通过SkipList(跳跃表)和HashTable组合完成。SkipList负责排序功能,而HashTable负责保存数据。
因为Sorted Set是排序的Set,所以Set能做的事情Sorted Set也可以完成。而Sorted Set还可以完成一些Set不能完成的事情。例如,使用Sorted Set构建一个具有优先级的队列,这也是List类型不能实现的。
sorted set类型支持的操作类型如下:
--zadd key score member [[score member] [score member]..] -- 将一个或多个member元素及其score值加入到有序集key当中。如果某个member已经是有序集的成员,那么更新这个member的 score值,并通过重新插入这个member元素,来保证该member在正确的位置上。score值可以是整数值或者双精度浮点数。如果 key不存在,则创建一个空的有序集并执行zadd操作。当key存在但对应值不是有序集的时候返回一个错误。 --zscore key member -- 返回有序集key中member的score值。当member不存在时返回nil。 --zcard key -- 当key存在且是有序集的时候,返回有序集的基数。当key不存在时返回0。当key存在但不为有序集的时候返回一个错误。 --zcount key min max -- 返回key对应有序集score在min与max之间(包括min与max)的成员数量。 --zincrby key increment member -- 为有序集key的成员member的score值增加increment,可以是负数。当key不存在或者member不是有序集key的member时,该 操作相当于zadd。 --zrange key start end [withscores] -- 返回有序集key给定区间内的成员,成员按score由小到大排序排列。score相等的按照字典序来排列。当start大于end时返回一个 空列表。如果使用withscores选项,则score将会与结果一起返回。 --zrevrange key start end [withscores] -- 与zrange命令相似,只是按照score降序排列。 --zrangebyscore key min max [withscores] [LIMIT offset count] -- 返回有序集key中,所有score介于min与max之间(默认包括min与max,当采用开区间时使用"(score" )的成员,按照score从小 到大的顺序排序。具有相同score的成员按照字典序来排列(该属性是有序集提供的,不需要额外计算)。如果加上withscores则 score与结果同时返回。可选的limit参数指定返回结果的数量及区间(类似sql中的limit offset,count),当offset很大时, 定位offset操作可能需要遍历整个有序集。此过程最坏时间复杂度为O(n)。 --zrevrangebyscore key min max [withscores] [LIMIT offset count] -- 与zrangebyscore类似,只是按照score从大到小排列 # min和max可以是-inf和+inf,这样一来,就可以在不知道最大最小score的情况下使用zrangebyscore --zrank key member -- 返回有序集中member的排名,有序集成员按照score从小到大的顺序排列。score以0为底。如果member不是有序集key的成员, 返回nil。 --zrevrank key member -- 与zrank类似,只是排名顺序为按照score从大到小的顺序排列。 --zrem key member [member..] -- 移除有序集key的成员member。成功返回移除member的数量。当member不存在时返回0。 --zremrangebyrank key start end -- 移除有序集key中,指定排名rank区间内的所有成员。区间为start与end(包含start和end),都是以0为底,-1表示最后一个, 返回删除成员的数量。 --zremrangebyscore key min max -- 移除有序集中key中所有score介于min和max之间的成员,默认包含min于max,开区间则用"(min (max"。返回删除成员的数量。 --zinterstore tokey numkeys key1 [key2..] [WEIGHTS weight1 [weight2]..] [AGGREGATE sum|min|max]-- 计算给定的一个或多个有序集的交集,其中给定key的数量必须是numkeys的数量,并将结果保存在tokey中。默认情况下,score是 各个有序集的score之和。 [WEIGHTS] 使用WEIGHTS选项,你可以为每个给定有序集分别指定一个乘法因子(multiplication factor)。每个给定有序集的所有成员的 score值在传递给聚合函数(aggregation function)之前都要先乘以该有序集的因子。如果没有指定,则默认为1。 [AGGREGATE] 使用AGGREGATE选项,你可以指定并集的结果集的聚合方式。默认使用的参数SUM ,可以将所有集合中某个成员的score值之和作为 结果集中该成员的score值;使用参数MIN,可以将所有集合中某个成员的最小score值作为结果集中该成员的score值;而参数MAX 则是将所有集合中某个成员的最大score值作为结果集中该成员的score值。 --zunionstore tokey numkeys key1 [key2..] [WEIGHTS weight1 [weight2]..] [AGGREGATE sum|min|max]-- 与zinterstore类似,只是求的是并集。
Sorted Set类型在Web应用中非常有用。例如排行榜中按顶贴次数排序,方法是将排序的值设置成Sorted Set的score值,将具体数据设置成相应的value,用户每次按"顶贴"按钮时,只需执行zadd命令修改score的值。
相关文章推荐
- PHP操作Redis 有序集(Sorted Set) 的相关命令 (三)
- PHP操作Redis 有序集(Sorted Set) 的相关命令 (三)
- Redis初探06——Redis的有序集合sorted set类型及操作
- 5.Redis学习-set数据类型操作
- redis 学习手册之有序集合数据类型sorted-sets操作
- golang-redis之sorted set类型简单操作
- redis: sorted set数据类型与操作
- Redis学习第五课:Redis Set类型及操作
- Redis学习篇(五)之Set类型及其操作
- 【Redis学习】:sortedset数据类型详解
- 系统学习redis之六——redis数据类型之set数据类型及操作
- JAVAWEB开发之redis学习(四)——Set集合相关的操作命令
- 跟我学Redis(8)—sorted set类型及操作
- Redis----sorted set数据类型操作
- Redis学习第五课:Redis Set类型及操作
- Redis数据类型操作(五) —— Sorted Set
- 三:redis的List类型相关操作
- NoSQL之Redis对set(集合)数据类型的操作之二
- Redis学习手册(Sorted-Sets数据类型)
- 二:redis 的hash类型相关操作