Redis有6大基本类型,分别是字符串(String)、列表(List)、集合(set)、哈希结构(hash)、有序集合(zset)和基数(HyperLogLog)
redis在线体验地址:http://try.redis.io/
有序集合(ZSet)
介绍:
Redis的有序集合和集合一样是一个简单的字符串集合,但该集合是有序的,且集合内的元素都是唯一的,也就是集合内不会出现重复元素,与集合唯一不同的是,有序集合中每一个元素都有一个double类型的score属性,Redis通过score的大小对元素进行排序的。有序集合中元素不能重复,但是元素的score值可以重复。
常用于做排行榜功能。
Redis中的集合是通过哈希表来实现的,所以获取集合中元素的时间复杂度为O(1)。
创建缓存
-
创建一个集合缓存,为集合新增元素
-
命令格式:
zadd key score member [score member ...]
-
🌰
zadd zk1 1 c 1 cc 1 ccc 2 cccc --- 创建有序集合zk1,元素为: key: c, score: 1 key: cc, score: 1 key: ccc, score: 1 key: cccc, score: 2
-
-
创建一个元素或修改元素的score值(一次只能修改一个元素)
-
命令格式:
zincrby key increment member
-
🌰
zincrby zk1 1 cc --- 1. 为集合zk1的元素cc的score进行+1操作 2. 若集合zk1不存在,则创建 3. 若元素cc不存在,则创建,且cc的score为1
-
查询缓存
-
查询缓存中元素个数
-
命令格式:
zcard key
-
🌰
zcard zk1 --- 查询集合zk1内的元素总个数
-
-
查询集合指定范围的元素
-
命令格式:
zrange key start stop [withscores]
-
🌰
1. 返回元素名称 zrange zk1 0 1 --- 返回集合zk1中从下标0到下标1的元素名称,start和stop都是从0开始 2. 返回元素和元素score zrange zk1 0 -1 withscores --- 返回集合zk1中全部元素的名称和分数 member1 score1 member2 score2 ★常用于查询排行榜及分数
-
-
查询集合中某元素的下标(下标从0开始)
-
命令格式:
zrank key member
-
🌰
zrank zk1 c --- 返回元素c在集合zk1中的下标
-
-
查询集合中某元素的分数
-
命令格式:
zscore key member
-
🌰
zscore zk1 c --- 查询集合zk1中元素c的分数 ★常用于点赞数类别查询等
-
-
查询集合中指定范围的元素,按照score从大到小排序
-
命令格式:
zrevrange key start stop [withscores]
-
🌰
zrevrange zk1 0 3 withscore --- 返回集合zk1中从1~4位元素,按照score从大到小
-
-
查询集合中某元素的排名
-
命令格式:
zrevrank key member
-
🌰
zrevrank zk1 c --- 返回元素c在集合zk1中的排名 ★常用于名次查询
-
-
查询指定分数范围内的元素,可分页
-
命令格式:
zrevrangebyscore key maxScore minScore [withscores] [limit offset count]
-
🌰
zrevrangebyscore zk1 3 2 withscores limit 0 1 --- 分页返回集合zk1中分数从2~3的元素
-
-
查询指定成员区间内的成员
-
命令格式:
zrangebylex key minChar maxChar [limit offset count]
-
🌰
zrangebylex zk1 - (c1 limit 0 12 --- 返回从第一个元素到元素c1之间的位置
指令 是否必须 说明 ZRANGEBYLEX 是 指令 key 是 有序集合键名称 minChar 是 字典中排序位置较小的成员,必须以”[“(包含)开头,或者以”(“(不包含)开头,可使用”-“代替,"-"表示取最小值 maxChar 是 字典中排序位置较大的成员,必须以”[“(包含)开头,或者以”(“(不包含)开头,可使用”+”代替,"+"表示取最大值 limit 否 返回结果是否分页,指令中包含LIMIT后offset、count必须输入 offset 否 返回结果起始位置 count 否 返回结果数量
-
-
查询指定分数区间内的元素数
-
命令格式:
zcount key min max
-
🌰
zcount zk1 1 2 --- 返回score值为1~2的所有元素总数 ★计算排行榜中某一分数区间的数量
-
-
查询指定元素区间内的元素总数
-
命令格式:
zlexcount key min max
-
🌰
zlexcount zk1 (c [cccc --- 查询c~cccc之间的元素总数,不包括c,但包括cccc
-
移除缓存元素
-
移除集合中指定的元素
-
命令格式:
zrem key member [member ...]
-
🌰
zrem zk1 cc c1 --- 移除集合zk1中的元素cc、c1
-
-
移除指定元素区间的所有成员
-
命令格式:
zremrangebylex key min max
-
🌰
zremrangebylex zk1 [c (ccc --- 移除集合zk1中元素c到元素ccc之间的所有成员,包括c,但不包括ccc
-
-
移除指定排名区间所有成员
-
命令格式:
zremrangebyrank key start stop
-
🌰
zremrangebyrank zk1 0 1 --- 移除集合zk1中0~1下标的所有元素
-
-
移除指定分数区间所有成员
-
命令格式:
zremrangebyscore key min max
-
🌰
zremrangebyscore zk1 0 1 --- 移除集合zk1中score值为0~1的所有元素
-
特殊操作
-
计算多个集合的并集,并存入新的集合
-
命令格式:
zunionstore destinationKey numkeys key[key ...]
-
🌰
zunionstore zku 2 zk1 zk2 --- 合并集合zk1和zk2,将并集存入zku,集合zku中元素的score为所有参与计算的集合中相同的元素的score之和
-