Redis 数据类型及操作

1. string 类型及操作;

  • 什么是 string 类型
    • 是最简单的类型(一个 key 对应一个 value),是二进制安全的
    • Redis 中的 string 可以包含任何数据,比如 jpeg 格式的图片,或者序列化的对象
    • 从内部实现机制来看,string 是有自己的最大上限的。最大上限是 512 MB
序号命令格式解释
1setset key value设置指定 key 的值
2getget key获取指定 key 的值
3getrangegetrange key start end返回 key 中字符串值得字符集
4getsetgetset key value将给定的 key 值设置为 value,并返回 key 的旧值(old value)
5getbitgetbit key offset对 key 所储存的字符串值,获取指定偏移量上的位(bit)。
6mgetmget key1 [key2…]获取所有(一个或多个)给定 key 的值。
7setbitsetbit key offset value对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)。
8setexsetex key seconds value将值 value 关联到 key ,并将 key 的过期时间设为 seconds (以秒为单位)。
9setnxsetnx key value只有在 key 不存在时设置 key 的值。
10setrangesetrange key offset value用 value 参数覆写给定 key 所储存的字符串值,从偏移量 offset 开始。
11strlenstrlen key返回 key 所储存的字符串值的长度。
12msetmset key value [key2 value2…]同时设置一个或多个 key-value 对。
13msetnxmsetnx key value [key2 value2…]同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在。
14psetexpsetex key milliseconds value这个命令和 setex 命令相似,但它以毫秒为单位设置 key 的生存时间,而不是像 setex 命令那样,以秒为单位。
15incrincr key将 key 中储存的数字值增一。
16incrbyincrby key increment将 key 所储存的值加上给定的增量值。
17incrbyfloatincrbyfloat key increment将 key 所储存的值加上给定的浮点增量值。
18decrdecr key将 key 中储存的数字值减一。
19decrbydecrby key incrementkey 所储存的值减去给定的减量值。
20appendappend key value如果 key 已经存在并且是一个字符串, append 命令将 value 追加到 key 原来的值的末尾。
# 命令演示
## set
set name wdm
#  返回 OK
#  设置一个 key 对应的值为 string 类型的 value 。
#  若设置的 key 存在,则新设置的 value 会把原值覆盖

## get
get name			#  返回 "wdm"。获取 key 对应的 string 类型的值。
get keys			#  返回 (nil)。获取的 key 不存在。

## setnx
setnx name xiaoming	#  返回 (integer) 0
#  设置 key 对应的值为 string 类型的 value。
#  nx = not exist,表示不存在。
#  这里要保证你设置的 key 是不存在的,设置成功返回 (integer) 1。
#  若设置的 key 已经存在,则设置不成功,返回 (integer) 0

## mset
mset key1 xiaohong key2 xiaozhang key3 xiaoxiao	#  返回 OK
#  一次设置一个或多个 key-value 对的值。若设置成功,则返回 OK,失败返回 (integer) 0
get key1			#  返回 "xiaohong"
get key2			#  返回 "xiaozhang"
get key3			#  返回 "xiaoxiao"

## msetnx
msetnx key2 xiaowang key4 xiaozhang	#  返回 (integer) 0
#  一次设置一个或多个 key 的值,成功返回 OK(所有值都设置),失败返回 (integer) 0(所有操作都不会被执行)
get key2			#  返回 "xiaozhang"
get key4			#  返回 (nil)

## getset
get name 			#  返回 "wdm"
getset name www		#  返回 "wdm"
#  将给定的 key 值设置成 value,并返回 key 的旧值。
#  此处已经将 name 的值由 "wdm" 替换成 "www"
#  这里要说明一下,set 是直接覆盖原有的值并返回 OK,而 getset 是覆盖原有值得基础上返回原来的 value 值
#  增删改查操作的“改”,建议用 getset
get name			#  返回 "www"

get key5				#  返回 (nil)
getset key5 sanzhangpi 	#  返回 (nil)
get key5				#  返回 "sanzhangpi"

## mget
mget key1 key2 key6		#  返回:
1) "xiaohong"
2) "xiaozhang"
3) (nil)
#  一次获取多个 key 的值。如果 key 不存在,则返回 (nil)

## setex & psetex
setex haircolor 10 red	#  返回 OK
#  设置一个 key 对应 string 类型的 value,并为这个 key 对应的 value 指定一个有效期(秒为单位)。
#  psetex 和 setex 差不多,区别是 psetex 的有效期是以“毫秒”为单位(1 秒 = 1000 毫秒)。
get haircolor			#   返回 "red"。(10秒内运行代码)
get haircolor			#   返回 (nil)。(10秒后运行代码)

## strlen
get name				#  返回 "www"
strlen name				#  返回 (integer) 3。 取指定 key 的 value 的长度

## setrange
get name				#  返回 "www"
setrange name 1 dm		#  返回  (integer) 3
#  用指定的字符串覆盖给定的 key 所存储的 value 值
#  1 是指从下标 1 的字符开始替换,1 是包含下标 1 的。
#  这个例子里,将“www”的第二个“w”开始替换为“dm”。
get name				#  返回 "wdm"

## getrange
set email huaxx@csdn.net	#  返回 OK
getrange email 5 100		#  返回 "@csdn.net"
#  获取指定 key 的 value 值的子字符串
#  取得时候是从下标 5 开始取得,是包含下标 5 的(下标从 0 开始)
#  下标 100:当下标超出字符串长度的时候,getrange 会默认取到 key 所对应的 value 的最后一位
getrange email -9 -1		#  返回 "@csdn.net"(-9 从右往左取值)

## incr
set age 20		#  返回 OK
incr age		#  返回 (integer) 21
#  incr:对 key 的值 +1 操作。
#  incrby:加指定的值。
#  incrbyfloat:加浮点型值。(会将小数点后无用的 0 忽略掉,如果有需要,会将浮点变为整数)
#  上面三个命令,如果 key 不存在,那么 key 的值首先被初始化为 0,然后再执行 incr 命令
#  如果值包含错误的类型,或者字符串类型的值不是一个数字,则返回错误
get age			#  返回 "21"
incrby age 5	#  返回 (integer) 26
get age			#  返回 "26"

## incrby
incrby key7		#  返回 (error) 
get key7		#  返回 (nil)
incr key7		#  返回 (integer) 1(初始化 key7 为 0,然后+1)
get key7		#  返回 "1"

## incrbyfloat
set myage 20.65			#  返回 OK
incrbyfloat myage 0.25	#  返回 "20.9"

## decr && decrby
get age			#  返回 “26”
decr age		#  返回  (integer) 25
decrby age 10	#  返回  (integer) 15
#  decr:对 key 的值做减减的操作
#  decrby:减指定的值。
#  如果 key 不存在,那么 key 的值首先被初始化为 0,然后再执行 decr 命令

## append
#  给指定的 key 所对应的字符串追加一个 value 值,返回一个新字符串的长度
get name				#  返回 "wdm"
append name @csdn.com	#  返回  (integer) 12
get name 				#  返回 "wdm@csdn.com"

## setbit && getbit
#  格式:setbit key offset value、getbit key offset
#  对 key 所存储的字符串的值获取 / 设置指定偏移量上的 bit
#  在 Redis 中,存储的字符串都是以二进制的形式进行存储的。
#  offset 的学名叫做偏移,二进制中的每一位都是 offset 的值,value 是偏移量。
#  举个例子,a 的 ASCII 码是 97,转化成二进制是 01100001;b 的 ASCII码是 98,二进制为 01100010
#  offset 指的就是每个二进制的值。

set andy a			#  返回 OK
get andy			#  返回 "a"
setbit andy 6 1		#  返回  (integer) 0(修改位置原来存储的 bit 值)
setbit andy 7 0		#  返回  (integer) 1
get andy			#  返回 "b"

2. list 类型及操作;

  • 什么是 list 类型
    • list 是一个链表结构,主要功能是 push、pop、获取一定范围内的所有值等等
    • 操作中,key 可以理解为链表的名字,可以通过 push、pop 操作从链表的头部或者尾部进行添加或者是删除元素
    • 这使得 list 既可以作为栈、也可以作为队列进行操作
序号命令格式解释
1lpushlpush key value将一个或多个值插入到已存在的列表头部
2rpushrpush key value在列表中添加一个或多个值
3linsertlinsert key before / after pivot value在列表的元素前或后插入元素
4lsetlset key index value通过索引设置列表元素的值
5lremlrem key count value移除列表元素
6ltrimltrim key start stop对一个列表进行修剪(trim),列表仅保留指定区域内的元素
7lrangelrange key start stop获取列表中的某一片段
8lpoplpop key移出并获取列表的第一个元素
9rpoprpop key移除并获取列表最后一个元素
10rpoplpushrpoplpush source destination移除列表的最后一个元素,并将该元素添加到另外一个列表并返回
11lindexlindex key index通过索引获取列表的元素
12llenllen key获取列表长度
# 命令演示
## lpush
#  list 链表两端用到的命令(还有 rpush)
#  lpush 是 key 对应的 list 的头部(也就是最左侧)添加字符串元素
lpush mylist world		#  返回  (integer) 1,在 key 为 mylist 的链表中加入 "world"
lpush mylist hello		#  返回  (integer) 2,在 mylist 链表的最左侧加入  "hello"
lrange mylist 0 -1		#  返回
1) "hello"
2) "world"
#  0 为起始位置、即为下标为 0 的元素开始,-1 为一直到最后,也就是最右端
#  总结:一开始插入了一个 "world",然后在 "world" 的头部又插入了一个 "hello"
#  其中 lrange 用来调取 mylist 链表里的内容

## rpush
#  是在 key 对应的 list 的尾部、也就是最右端添加字符串元素
rpush mylist2 hello		#  返回 (integer) 1,在 mylist2 的最右边添加 "hello"
rpush mylist2 world		#  返回 (integer) 2,在 mylist2 的最右边添加 "world"
lrange mylist2 0 -1		#  返回
1) "hello"
2) "world"

## lrange
#  lrange key start stop
#  列表类型最常用的命令之一,它能够获取列表中的某一片段
#  lrange 将返回索引从 start 到 stop 之间的所有元素(包含两端的元素)
#  Redis 列表的起始索引是从 0
#  lrange 也支持负索引,表示从右边开始计算。-1 表示最右边的第一个元素
#  如果 start 的索引位置比 stop 的索引位置要靠后,则会返回一个空列表。
#  如果 stop 大于实际的索引位置,则返回列表最右边的元素
lrange mylist2 0 -1		#  返回
1) "hello"
2) "world"
#  表示获取 mylist2 中下标从 0 开始一直到最右边的所有元素
lrange mylist2 1 0	#  返回 (empty list or set)
#  start 从下标 1 开始,而结束位置是从下标 0 开始,所以返回 empty

## linsert
#  是在 key 对应的 list 的特定位置之前或者之后添加字符串元素
rpush mylist3 one					#  返回 (integer) 1
rpush mylist3 three					#  返回 (integer) 2
linsert mylist3 before three two	#  返回 (integer) 3
lrange mylist3 0 -1					#  返回
1) "one"
2) "two"
3) "three"

## lset
#  设置 list 中指定下标元素的值(下标从 0 开始)
rpush mylist4 one two three		#  返回 (integer) 3
lset mylist4 0 four				#  返回 OK ,one 的下标是 0,one 改成 four
lset mylist4 -2 five			#  返回 OK,two 从右往左数是第二个元素		
lrange mylist4 0 -1				#  返回
1) "four"
2) "five"
3) "three"

## lrem
#  从 key 对应的 list 中删除 count 和 value 相同的元素。
#  当 count > 0 时,按从头到尾的顺序删除
rpush mylist5 one one three four	#  返回 (integer) 4
lrem mylist5 2 one					#  返回 (integer) 2,删除的个数是 2,删除的 value 是 one
lrange mylist5 0 -1					#  返回
1) "three"
2) "four"
#  当 count < 0 时,按从尾到头的顺序删除
rpush mylist6 hello hello world hello 	#  返回 (integer) 4
lrem mylist6 -2 hello 					#  返回 (integer) 2
lrange mylist6 0 -1 					#  返回
1) "hello"
2) "world"
#  当 count = 0 时,会将全部进行删除
rpush mylist7 hello hello world hello 	#  返回 (integer) 4
lrem mylist7 0 hello 					#  返回 (integer) 3
lrange mylist7 0 -1 					#  返回 1) "world"

## lpop
#  从 list 的头部删除元素,并返回被删除的元素
lrange mylist 0 -1	#  返回
1) "hello"
2) "world"
lpop mylist			#  返回 "hello"
lrange mylist 0 -1	#  返回	1) "world"

## rpop
#  从 list 的尾部删除元素,并返回被删除的元素
lrange mylist2 0 -1	#  返回
1) "hello"
2) "world"
rpop mylist2		#  返回 "world"
lrange mylist2 0 -1	#  返回	1) "hello"

## rpoplpush
#  是从第一个 list 尾部移除元素并添加到第二个 list 的头部,最后返回被移除的元素的值
#  如果第一个 list 为空或者不存在,则返回 (nil)
lrange mylist5 0 -1	#  返回 
1) "three"
2) "four"
lrange mylist6 0 -1	#  返回 
1) "hello"
2) "world"
rpoplpush mylist5 mylist6	#  返回 "four",将 mylist5 中最右的 four 移动到 mylist6 中
lrange mylist6 0 -1	#  返回
1) "four"
2) "hello"
3) "world"

## lindex
#  返回名称为 key 的 list 中 index 位置的元素
lrange mylist6 0 -1	#  返回
1) "four"
2) "hello"
3) "world"
lindex mylist6 0	#  返回"four"
lindex mylist6 1	#  返回"hello"
lindex mylist6 2	#  返回"world"

## llen
#  返回 key 对应的 list 的长度
llen mylist6		#  返回 (integer) 3

3. hash 类型及操作;

  • 什么是 hash 类型
    • 是一个 string 类型的 field 和 value 的映射表,特别适用于存储对象
    • 将一个对象存储于 hash 类型中,会占用更少的内存,并且可以更方便的存取整个对象
    • 节省内存的原因是,新建一个 hash 对象,开始用的是 zipmap 来存储,zipmap 并不是 hash table,只有 field 和value 的大小超过一定限制的时候,Redis才会将内部的 zipmap 替换成正常的 hash
序号命令格式解释
1hsethset key field value将哈希表中key中的字段field的值设为value
2hgethget key field获取存储在哈希表中指定字段的值
3hmgethmget key filed1 … fieldN获取所有给定字段的值
4hmsethmset key field1 value1 … fieldN valueN同时设置到哈希表中多个 field
5hincrbyhincrby key filed increment为哈希表 key 中指定字段加上给定值
6hexistshexists key key field查看哈希表 key 中是否存在指定的 key
7hdelhdel key field删除一个或多个哈希字段
8hlenhlen key获取哈希表中字段的数量
9hkeyshkeys key获取所有哈希表中的字段
10hvalshvals key获取哈希表中所有的值
11hgetallhgetall key获取哈希表中指定key的所有字段和值
# 命令演示
## hset
#  格式:hset key field value
#  将哈希表中 key 字段的 field 的值设置成 value。如果 key 不存在,则先创建
hset mycar type bmw		#  返回 (integer) 1

## hget
hget mycar type			#  返回 "bmw"。获取存储在哈希表中指定字段的值

## hmset
#  同时设置多个 field
hmset mycar height 1500 price secret #  返回 OK

## hmget
hmget mycar type height price		#  返回
1) "bmw"
2) "1500"
3) "secret"

## hincrby
#  为哈希表中 key 中指定的 field 加上给定的值
hset mycar power 20		#  返回 (integer) 1
hget mycar power		#  返回 "20"
hincrby mycar power -8 	#  返回 (integer) 12
hget mycar power		#  返回 "12"

## hexists
#  查看指定的 field 是否存在
hexists mycar type		#  返回	(integer) 1
hexists mycar color		#  返回	(integer) 0

## hlen
#  获取哈希表中 field 的数量
hlen mycar		#  返回	(integer) 4

## hkeys
#  获取哈希表中所有的 field
hkeys mycar		#  返回
1) "type"
2) "height"
3) "price"
4) "power"

## hvals
#  获取哈希中所有的 value
hvals mycar		#  返回
1) "bmw"
2) "1500"
3) "secret"
4) "12"

## hgetall
#  获取某个哈希表中所有的 field 和 value
hgetall mycar	#  返回
1) "type"
2) "bmw"
3) "height"
4) "1500"
5) "price"
6) "secret"
7) "power"
8) "12"

## hdel
#  删除一个或多个哈希字段
hdel mycar type		#  返回	(integer) 1

4. sets 类型及操作;

  • 什么是 sets 类型
    • sets 是集合
    • 对于集合的操作有:添加元素、删除元素
    • 也可以对集合进行:求交集、并集、差集
    • 操作中的 key 可以理解为集合的名字
序号命令格式解释
1saddsadd key member1 [member2]向集合中添加一个或多个成员
2sremsrem key member1 [member2]删除集合中一个或多个成员
3smemberssmembers key返回集合中所有成员
4spopspop key移除并返回集合中的一个随机元素
5sdiffsdiff key1 [key2]返回给定所有集合的差集
6sdiffstoresdiffstore destination key1 [key2]返回给定所有集合的差集并存储在 destination 中
7sintersinter key1 [key2]返回给定所有集合的交集
8sinterstoresinterstore destination key1 [key2]返回给定集合的交集并存储在 destination 中
9sunionsunion key1 [key2]返回所有给定集合的并集
10sunionstoresunionstore destination key1 [key2]所有给定集合的并集存储在 destination 集合中
11smovesmove source destination member将 member 元素从 source 集合移动到 destination 集合
12scardscard key获取集合的成员数
13sismembersismember key member判断 member 元素是否都是集合key的成员
14srandmembersrandmember key [count]返回集合中一个或多个随机数
# 命令演示
## sadd
#  向名称为 key 的 sets 中添加 member(重复的元素无法添加)
sadd myset hello	#  返回 (integer) 1
sadd myset world	#  返回 (integer) 1
sadd myset world	#  返回 (integer) 0

## smembers
#  返回 sets 中所有的成员
smembers myset		#  返回
1) "world"
2) "hello"

## srem
#  删除名称为 key 的 sets 中的 member
sadd myset2 one two three	#  返回 (integer) 3
srem myset2 one four		#  返回 (integer) 1
smembers myset2				#  返回
1) "three"
2) "two"

## spop
#  **随机**返回并删除 key 中的一个 member
sadd myset3 one two three 	#  返回 (integer) 3
spop myset3					#  返回 "three"
spop myset3					#  返回 "two"
smembers myset3				#  返回 "one"

## sdiff
#  返回给定的 key 以及第一个 key 的**差集**
smembers myset2		#  返回
1) "three"
2) "two"
smembers myset3		#  返回 
1) "one"
sdiff myset2 myset3	#  返回
1) "three"
2) "two"
#  这里给定的 key 是 myset2,myset2 和 myset3 没有相同的元素,所以返回 myset2 的元素
sadd myset3 two		#  返回 (integer) 1
smembers myset3		#  返回 
1) "two"
2) "one"
smembers myset2		#  返回
1) "three"
2) "two"
sdiff myset2 myset3	#  返回	1) "three"
sdiff myset3 myset2	#  返回	1) "one"

## sdiffstore
#  返回给定的 key 以及第一个 key 的**差集**,并将结果另存另一个 key
smembers myset2		#  返回
1) "three"
2) "two"
smembers myset3		#  返回 
1) "two"
2) "one"
sdiffstore myset4 myset2 myset3	#  返回 (integer) 1
smembers myset4					#  返回 1) "three"

## sinter
#  返回所给定 key 的**交集**
smembers myset2			#  返回
1) "three"
2) "two"
smembers myset3			#  返回 
1) "two"
2) "one"
sinter myset2 myset3	#  返回 1) "two"

## sinterstore
#  返回所给定 key 的**交集**,并将结果存储在另一个 key
smembers myset2						#  返回
1) "three"
2) "two"
smembers myset3						#  返回 
1) "two"
2) "one"
sinterstore myset5 myset2 myset3	#  返回 (integer) 1
smembers myset5						#  返回 1) "two"

## sunion
#  返回所给定 key 的**并集**(一组集合所有元素的集合)
smembers myset2			#  返回
1) "three"
2) "two"
smembers myset3			#  返回 
1) "two"
2) "one"
sunion myset2 myset3	#  返回
1) "three"
2) "one"
3) "two"

## sunionstore
#  返回所给定 key 的**并集**,并将结果存储在另一个 key
smembers myset2						#  返回
1) "three"
2) "two"
smembers myset3						#  返回 
1) "two"
2) "one"
sunionstore myset6 myset2 myset3	#  返回 (integer) 3
smembers myset6						#  返回
1) "three"
2) "one"
3) "two"

## smove
#  将 member 元素 从 source 集合 移动到 destination 集合
smembers myset2				#  返回
1) "three"
2) "two"
smembers myset3				#  返回 
1) "two"
2) "one"
smove myset2 myset7 three	#  返回 (integer) 1
smembers myset2				#  返回 1) "two"
smembers myset7				#  返回 1) "three"

## scard
scard myset2	 #  返回 (integer) 1。返回 key 的元素的个数

## sismember
#  测试 member 是否是名称为 key 的元素
smembers myset2				#  返回 1) "two"
sismember myset2 two		#  返回 (integer) 1
sismember myset2 three		#  返回 (integer) 0

## srandmember
#  随机返回名称为 key 的集合中的一个元素,但是不删除元素
smembers myset3		#  返回 
1) "two"
2) "one"
srandmember myset3	#  返回 "two"。
srandmember myset3	#  返回 "one"。为随机返回

5. zsets 类型及操作。

  • 什么是 zsets 类型
    • 也叫 sorted sets。是 sets 的升级版本。它在 sets 的基础上增加了一个顺序属性。
    • 这一属性在添加修改元素的时候可以指定。每次指定之后 zsets 会重新排序。操作中 key 可以理解为 zsets 的名字。
    • zsets 最常用的使用方式是作为索引来使用。
    • 可以把要排序的字段作为 score 存储,对象的id作为元素存储。
序号命令格式解释
1zaddzadd key score member添加元素到集合,若元素在集合中存在则更新对应的score
2zremzrem key member删除制定元素,1表示成功,如元素不存在则返回0
3zincrbyzincrby key incr member有序集合中对指定成员的score增加对应增量,返回更新后的socre值
4zrankzrank key member返回有序集合中指定成员的索引
5zrevrankzrevrank key member返回有序集合中指定成员的排名,有序集成员按分数值递减排序
6zrangezrange key start end通过索引区间返回有序集合成指定区域内的成员
7zrevrangezrevrange key start end通过索引区间返回有序集合成指定区域内的成员
8zrangebyscorezrangebyscore key min max通过分数返回有序集合制定区间内的成员
9zcountzcount key min max计算在有序集合中指定区间分数的成员数
10zcardzcard key获取有序集合的成员数
11zscorezscore key element返回有序集合中,成员的分数值
12zremrangebyrankzremrangebyrank key min max移除有序集合中给定的排名区间的所有成员
13zremrangebyscorezremrangebyscore key min max移除有序集合中给定的分数区间的所有成员
# 命令演示
## zadd
#  添加元素到集合,若元素在集合中存在,则更新相对应的score
zadd myzset 1 one	#  返回 (integer) 1
zadd myzset 2 two	#  返回 (integer) 1
zadd myzset 3 two	#  返回 (integer) 0。score 以最后一次设置的为准(3)

## zrange
#  通过索引区间,返回有序结合指定区间内的成员,按从小到大顺序排列
zrange myzset 0 -1	#  返回
1) "one"
2) "two"
zrange myzset 0 -1 withscores	#  返回
1) "one"
2) "1"
3) "two"
4) "3"

## zrem
#  删除名字为 key 的 zset 元素
zrem myzset two		#  返回 (integer) 1
zrange myzset 0 -1 withscores	#  返回
1) "one"
2) "1"

## zincrby
#  对有序集合中指定成员的 score 增加对应的增量,返回更新后的 score 值
zadd myzset2 1 one				#  返回 (integer) 1
zadd myzset2 2 two				#  返回 (integer) 1
zincrby myzset2 2 one			#  返回 "3"
zrange myzset2 0 -1 withscores	#  返回
1) "two"
2) "2"
3) "one"
4) "3"

## zrank
#  返回名称为 key 的 zset 中 member 元素的排名,按下标从小到大的顺序排序
zadd myzset3 1 one		#  返回 (integer) 1
zadd myzset3 2 two		#  返回 (integer) 1
zadd myzset3 3 three	#  返回 (integer) 1
zadd myzset3 4 four		#  返回 (integer) 1
zadd myzset3 5 five		#  返回 (integer) 1
zrank myzset3 three	/	/ 返回 (integer) 2。这里的 2 是指 three 元素对应的 score 的从小到大排序的下标

## zrevrank
#  返回有序集和指定成员的排名,有序集成员按分数从大到小排序
zadd salary 3500 peter	#  返回 (integer) 1
zadd salary 4000 tom	#  返回 (integer) 1
zadd salary 4500 jack	#  返回 (integer) 1
zrange salary 0 -1 withscores	#  返回
1) "peter"
2) "3500"
3) "tom"
4) "4000"
5) "jack"
6) "4500"
zrank salary peter		#  返回 (integer) 0
zrevrank salary tom		#  返回 (integer) 1

## zrevrange
#  返回有序集中指定区间内的成员,其成员的位置按分数从大到小的顺序排列
#  与 zrange 不同点是,zrange是按从小到大顺序排列
zrange salary 0 -1 withscores		#  返回
1) "peter"
2) "3500"
3) "tom"
4) "4000"
5) "jack"
6) "4500"
zrevrange salary 0 -1 withscores	#  返回
1) "jack"
2) "4500"
3) "tom"
4) "4000"
5) "peter"
6) "3500"

## zrangebyscore
#  返回有序集中指定分数区间内的所有成员
zrange salary 0 -1 withscores				#  返回
1) "peter"
2) "3500"
3) "tom"
4) "4000"
5) "jack"
6) "4500"
zrangebyscore salary 4000 5000 withscores	#  返回
1) "tom"
2) "4000"
3) "jack"
4) "4500"

## zcount
#  计算有序集合指定分数区间内的成员数量
zrange salary 0 -1 withscores	#  返回
1) "peter"
2) "3500"
3) "tom"
4) "4000"
5) "jack"
6) "4500"
zcount salary 3000 5000			#  返回 (integer) 1

## zcard
#  用于计算集合中元素的数量。当 key 不存在的时候,返回 0
zrange salary 0 -1		#  返回
1) "peter"
2) "tom"
3) "jack"
zcard salary			#  返回 (integer) 3

## zscore
#  返回有序集中成员的分数值。如果成员元素不是有序集 key 的成员,或 key 不存在,则返回 (nil)
zrange salary 0 -1 withscores	#  返回
1) "peter"
2) "3500"
3) "tom"
4) "4000"
5) "jack"
6) "4500"
zscore salary tom				#  返回 "4000"

## zremrangebyrank
#  移除有序集合中给定的排名区间的所有成员
zrange salary 0 -1 withscores	#  返回
1) "peter"
2) "3500"
3) "tom"
4) "4000"
5) "jack"
6) "4500"
zremrangebyrank salary 0 1		#  返回 (integer) 2。删除下标 0 和 1 区间
zrange salary 0 -1 withscores	#  返回
1) "jack"
2) "4500"

## zremrangebyscore
#  移除有序集中给定的分数区间内的所有成员
zadd salary 2000 tom			#  返回 (integer) 1
zadd salary 2500 jack			#  返回 (integer) 1
zadd salary 3000 peter			#  返回 (integer) 1
zrange salary 0 -1 withscores	#  返回
1) "tom"
2) "2000"
3) "jack"
4) "2500"
5) "peter"
6) "3000
zremrangebyscore salary 2000 2500	#  返回 (integer) 1
zrange salary 0 -1 withscores		#  返回
1) "peter"
2) "3000

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值