一、String数据类型
1.1string数据类型概述
- string是redis最基本的类型,最大存储512MB的数据,string类型是二进制安全的,即可以存储任何数据(数字、图片等)
1.2set、get、append、strlen
127.0.0.1:6379>set school zhang //修改school键值为zhang
127.0.0.1:6379> get school //获取school键值
"zhang"
- 修改、获取键值
set key value:修改键值
get key:获取键值
- 追加键值
append key value //追加键值,并返回追加后的长度
127.0.0.1:6379> append school "san"
(integer) 8
- 判断改建是否存在,存在返回1,否则返回0
exists home
127.0.0.1:6379> exists home
(integer) 0
127.0.0.1:6379> exists sl
(integer) 1
127.0.0.1:6379> exists sll
(integer) 0
- 改键并不存在,因此append命令返回当前value的长度
append home “cat”
- 该键已经存在,因此返回追加后value的长度
append home “dog”
- 通过get命令获取改键,以判断append的结果
get home
- 获取指定key键的长度
strlen mykey
127.0.0.1:6379> exists sl //判断该键是否存在,存在返回1,否则返回0
(integer) 1
127.0.0.1:6379> append class "hello" //该键并不存在,因此append命令返回当前Value的长度并创建
(integer) 5
127.0.0.1:6379> append class "world" 该键已经存在,因此返回追加后value的长度
(integer) 10
127.0.0.1:6379> get class //通过get命令获取改键,以判断append的结果
"helloworld"
127.0.0.1:6379> set class "how are you" //通过set命令为键设置新值,并覆盖原有值
OK
127.0.0.1:6379> get class
"how are you"
127.0.0.1:6379> strlen class //获取指定key的字符长度
(integer) 11
1.3incr、decr、incrby、decrby
- key值递增加1,key值必须为整数
incr key
- key值递减1,key值必须为整数
decr key
127.0.0.1:6379> set class 10
OK
127.0.0.1:6379> get class //获取class的值
"10"
127.0.0.1:6379> incr class //class键值加1
(integer) 11
127.0.0.1:6379> incr class //class键值加1
(integer) 12
127.0.0.1:6379> incr class //class键值加1
(integer) 13
127.0.0.1:6379> decr class //class键值减1
(integer) 12
127.0.0.1:6379> decr class //class键值减1
(integer) 11
127.0.0.1:6379> get class
"11"
- 无法对于非整数进行操作
set class 0.1 //修改class键值为0.1
- 无法对于字符串进行操作
127.0.0.1:6379> set sfp hello //修改sfp的键值为hello
- 键增加指定的整数
incrby key increment
- 键减少指定的整数
decrby key decrement
127.0.0.1:6379> set class 10 //修改键值为10
OK
127.0.0.1:6379> incrby class 10 //class键增加10
(integer) 15
127.0.0.1:6379> get class
"15"
127.0.0.1:6379> decrby class 6 //class键递减6
(integer) 9
127.0.0.1:6379> get class
"9"
1.4getset
- 获取key值并返回,同时给key设置新值
getset key value
127.0.0.1:6379> set school 120
OK
127.0.0.1:6379> get school
"120"
127.0.0.1:6379> getset school 0 //选获取school的值为120,在返回值
"120"
127.0.0.1:6379> get school //get重新获取的新值
"0"
1.5setex
- 设置指定key的过期时间为seconds
setex key seconds value
- ttl命令查看指定key的剩余存活时间(秒数),-2表示已经过期,-1表示永不过期
127.0.0.1:6379> setex school 15 hihi //设定school键值hihi过期时间为15S
OK
127.0.0.1:6379> get school
"hihi"
127.0.0.1:6379> ttl school //查询ttl键剩余存活时间为1s
(integer) 1
127.0.0.1:6379> ttl school //ttl命令返回值显示,该key已经过期
(integer) -2
127.0.0.1:6379> ttl school
(integer) -2
127.0.0.1:6379> get school //获取已经过期的key将返回nil
(nil)
127.0.0.1:6379> set sl 1
OK
127.0.0.1:6379> get sl //未设置过期时间的显示值为-1
"1"
127.0.0.1:6379> ttl sl
(integer) -1
1.6setnx
- 不存在键的话执行set操作,存在的话不执行
setnx key value
127.0.0.1:6379> setnx sl 3 //修改sl键值为3,不存在则修改返回值1
(integer) 0
127.0.0.1:6379> setnx sp 2 //修改sp键值为2,不存在则修改返回值1,存在返回0
(integer) 1
127.0.0.1:6379> get sp
"2"
127.0.0.1:6379> setnx sp 5 /修改sp键值为5,不存在则修改返回值1,存在返回0
(integer) 0
127.0.0.1:6379> get sp //获取sp键值为2
"2"
1.7mset、mget、msetnx
- 格式
mset key value [key value ...] //批量设置键-值对
mget key [key ...] //批量获取键值对
msetnx key value [key value ...] //批量设置键值对,都不存在就执行并返回1;只要有一个存在就不执行并返回0
127.0.0.1:6379> mset al 2 al1 3 al2 4 //批量创建al、al1、al2三个键
OK
127.0.0.1:6379> mget al al1 al2 //批量获取al、al1、al2三个键的值
1) "2"
2) "3"
3) "4"
127.0.0.1:6379> msetnx al 5 qq 1 ww 2 //批量设置了qq、ww两个键,因为al键之前他们并不存在,所以msetnx命令执行不成功返回0
(integer) 0
127.0.0.1:6379> mget al qq ww //因为msetnx命令执行不成功,所以qq和ww键未设置成功,返回nil
1) "2"
2) (nil)
3) (nil)
127.0.0.1:6379> msetnx aa 2 bb 3 //批量设置了aa和bb键值,因为之前并不存在,所以msetnx命令执行成功返回1
(integer) 1
127.0.0.1:6379> mget aa bb //成功获取aa和bb键的值
1) "2"
2) "3"
二、List数据类型
2.1List数据类型概述
- 列表的元素类型为string,按照插入顺序排序,在列表的头部或尾部添加元素
2.2lpush、lpushx、lrange
lpush key value [value ...] //在头部(左侧)一次插入列表元素
lpushx key value //键必须存在才能执行,在头部插入元素值并返回列表元素数量
lrange key start stop //取从位置索引start到位置索引stop的所有元素(索引以0开始)
127.0.0.1:6379> lpush class a b c d e f //在class键的值1的位置左侧插入abcdef
(integer) 6
127.0.0.1:6379> lrange class 0 2
1) "f"
2) "e"
3) "d"
127.0.0.1:6379> lrange class 0 -1 //查询整个列表;0:第一个元素;-1:最后一个元素
1) "f"
2) "e"
3) "d"
4) "c"
5) "b"
6) "a"
127.0.0.1:6379> lrange class 0 1000 //仅显示有的元素
1) "f"
2) "e"
3) "d"
4) "c"
5) "b"
6) "a"
127.0.0.1:6379> get class //使用get是无法查询的,需要使用lrange
(error) WRONGTYPE Operation against a key holding the wrong kind of value
127.0.0.1:6379> lpushx class1 8 //在class1键插入元素8,因为键不存在,返回
(integer) 0
127.0.0.1:6379> lrange class1 0 -1
(empty list or set)
127.0.0.1:6379> lpushx class 8 //在左侧插入元素8,返回元素的数量
(integer) 7
127.0.0.1:6379> lrange class 0 -1
1) "8"
2) "f"
3) "e"
4) "d"
5) "c"
6) "b"
7) "a"
2.3lpop、llen
lpop key //移除并返回键的第一个元素,从右往左第一个
llen key //获取表中元素数量
127.0.0.1:6379> lrange class 0 -1 //查询所有元素
1) "8"
2) "f"
3) "e"
4) "d"
5) "c"
6) "b"
7) "a"
127.0.0.1:6379> lpop class //移除并返回键的第一个元素
"8"
127.0.0.1:6379> lrange class 0 -1 //查询所有元素,发现元素8已被移除
1) "f"
2) "e"
3) "d"
4) "c"
5) "b"
6) "a"
127.0.0.1:6379> llen class //在执行lpop命令一次后,链表头部的两个元素已经被移除,此时链表中元素的数量是6
(integer) 6
2.4lrem、lset、lindex、ltrim
lrem key count value //从头部开始删除count个值为value的元素,并返回实际删除数量
127.0.0.1:6379> lpush sl 1 2 3 4 1 2 3
(integer) 7
127.0.0.1:6379> lrange sl 0 -1
1) "3"
2) "2"
3) "1"
4) "4"
5) "3"
6) "2"
7) "1"
127.0.0.1:6379> lrem sl 2 2 //删除sl键2个2
(integer) 2
127.0.0.1:6379> lrange sl 0 -1
1) "3"
2) "1"
3) "4"
4) "3"
5) "1"
127.0.0.1:6379> lrem sl 3 1 //删除sl3个1,返回告知只有2个1并且删除
(integer) 2
127.0.0.1:6379> lrange sl 0 -1
1) "3"
2) "4"
3) "3"
lset key index value //将位置索引为index的元素设置新值value
lindex key index //获取索引为index的元素
ltrim key start stop //仅保留从位置索引start到索引stop的元素
127.0.0.1:6379> lset sl 2 a //将索引2的位置替换成a
OK
127.0.0.1:6379> lrange sl 0 -1 //索引从0开始,所以替换的是第三行
1) "3"
2) "4"
3) "a"
127.0.0.1:6379> lindex sl 2 //获取索引为2的元素
"a"
127.0.0.1:6379> ltrim sl 0 1 //仅保留索引值0-1中间的元素
OK
127.0.0.1:6379> lrange sl 0 -1 //查询所有的元素只剩下索引0-1,三行
1) "3"
2) "4"
2.5linsert
- 在元素pivot的前面(做左)或后面(右)插入新元素value
linsert key before|after pivot value
127.0.0.1:6379> lpush sl a b c d e //准备测试数
(integer) 5
127.0.0.1:6379> linsert sl before a a1 //在a的前面插入新元素a1
(integer) 6
127.0.0.1:6379> lrange sl 0 -1 //查看是否插入成功,从结果看已经插入
1) "e"
2) "d"
3) "c"
4) "b"
5) "a1"
6) "a"
127.0.0.1:6379> linsert sl after e e2 //在e的后面插入新元素e2,从返回结果看已经插入成功
(integer) 7
127.0.0.1:6379> lindex sl 1
"e2"
127.0.0.1:6379> linsert sl after k a //不存在的元素之前或之后插入新元素,linsert命令操作失败,并返回-1
(integer) -1
2.6rpush、rpushx、rpop、rpoplpush
rpush key value [value …] ##在列表的尾部依次插入value
rpushx key value ##key必须存在才可执行,将value从尾部插入,并返回所有元素数量
rpop key ##在尾部弹出(移除)一个元素,并返回该元素
rpoplpush source destination ##在key1的尾部弹出一个元素并返回,将它插入key2的头部
127.0.0.1:6379> rpush sl a b c d //从链表的尾部插入参数中给出的values,插入顺序从右到左依次插入
(integer) 4
127.0.0.1:6379> lrange sl 0 -1 //通过lrange命令可以熟悉rpush在插入多值时的插入顺序
1) "a"
2) "b"
3) "c"
4) "d"
127.0.0.1:6379> rpush sl e //该键已经存在并且包含4个元素,rpush命令执行成功,并将元素e插入到链表的尾部
(integer) 5
127.0.0.1:6379> lindex sl 4 //通过;lindex命令可以看出之前的rpushx命令执行成功,因为索引值为4的元素已经是新元素
"e"
127.0.0.1:6379> rpushx sl1 e //由于sl1键并不存在,因此rpushx命令不会插入数据,其返回值为0
(integer) 0
127.0.0.1:6379> lrange sl 0 -1 //在执行rpop命令前,先看一下sl元素有哪些
1) "a"
2) "b"
3) "c"
4) "d"
5) "e"
6) "e"
127.0.0.1:6379> rpop sl //移除并返回sl键的第一个元素,从右取
"e"
127.0.0.1:6379> lrange sl 0 -1
1) "a"
2) "b"
3) "c"
4) "d"
127.0.0.1:6379> rpoplpush sl sl5 //将sl尾部元素e弹出,同时插入到sl的头部
"d"
127.0.0.1:6379> lrange sl 0 -1 //查看sl在弹出尾部元素后的结果
1) "a"
2) "b"
3) "c"
127.0.0.1:6379> lrange sl5 0 -1
1) "d"
127.0.0.1:6379> rpoplpush sl sl //将source和destination设为同一键,将sl中的尾部元素一到其头部
"c"
127.0.0.1:6379> lrange sl 0 -1 //查看移动结果
1) "c"
2) "a"
3) "b"
三、Hash数据类型(散列类型)
3.1Hash数据类型概述
- Hash用于存储对象。可以采用这样的命名方式(hash格式) :对象类别和ID构成键名,使用字段表示对象的属性,而字段值则存储属性值。
- 如果Hash中包含很少的字段,那么该类型的数据也将仅占用很少的磁盘空间。每一个Hash可以存储4294967295个键值对
3.2hset、hget、hdel、hexists、hlen、hsetnx
hset key field value ##设置键值对;h:哈希数据类型;field:字段
hget key field ##查询键的值
hdel key field [field …] ##删除键中字段名为field的字段,删除成功返回1;不成功返回0
hexists key field #判断键中是否存在字段名为field的字段,若存在返回值为1,不存在返回0
hlen key ###获取键的字段数量
hsetnx key field value ##添加新字段field和值,字段不存在添加成功返回1,字段存在未添加成功返回0
127.0.0.1:6379> hset kl field 1 ##设置kl键字段field的值为1
(integer) 1
127.0.0.1:6379> hget kl field ##查询kl键的字段field的值
"1"
127.0.0.1:6379> hget kl1 field ##kl键中不存在field字段,因此返回nil
(nil)
127.0.0.1:6379> hlen kl ##获取kl键的字段数量;返回2
(integer) 2
127.0.0.1:6379> hexists kl field ##查询kl键内存在字段field,返回1
(integer) 1
127.0.0.1:6379> hexists kl field3 ##查询kl键内不存在字段field,返回0
(integer) 0
127.0.0.1:6379> hdel kl field ##删除kl键的field字段
(integer) 1
127.0.0.1:6379> hget kl field ##查询没有kl键的field字段
(nil)
127.0.0.1:6379> hsetnx kl field1 2 ##kl键字段field1存在,未添加成功返回0
(integer) 0
127.0.0.1:6379> hsetnx kl field 2 ##kl键字段field不存在,添加成功返回1
(integer) 1
3.3hincrby
hincrby key field increment ##指定键的字段自增/自减
127.0.0.1:6379> hincrby kl field 1 ##给kl键的field字段的值加1,返回加后的结果
(integer) 1
127.0.0.1:6379> hincrby kl field 5 ##给kl键的field字段的值加5,返回加后的结果
(integer) 6
127.0.0.1:6379> hincrby kl field -15 ##给kl键的field字段的值减15,返回加后的结果
(integer) -9
3.4hgetall、hkeys、hvals、hmget、hmset
hgetall key ##获取所有键值对
hkeys key ##获取键内所有字段
hvals key ##获取键的字段值
hmget key field [field …] ##获取键指定字段的值
hmset key field value [field value …] ##批量设置键指定字段的值
127.0.0.1:6379> hmset kl field 1 name zhangsan add nj ##修改kl键的field字段值为1,name字段值为zhangsan,add字段值为nj;返回值为字段数量
(integer) 3
127.0.0.1:6379> hgetall kl ##查询所有键值对
1) "field"
2) "1"
3) "name"
4) "zhangsan"
5) "add"
6) "nj"
127.0.0.1:6379> hkeys kl ##获取kl键的所有字段
1) "field"
2) "name"
3) "add"
127.0.0.1:6379> hmget kl field name add age ##获取kl键的字段的值,没有的字段返回nil
1) "1"
2) "zhangsan"
3) "nj"
4) (nil)
127.0.0.1:6379> hvals kl ##获取kl键的字段值
1) "1"
2) "zhangsan"
3) "nj"
127.0.0.1:6379> hkeys kl ##获取kl键的所有字段
1) "field"
2) "name"
3) "add"
127.0.0.1:6379> hmget kl field name add age ##获取kl键的字段的值,没有的字段返回nil
1) "1"
2) "zhangsan"
3) "nj"
4) (nil)
127.0.0.1:6379> hvals kl ##获取kl键的字段值
1) "1"
2) "zhangsan"
3) "nj"
四、Set数据类型(无序集合)
4.1Set数据类型概述
- 可以使用Redis的Set数据类型跟踪一些唯一性数据,比如访问某一博客的唯一IP地址信息。对于此场景,我们仅需在每次访问该博客时将访问者的IP存入Redis中,Set数据类型会自动保证IP地址的唯一性。
- 充分利用Set类型的服务端聚合操作方便、高效的特性,可以用于维护数据对象之间的关联关系。比如所有购买某一电子设备的客户ID被存储在一个指定的Set中, 而购买另外一种电子产品的客户ID被存储在另外一个Set中,如果此时我们想获取有哪些客户同时购买了这两种商品时,Set的intersections 命令就可以充分发挥它的方便和效率的优势了
4.2sadd、smembers、scare、sismember
sadd key member [member …] ##添加键和元素;若元素已存在不会重复添加
smembers key ##查看指定键的成员
scard key ##查看指定键的元素个数
sismember key member ##判断元素是否存在,存在返回1,不存在返回0
SCARE:元素数量
SISMEMBER:判断该无序集合中成员是否存在
127.0.0.1:6379> sadd kl 1 2 3 4 ##添加kl键的元素1234
(integer) 4
127.0.0.1:6379> sadd kl 1 3 5 6 ## 添加kl键的元素1356,返回值为2,因为13已存在,不会重复添加
(integer) 2
127.0.0.1:6379> smembers kl ##查看指定kl键的成员
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"
127.0.0.1:6379> sismember kl 1 ##查询kl键的元素1,存在返回1
(integer) 1
127.0.0.1:6379> sismember kl 11 ##查询kl键的元素11,不存在返回0
(integer) 0
127.0.0.1:6379> scard kl ##查看kl键的元素个数
(integer) 6
4.3stop、srem、srandmember、smove
spop key [count] ##随机移除键的指定数量的元素,不加数量默认1
srem key member [member …] ##移除键的指定成员
smembers key ##查看指定键的所有成员
srandmember key [count] ##随机返回一个成员
smove source destination member ##可以把无序集合中的元素移动到另一个无须集合
127.0.0.1:6379> sadd kl 1 2 3 4 5 ##添加kl键和元素1 2 3 4 5
(integer) 3
127.0.0.1:6379> srandmember kl 1 ##随机弹出kl键的值,返回5
1) "5"
127.0.0.1:6379> smembers kl ##查询kl键的成员
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"
127.0.0.1:6379> spop kl ##指定kl键弹出1位成员并移除
"2"
127.0.0.1:6379> smembers kl ##查询已移除成员2
1) "1"
2) "3"
3) "4"
4) "5"
5) "6"
127.0.0.1:6379> srem kl 1 2 ##移除kl键的成员1 2 ,其中成员2不存在,只会移除1
(integer) 1
127.0.0.1:6379> smembers kl ##查询已移除成员1
1) "3"
2) "4"
3) "5"
4) "6"
127.0.0.1:6379> smove kl kl1 3 ##移动kl键内的成员3到kl1键内
(integer) 1
127.0.0.1:6379> smembers kl ##查询kl键内已无成员3
1) "4"
2) "5"
3) "6"
127.0.0.1:6379> smembers kl1 ##查询kl1键内已有成员3
1) "3"
五、Sorted Set数据类型(zset、 有序集合)
5.1Sorted Set数据类型概述
- 有序集合,元素类型为Sting, 元素具有唯一 性,不能重复。
- 每个元素都会关联一个double类型的分数score(表示权重),可以通过权重的大小排序,元素的score可以相同。
应用范围:
可以用于一个大型在线游戏的积分排行榜。每当玩家的分数发生变化时,可以执行ZADD命令更新玩家的分数,此后再通过ZRANGE命令获取积分TOP10的用户信息。当然我们也可以利用ZRANK命令通过username来获取玩家的排行信息。最后我们将组合使用ZRANGE和ZRANK命令快速的获取和某个玩家积分相近的其他用户的信息。
Sorted-Set类型还可用于构建索引数据。
5.2zadd、zcard、zcount、zrem、zincrby、zscore、zrange、zrank
zadd key [NX|XX] [CH] [INCR] score member [score member …] ##添加指定键的成员的分数
zcard key ##返回指定键的成员数量
zcount key min max ##返回符合筛选权重的成员数量
zrem key member [member …] ##指定删除1个/多个成员,返回实际删除的数量
zincrby key increment member ##指定自增分数,返回该成员更新后的分数;初始分数为0
zscore key member ##查询指定的成员分数,返回值为字符串形式
zrange key start stop [WITHSCORES] ##查询键指定位置的成员和分数;0:第一个;-1:最后一个;withscores:返回的结果中包含每个成员及其分数,否则值返回成员
zrank key member ##查询键指定成员的索引
127.0.0.1:6379> zadd kl 1 zs ##添加kl键的zs的分数为1
(integer) 1
127.0.0.1:6379> zadd kl 2 ls 3 qt ##可以批量添加
(integer) 2
127.0.0.1:6379> zrange kl 0 -1 ##查询kl键的成员
1) "zs"
2) "ls"
3) "qt"
127.0.0.1:6379> zrange kl 0 -1 withscores ##查询kl键的成员和分数
1) "zs"
2) "1"
3) "ls"
4) "2"
5) "qt"
6) "3"
127.0.0.1:6379> zrank kl zs ##返回kl键zs成员的索引
(integer) 0
127.0.0.1:6379> zcard kl ##返回kl键的成员数量
(integer) 3
127.0.0.1:6379> zcount kl 1 3 ##返回kl键的分数符合1≤score≥3的成员数量
(integer) 3
127.0.0.1:6379> zrem kl 1 zs 2 wq ##指定删除2个成员,2不存在,返回实际删除的数量1
(integer) 1
127.0.0.1:6379> zscore kl qt ##查看指定成员的分数,返回字符串3
"3"
5.3zrange by score、zrem range byrank、zrem range by score
zrangebyscore key min max [WITHSCORES] [LIMIT offset count] ##获取分数满足表达式的成员
zrangebyscore key min max [WITHSCORES] [LIMIT offset count] ##指定分数范围删除
zremrangebyrank key start stop ##删除满足范围位置索引
127.0.0.1:6379> zrangebyscore kl 1 2 ##获取分数满足表达式1 <=score <= 2的成员
1) "one"
2) "two"
127.0.0.1:6379> zrangebyscore kl (1 2 ##获取分数满足表达式1 <score <= 2的成员
1) "two"
127.0.0.1:6379> zrangebyscore kl -inf +inf limit 2 3 ##-inf:第一 个成员(位置索引值最低的,即0),+inf:最后一个成员(位置索引值最高的),limit后面的参数用于限返回成员的值,2表示从位置索引等于2的成员开始,取后而3个成员
1) "there"
2) "four"
3) "five"
127.0.0.1:6379> zrangebyscore kl 1 2 ##删除分数满足表达式1 <= score <=2的成员,并返回实际删除的数量
1) "one"
2) "two"
127.0.0.1:6379> zremrangebyrank kl 0 1 ##删除位置索引满足表达式0 <= rank <= 1的成员
(integer) 2
127.0.0.1:6379> zrange kl 0 -1 ##查询已删除成功
1) "there"
2) "four"
3) "five"
4) "six"
5) "seven"
5.4zrevrange、zrevrangebyscore、zrevrank
zrevrange key start stop [WITHSCORES] ##以位置索引从高到低的方式获取并返回此区间内的成员
zrevrank key member ##输出指定成员的位置/索引
zrevrangebyscore key max min [WITHSCORES] [LIMIT offset count] ##基于分数/权重,并在满足的范围内排序,默认从大到小
127.0.0.1:6379> zadd kl 1 one 2 two 3 three 4 four
(integer) 4
127.0.0.1:6379> zrevrange kl 0 -1 withscores ##返回kl键的索引的成员和分数,从高到低排队
1) "four"
2) "4"
3) "three"
4) "3"
5) "two"
6) "2"
7) "one"
8) "1"
127.0.0.1:6379> zrevrange kl 1 3 ##由于是从高到低的排序,所以位置等于0的是four,1是three, 并以此类推
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> zrevrank kl two ##由于是从高到低的排序,所以two的位置/索引下标是2
(integer) 2
127.0.0.1:6379> zrevrangebyscore kl 3 1 ##kl键获取分数满足1≤score≥3,并从高到低输出
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> zrevrangebyscore kl 4 0 limit 1 2 ##zrevrangebyscore命令支持limit选项,其含义等同于zrangebyscore中的该选项,只是在计算位置时按照相反的顺序计算和获取。
1) "three"
2) "two"