您的位置:首页 > 数据库 > Redis

Redis 有序集合(sorted set)

2016-01-21 16:17 288 查看

Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。

不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。

有序集合的成员是唯一的,但分数(score)却可以重复。

集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)

require 'redis'

redis = Redis.new

#向 redis 的有序集合中添加了值并关联上分数
p redis.zadd('zset',1,'redis')
p redis.zadd('zset',2,'mongodb')
p redis.zadd('zset',3,'mysql')
p redis.zadd('zset',3,'mysql') #不允许重复
p redis.zadd('zset',4,'mysql') #不允许重复
p redis.zadd('zset',3,'sqlserver')
p redis.zadd('zset',1,'zadd')
p redis.zadd('zset',1,'zcount')
p redis.zadd('zset',2,'zcard')

#获取有序集合的成员数
p redis.zcard('zset')

#计算在有序集合中指定区间分数的成员数
p redis.zcount('zset',0,1)

#有序集合中对指定成员的分数加上增量
p redis.zincrby('zset',1,'redis')
p redis.zrange('zset',0,10)

#score>=2 and <3的元素个数
p redis.zcount('zset','2','(3')
#score >2
p redis.zcount('zset','(2','+inf')

#通过索引区间返回有序集合成指定区间内的成员
p redis.zrange('zset',0,-1)
p redis.zrange('zset',1,2)
p redis.zrange('zset',0,-1,:with_scores=>true)

#score>=2 and <3
p redis.zrangebyscore('zset',2,'(3')
#score>=0
p redis.zrangebyscore("zset", "0", "+inf", :limit => [0, 2])
#score>2
p redis.zrangebyscore('zset','(2','+inf',:with_scores=>true)

#返回有序集合中指定成员的索引
p redis.zrank('zset','redis')
#返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序
p redis.zrevrank('zset','redis')

#移除有序集合中的一个或多个成员
p redis.zrem('zset','zadd')
p redis.zrem('zset',['zcount','redis'])
#删除前3个元素
p redis.zremrangebyrank('zset',0,2)
#删除最后3个元素
p redis.zremrangebyrank('zset',-2,-1)
#删除score>=2 and <4 的元素
redis.zremrangebyscore("zset", "2", "(4")

#按score从大到小排序
p redis.zrevrange('zset',0,-1)
p redis.zrevrange('zset',0,-1,:with_scores=>true)
#score<4 and >=2 倒序排
p redis.zrevrangebyscore('zset','(4','2')

#迭代有序集合中的元素
p redis.zscan('zset',0)
p redis.zscan_each('zset').to_a

#返回有序集中,成员的分数值
p redis.zscore('zset','redis')
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: