一、基础命令
1.ping(心跳检查)
ping //输入ping 命令,看到PONG响应,说明客户端与Redis的连接正常。
2.get/set(读写键值)
set name xiaoHong //set key value 会将指定 key-value写入到DB。 get name //get key 则会读取指定key的value值。
3.select(切换数据库)
select 1 //select db 索引来切换 DB。redis默认有 16 个数据库。默认使用的是 0 号 DB。
4.dbsize(查看key数量)
dbsize //命令可以查看当前数据库中 key 的数量。
5.flushdb(删除当前库中所有数据)
flushdb //删除当前库中所有数据,不影响其他DB。
6.flushall(删除所有DB中的数据)
flushall //清除redis所有DB中的数据
二、Key 操作命令
1.keys(正则匹配键名)
keys * //匹配所有的key keys a* //匹配以a开头的key
//KEYS pattern 查找所有符合正则 pattern 的 key
//KEYS 速度非常快,但在一个大的数据库中使用它可能会阻塞当前服务器的服务。生产环境中一般不使用该命令,使用scan命令代替。
2.exists(检查key是否存在)
exists key //若 key 存在,返回 1 ,否则返回 0 。
3.del(删除指定一个或多个key)
del key1 key2 key3 //返回被删除 key 的数量,不存在的 key 会被忽略。
4.rename(修改key名)
rename key newKey //将key改名为newkey。 //当 key 和 newkey 相同,或 key 不存在时,会返回一个错误。 //当 newkey 已经存在时,RENAME 将覆盖旧值。
5.move(移动key数据库DB)
MOVE key db //将当前数据库的 key 移动到指定数据库 db 当中。 //如果当前数据库和目标数据库有相同名字的 key,或者 key 不存在于当前数据库,那么 MOVE 没有任何效果。 //移动成功返回 1 ,失败则返回 0 。
6.type(获取key储存的值类型)
type key //返回 key 所储存的值的类型 //有六种 none (key 不存在)、string (字符串)、list (列表)、set (集合)、zset (有序集)、hash (哈希表)
7.expire/pexpire(设置key有效期)
expire key seconds //为 key 设置过期时间。当 key 过期时(生存时间为 0),它会被自动删除。 //expire 的时间单位为秒,pexpire 的时间单位为毫秒。 //过期时间设置成功返回 1,key 不存在时返回 0 。rename 操作不会改变 key的过期时间。
8.ttl/pttl(获取key剩余生存时间)
ttl key //time to live,返回给定 key 的剩余生存时间。 // key 不存在时,返回 -2 。 // key 存在但没有设置时间时,返回 -1 。 // 返回 key 剩余生存时间。ttl 返回的时间单位为秒,pttl 返回的时间单位为毫秒。
9.persist(去除key的生存时间)
persist key //当生存时间移除成功返回 1;若 key 不存在或 key 没有设置生存时间,则返回 0。
10.randomkey(随机返回一个 key)
randomkey //当数据库不为空时,随机返回一个 key(不删除)。当数据库为空时,返回 nil。
11.scan(遍历数据库键)
SCAN cursor [MATCH pattern] [COUNT count] [TYPE type] //SCAN 命令是一个基于游标 cursor 的迭代器 //cursor:本次迭代开始的游标。 //pattern:本次迭代要匹配的 key 的模式。 //count:本次迭代要从数据集里返回多少元素,默认值为 10 。 //type:本次迭代要返回的value 的类型,默认为所有类型。 //SCAN 命令被调用之后,会返回一个包含两个元素的数组, 第一个元素是用于进行下一次迭代的新游标,第二个元素则是一个数组, 数组中包含了所有被迭代的元素。 //用户在下次迭代时使用这个新游标作为 SCAN 命令的游标参数,以此来延续之前的迭代过程。 //当 SCAN 命令的游标参数被设置为 0 时,服务器将开始一次新的迭代。如果新游标返回 0表示迭代已结束。 //当数据量很大时,count 的数量的指定可能会不起作用,Redis 会自动调整每次的遍历数目。 //由于 scan 命令每次执行都只会返回少量元素,所以该命令可以用于生产环境,而不会出现像 KEYS 命令带来的服务器阻塞问题。 hscan key cursor [MATCH pattern] [COUNT count] //遍历当前 db 中指定 Hash 表的所有 field-value 对 sscan key cursor [MATCH pattern] [COUNT count] //遍历当前 db 中指定 set 集合的所有元素 zscan key cursor [MATCH pattern] [COUNT count] //遍历当前 db 中指定有序集合的所有元素(数值与元素值)
三、String型操作命令
一个 String 类型的 Value 最大是 512M 大小。
1.set(将 key 设置值)
SET key value [EX seconds | PX milliseconds] [NX|XX] //key 值设为 value 外,还可以指定一些参数。 //EX seconds:为 key 设置过期时间,单位秒。等价于 SETEX 命令。 //PX milliseconds:为 key 设置过期时间,单位毫秒。等价于 PSETEX 命令。 //NX:key 不存在才会设置成功,用于添加 key。等价于 SETNX 命令。 //XX:key 必须存在才会设置成功,用于更新 key 的 value。 //如果value 字符串中带有空格,则该字符串需要使用双引号或单引号引起来,否则会认为 set 命令的参数数量不正确,报错。
2.setex/psetex(原子性操作设置值和生存时间)
SETEX/PSETEX key seconds value //setex 的单位为秒,psetex 的单位为毫秒。 //SETEX 是一个原子性操作,关联值和设置生存时间两个动作会在同一时间内完成,该命令在 Redis 用作缓存时,非常实用。
3.setnx(添加不存在的key)
SETNX key value //若给定的 key已经存在,则 SETNX 不做任何动作。成功,返回 1,否则,返回 0。 //等价于 set key value nx 仅用于新增key
4.getset(设置新值返回旧值)
GETSET key value //key 的值设为 value ,并返回 key 的旧值。 // key 存在但不是字符串类型时,返回一个错误;当 key 不存在时,返回 nil 。
5.mset/msetnx(同时设置多个键值对)
MSET/MSETNX key1 value1 key2 value2 [key value …] //同时设置一个或多个 key-value 对。 //如果某个给定 key 已经存在,那么 MSET 会用新值覆盖原来的旧值,MSETNX 命令:它只会在所有给定 key 都不存在的情 况下进行设置操作 //MSET/MSETNX 是一个原子性(atomic)操作,所有给定 key 都会在同 一时间内被设置,某些给定 key 被更新而另一些给定 key 没有改变的情况不可能发生。该命令永不失败。
6.mget(获取key值)
MGET key [key …] //如果给定的 key 里面,有某个 key 不存在,那么这个 key 返回特殊值 nil 。该命令永不失败。
7.append(在key值尾部追加值)
append key value // //如果 key 已经存在并且是一个字符串, APPEND 命令将 value 追加到 key 原来的值的末尾。 //如果 key 不存在, APPEND 就简单地将给定 key 设为 value ,就像执行 SET key value 一样。
8.incr/decr(key值自增/自减)
INCR key 或 DECR key //increment自动递增。将 key 中存储的数字值增一。decrement自动递减。将 key 中存储的数字值减一。 //如果 key 不存在,那么 key 的值会先被初始化为 0,然后再执行增一/减一操作。如果值不能表示为数字,那么返回一个错误提示。如果执行正确,则返回增一/减一后的值。
9.incrby/decrby(key增加/减少指定数值)
INCRBY key increment 或 DECRBY key decrement //将 key 中存储的数字值增加/减少指定的数值,这个数值只能是整数,可以是负数,但不能是小数。 //如果 key 不存在,那么 key 的值会先被初始化为 0,然后再执行增/减操作。如果值不能表示为数字,那么返回一个错误提示。如果执行正确,则返回增/减后的值。
10.incrbyfloat(key值加上浮点数)
incrbyfloat key increment //为 key 中所储存的值加上浮点数增量 increment //与之前的说明相同。没有 decrbyfloat 命令,但 increment 为负数可以实现减操作效果。
11.strlen(获取字符串长度)
strlen key //返回 key 所储存的字符串值的长度。 //当 key 储存的不是字符串值时,返回一个错误;当 key 不存在时,返回 0
12.getrange(截取字符串)
getrange key start end //字符串的截取范围由 start 和 end 两个偏移量决定,包括 start 和 end 在内。 //end 必须要比 start 大。支持负数偏移量,表示从字符串最后开始计数,-1 表示最后一个字符,-2 表示倒数第二个,以此类推。
13.setrange(字符串替换)
setrange key offset value //用 value 参数替换给定 key 所储存的字符串值 str,从偏移量 offset 开始。 //当 offset 值大于 str 长度时,中间使用零字节\x00 填充,即 0000 0000 字节填充;对于不存在的 key 当作空串处理。
14.位操作命令
//名称中包含 BIT 的命令,都是对二进制位的操作命令,例如,setbit、getbit、bitcount、bittop、bitfield,这些命令不常用。
四、Hash型Value操作命令
1.hset(将hash表中key的field设为value)
HSET key field value //将哈希表 key 中的域 field 的值设为 value 。 //如果 key 不存在,一个新的哈希表被创建并进行 HSET 操作。 //如果 field 是哈希表中的一个新建域,并且值设置成功,返回 1 。 //如果哈希表中域 field 已经存在且旧值已被新值覆盖,返回 0 。
2.hget(返回hash表中key的field的value)
hget key field //返回哈希表 key 中给定域 field 的值。 //当给定域不存在或是给定 key 不存在时,返回 nil 。
3.hmset(同时多个 field-value 存入哈希表 key)
hmset key field value [field value …] //同时多个 field-value (域-值)对设置到哈希表 key 中。 //此命令会覆盖哈希表中已存在的域。 //如果 key 不存在,一个空哈希表被创建并执行 HMSET 操作。 //如果命令执行成功,返回 OK 。当 key 不是哈希表(hash)类型时,返回一个错误。
4.hmget(同时获取哈希表 key 中一个或多个域的值)
hmget key field [field …] //按照顺序返回哈希表 key 中一个或多个域的值。 //如果给定的域不存在于哈希表,那么返回一个 nil 值。因为不存在的 key 被当作一个空哈希表来处理,所以对一个不存在的 key 进行 HMGET 操作将返回一个只带有 nil 值的表。
5.hgetall(获取hash中key所有域和值)
hgetall key //返回哈希表 key 中所有的域和值。 //在返回值里,紧跟每个域名(field name)之后是域的值(value),所以返回值的长度是哈希表大小的两倍。若 key 不存在,返回空列表。 //若 key 中包含大量元素,则该命令可能会阻塞 Redis 服务。所以生产环境中一般不使用该命令,而使用 hscan 命令代替。
6.hsetnx(不存在的field存入)
hsetnx key field value //key 中的域 field 的值设置为 value ,当且仅当域 field 不存在。 //若域 field 已经存在,该操作无效。 //如果 key 不存在,一个新哈希表被创建并执行 HSETNX 命令。
7.hdel(删除key中多个指定域)
hdel key field [field …] //删除哈希表 key 中的一个或多个指定域,不存在的域将被忽略。 //返回被成功移除的域的数量,不包括被忽略的域。
8.hexists(判断field是否存在)
HEXISTS key field //查看哈希表 key 中给定域 field 是否存在。 //如果哈希表含有给定域,返回 1 。如果不含有给定域,或 key 不存在,返回 0 。
9.hincrby/hincrbyfloat(判断field是否存在)
hincrby/hincrbyfloat key field increment //为哈希表 key 中的域 field 的值加上增量 increment 。 //hincrby 命令只能增加整数值,而 hincrbyfloat 可以增加小数值。 //增量也可以为负数,相当于对给定域进行减法操作。 //如果 key 不存在,一个新的哈希表被创建并执行 HINCRBY 命令。如果域 field 不存在,那么在执行命令前,域的值被初始化为 0。
//对一个储存字符串值的域 field 执行 HINCRBY 命令将造成一个错误。
10.hkeys/hvals(返回哈希key的全部域/值)
HKEYS key 或 HVALS key //返回哈希表 key 中的所有域/值。 //当 key 不存在时,返回一个空表。
11.hlen(返回哈希key中域数量)
HLEN key //返回哈希表 key 中域的数量。 //当 key 不存在时,返回 0 。
12.hstrlen(返回哈希field值字符串长度)
hstrlen key field //返回哈希表 key 指定域 field 相关联的值的字符串长度。 //如果给定的键或者域不存在, 那么命令返回 0 。
五、List型Value操作命令
1.lpush/rpush(向list插入多个值)
lpush key value [value …] 或 rpush key value [value …] //将一个或多个值 value 插入到列表 key 的表头/表尾(表头在左表尾在右) //对于 lpush 来说,各个 value 会按从左到右的顺序依次插入到表头;
//对于 rpush 来说,各个 value 会按从左到右的顺序依次插入到表尾。
//如果 key不存在,一个空列表会被创建并执行操作。当 key 存在但不是列表类型时,返回一个错误。执行成功时返回列表的长度。
2.llen(返回list长度)
llen key //返回列表 key 的长度。 //如果 key 不存在,则 key 被解释为一个空列表,返回 0 。 //如果 key 不是列表类型,返回一个错误。
3.lindex(返回下标index的元素)
lindex key index //返回列表 key 中,下标为 index 的元素。列表从 0 开始计数。 //如果 index 参数的值不在列表的区间范围内(out of range),返回 nil 。
4.lset(将list下标index元素设为value)
lset key index value //将列表 key 下标为 index 的元素的值设置为 value 。 //当 index 参数超出范围,或对一个空列表(key 不存在)进行 LSET 时,返回一个错误。
5.lrange(返回list的指定区间内元素)
LRANGE key start stop //返回列表 key 中指定区间[start, stop]内的元素,即包含两个端点。 //List 的下标从 0 开始,即以 0 表示列表的第一个元素,以 1 表示列表的第二个元素,以此类推。 //也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。超出范围的下标值不会引起错误。 //如果 start 下标比列表的最大下标 还要大,那么 LRANGE 返回一个空列表。如果 stop 下标比最大下标还要大,Redis 将 stop 的值设置为最大下标。
6.lpushx/rpushx(将value插入list的头/尾)
lpushx key value 或 rpushx key value //将值 value 插入到列表 key 的表头/表尾,当且仅当 key 存在并且是一个列表。 //当 key 不存在时,命令什么也不做。若执行成功,则输出表的长度。
7.linsert(将value插入列表index之前或之后)
linsert key before|after pivot value //将值 value 插入到列表 key 当中,位于元素 pivot 之前或之后。 //当 pivot 元素不存在于列表中时,不执行任何操作,返回-1; //当 key 不存在时, key 被视为空列表,不执行任何操作,返回 0; //如果 key 不是列表类型,返回一个错误;如果命令执行成功,返回插入操作完成之后,列表的长度。
8.lpop/rpop(列表key的表头/表尾移除count个元素)
lpop key [count] 或 rpop key [count] //从列表 key 的表头/表尾移除 count 个元素,并返回移除的元素。count 默认值 1 //当 key 不存在时,返回 nil
9.blpop/brpop(列表阻塞式弹出元素)
BLPOP key [key …] timeout 或 BRPOP key [key …] timeout //BLPOP/BRPOP 是列表的阻塞式(blocking)弹出命令。它们是 LPOP/RPOP 命令的阻塞版本,当给定列表内没有任何元素可供弹出的时候,连接将被 BLPOP/BRPOP 命令阻塞,直到等待 timeout 超时或发现可弹出元素为止。 //当给定多个 key 参数时,按参数 key的先后顺序依次检查各个列表,弹出第一个非空列表的头元素。timeout 为阻塞时长,单位为秒,其值若为 0,则表示只要没有可弹出元素,则一直阻塞。 //如在指定时间内没有任何元素被弹出,则返回一个 nil 和等待时长。反之,返回一个含有两个元素的列表,第一个元素是被弹出元素所属的 key ,第二个元素是被弹出元素的值。
10.rpoplpush(将元素从表尾移动到表头)
RPOPLPUSH source destination //将元素从表尾移动到表头 //命令 RPOPLPUSH 在一个原子时间内,执行以下两个动作: //将列表 source 中的最后一个元素(尾元素)弹出,并返回给客户端。 //将 source 弹出的元素插入到列表 destination ,作为 destination 列表的的头元素。如果 source 不存在,值 nil 被返回,并且不执行其他动作。 //如果 source 和 destination 相同,则列表中的表尾元素被移动到表头,并返回该元素,可以把这种特殊情况视作列表的旋转(rotation)操作。
11.brpoplpush
BRPOPLPUSH source destination timeout //BRPOPLPUSH 是 RPOPLPUSH 的阻塞版本,当给定列表 source 不为空时, BRPOPLPUSH 的表现和 RPOPLPUSH 一样。 //当列表 source 为空时, BRPOPLPUSH 命令将阻塞连接,直到等待超时,或有另一个客户端对 source 执行 LPUSH 或 RPUSH 命令为止。 //timeout 为阻塞时长,单位为秒,其值若为 0,则表示只要没有可弹出元素,则一直阻塞。 //假如在指定时间内没有任何元素被弹出,则返回一个 nil 和等待时长。反之,返回一个含有两个元素的列表,第一个元素是被弹出元素的值,第二个元素是等待时长。
12.lrem(根据count值,移除列表中与参数value相等元素)
LREM key count value //根据参数 count 的值,移除列表中与参数 value 相等的元素。 //count > 0 : 从表头开始向表尾搜索,移除与 value 相等的元素,数量为 count 。 //count < 0 : 从表尾开始向表头搜索,移除与 value 相等的元素,数量为 count 的绝对值。 //count = 0 : 移除表中所有与 value 相等的值。 //返回被移除元素的数量。当 key 不存在时, LREM 命令返回 0 ,因为不存在的 key 被视作空表(empty list)。
13.ltrim
LTRIM key start stop //对一个列表进行修剪(trim),让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。 //下标(index)参数 start 和 stop 都以 0 为底,也就是说,以 0 表示列表的第一个元素,以 1 表示列表的第二个元素,以此类推。也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。 //当 key 不是列表类型时,返回一个错误。如果 start 下标比列表的最大下标 end ( LLEN list 减去 1 )还要大,或者 start > stop , LTRIM 返回一个空列表,因为 LTRIM 已经将整个列表清空。 //如果 stop 下标比 end 下标还要大,Redis 将 stop 的值设置为 end 。
14.应用场景
(1)栈
通过 lpush + lpop 可以实现栈数据结构效果:先进后出。通过 lpush 从列表左侧插入数据,通过 lpop 从列表左侧取出数据。当然,通过 rpush + rpop 也可以实现相同效果,只不过操作的是列表右侧。
(2)队列
通过 lpush + rpop 可以实现队列数据结构效果:先进先出。通过 lpush 从列表左侧插入数据,通过 rpop 从列表右侧取出数据。当然,通过 rpush + lpop 也可以实现相同效果,只不过操作的方向正好相反。
(3)阻塞式消息队列
通过 lpush + brpop 可以实现阻塞式消息队列效果。作为消息生产者的客户端使用 lpush从列表左侧插入数据,作为消息消费者的多个客户端使用 brpop 阻塞式“抢占”列表尾部数据进行消费,保证了消费的负载均衡与高可用性。brpop 的 timeout 设置为 0,表示只要没有数据可弹出,就永久阻塞。
(4)动态有限集合
通过 lpush + ltrim 可以实现有限集合。通过lpush 从列表左侧向列表中添加数据,通过 ltrim 保持集合的动态有限性。像企业的末位淘汰、学校的重点班等动态管理,都可通过这种动态有限集合来实现。当然,通过rpush + ltrim 也可以实现相同效果,只不过操作的方向正好相反。
六、Set型Value操作命令
Set 中的元素具有无序性与不可重复性,而 List 则具有有序性与可重复性。
1.sadd(将元素插入set集合)
SADD key member [member …] //将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略。 //假如 key 不存在,则创建一个只包含 member 元素作成员的集合。当 key 不是集合类型时,返回一个错误。
2.smembers(返回set集合全部值)
smembers key //返回集合 key 中的所有成员。 //不存在的 key 被视为空集合。若 key 中包含大量元素,则该命令可能会阻塞 Redis服务。所以生产环境中一般不使用该命令,而使用 sscan 命令代替。
3.scard(返回set集合长度)
scard key //返回 Set 集合的长度 //当 key 不存在时,返回 0 。
4.sismember(判断元素是否Set集合成员)
sismember key member //判断 member 元素是否集合 key 的成员。 //如果 member 元素是集合的成员,返回 1 。如果 member 元素不是集合的成员,或 key 不存在,返回 0 。
5.smove(将元素从集合移动到另一个集合)
smove source destination member //将 member 元素从 source 集合移动到 destination 集合。 //如果 source 集合不存在或不包含指定的 member 元素,则 SMOVE 命令不执行任何操作,仅返回 0 。否则, member 元素从 source 集合中被移除,并添加到 destination 集合中去,返回 1。 //当 destination 集合已经包含 member 元素时, SMOVE命令只是简单地将 source 集合中的 member 元素删除。当 source 或 destination 不是集合类型时,返回一个错误。
6.srem(移除集合中指定元素)
srem key member [member …] //功能:移除集合 key 中的一个或多个 member 元素,不存在的 member 元素会被忽略,且返回成功移除的元素个数。 //当 key 不是集合类型,返回一个错误。
7.srandmember(集合中随机返回count个元素)
SRANDMEMBER key [count] //返回集合中的 count 个随机元素。count 默认值为 1。 //若 count 为正数,且小于集合长度,那么返回一个包含 count 个元素的数组,数组中的元素各不相同。 //如果 count 大于等于集合长度,那么返回整个集合。 //如果count 为负数,那么返回一个包含 count 绝对值个元素的数组,但数组中的元素可能会出现重复。
8.spop(移除并返回集合count个元素)
SPOP key [count] //移除并返回集合中的 count 个随机元素。count 必须为正数,且默认值为 1。 //如果 count 大于等于集合长度,那么移除并返回整个集合。
9.sdiff/sdiffstore(返回集合间差集)
SDIFF key [key …] 或 SDIFFSTORE destination key [key …] //返回第一个集合与其它集合之间的差集。差集,difference。 //这两个命令的不同之处在于,sdiffstore 不仅能够显示差集,还能将差集存储到指定的集合 destination 中。 //如果 destination 集合已经存在,则将其覆盖。不存在的 key 被视为空集。
10.sinter / sinterstore(返回集合间交集)
SINTER key [key …] 或 SINTERSTORE destination key [key …] //返回多个集合间的交集。交集,intersection。 //这两个命令的不同之处在于,sinterstore 不仅能够显示交集,还能将交集存储到指定的集合 destination 中。 //如果 destination 集合已经存在,则将其覆盖。不存在的 key被视为空集。
11.sunion/sunionstore(返回集合间并集)
SUNION key [key …] 或 SUNIONSTORE destination key [key …] //返回多个集合间的并集。并集,union。 //这两个命令的不同之处在于,sunionstore 不仅能够显示并集,还能将并集存储到指定的集合 destination 中。 //如果 destination 集合已经存在,则将其覆盖。不存在的 key被视为空集。
12.应用场景
1)动态黑名单
例如某服务器中要设置用于访问控制的黑名单。如果直接将黑名单写入服务器的配置文件,那么存在的问题是,无法动态修改黑名单。此时可以将黑名单直接写入Redis,只要有客户端来访问服务器,服务器在获取到客户端IP 后先从Redis 的黑名单中查看是否存在该IP,如果存在,则拒绝访问,否则访问通过。
(2)有限随机数
有限随机数是指返回的随机数是基于某一集合范围内的随机数,例如抽奖、随机选人。通过 spop 或 srandmember 可以实现从指定集合中随机选出元素。
(3)用户画像
社交平台、电商平台等各种需要用户注册登录的平台,会根据用户提供的资料与用户使用习惯,为每个用户进行画像,即为每个用户定义很多可以反映该用户特征的标签,这些标签就可以使用sadd 添加到该用户对应的集合中。这些标签具有无序、不重复特征。
同时平台还可以使用 sinter/sinterstore 根据用户画像间的交集进行好友推荐、商品推荐、客户推荐等。
七、有序Set型Value操作命令
有序 Set 与 Set 的不同之处是,有序 Set 中的每一个元素都有一个分值 score,Redis 会根据 score 的值对集合进行由小到大的排序。其与 Set 集合要求相同,元素不能重复,但元素的 score 可以重复。由于该类型的所有命令均是字母z 开头,所以该 Set 也称为 ZSet。
1.zadd(将元素及score加入有序集)
zadd key score member [[score member] [score member] …] //将一个或多个 member 元素及其 score 值加入到有序集 key 中的适当位置。 //score 值可以是整数值或双精度浮点数。如果 key 不存在,则创建一个空的有序集并执行 ZADD 操作。 //当 key 存在但不是有序集类型时,返回一个错误。 //如果命令执行成功,则返回被成功添加的新成员的数量,不包括那些被更新的、已经存在的成员。 //若写入的 member 值已经存在,但score 值不同,则新的 score 值将覆盖老 score。
2.zrange/zrevrange(返回有序集区间内的成员)
ZRANGE key start stop [WITHSCORES] 或 ZREVRANGE key start stop [WITHSCORES] //返回有序集 key 中,指定区间内的成员。zrange 命令会按 score 值递增排序, zrevrange 命令会按score 递减排序。 //具有相同 score 值的成员按字典序/逆字典序排列。可以通过使用 WITHSCORES 选项,来让成员和它的 score 值一并返回。 //下标参数从 0 开始,即 0 表示有序集第一个成员,以 1 表示有序集第二个成员,以此类推。也可以使用负数下标,-1 表示最后一个成员,-2 表示倒数第二个成员,以此类推。 //超出范围的下标并不会引起错误。例如,当 start 的值比有序集的最大下标还要大,或是 start > stop 时, ZRANGE 命令只是简单地返回一个空列表。 //再比如 stop 参数的值比有序集的最大下标还要大,那么 Redis 将 stop 当作最大下标来处理。 //若 key 中指定范围内包含大量元素,则该命令可能会阻塞 Redis 服务。所以生产环境中如果要查询有序集合中的所有元素,一般不使用该命令,而使用 zscan 命令代替。
3.zrangebyscore/zrevrangebyscore
格式:ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count] ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count] //返回有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )的成员。 //有序集成员按 score 值递增/递减次序排列。具有相同 score 值的成员按字典序/逆字典序排列。 //可选的 LIMIT 参数指定返回结果的数量及区间(就像 SQL 中的 SELECT LIMIT offset, count ),注意当 offset 很大时,定位 offset 的操作可能需要遍历整个有序集,此过程效率可能会较低。 //可选的 WITHSCORES 参数决定结果集是单单返回有序集的成员,还是将有序集成员及其 score 值一起返回。 //min 和 max 的取值是正负无穷大的。默认情况下,区间的取值使用闭区间 (小于等于或大于等于),也可以通过给参数前增加左括号“(”来使用可选的开区间 (小于或大于)。
4.zcard(返回有序集长度)
zcard key //返回集合的长度 //当 key 不存在时,返回 0 。
5.zcount(返回集合score在min和max之间成员数)
zcount key min max //返回有序集 key 中, score 值在 min 和 max 之间(默认包括 score 值等于 min或 max )的成员的数量。
6.zscore(返回有序集member 的 score)
zscore key member //返回有序集 key 中,成员 member 的 score 值。 //如果 member 元素不是有序集 key 的成员,或 key 不存在,返回 nil 。
7.zincrby(指定成员的score加上增量)
zincrby key increment member //为有序集 key 的成员 member 的 score 值加上增量 increment 。increment 值可以是整数值或双精度浮点数。 //可以通过传递一个负数值 increment ,让 score 减去相应的值。 //当 key 不存在,或 member 不是 key 的成员时, ZINCRBY key increment member 等同于 ZADD key increment member 。 //当 key 不是有序集类型时,返回一个错误。命令执行成功,则返回 member 成员的新 score 值。
8.zrank/zrevrank(返回member排名)
ZRANK key member 或 ZREVRANK key member //返回有序集 key 中成员 member 的排名。zrank 命令会按 score 值递增排序,zrevrank 命令会按 score 递减排序。 //score 值最小的成员排名为 0 。如果 member 不是有序集 key 的成员,返回 nil 。
9.zrem(移除有序集指定成员)
ZREM key member [member …] //移除有序集 key 中的一个或多个成员,不存在的成员将被忽略。 //当 key 存在但不是有序集类型时,返回一个错误。执行成功,则返回被成功移除的成员的数量,不包括被忽略的成员。
10.zremrangebyrank
ZREMRANGEBYRANK key start stop //移除有序集 key 中,指定排名(rank)区间内的所有成员。 //排名区间分别以下标参数 start 和 stop 指出,包含 start 和 stop 在内。排名区间参数从 0 开始,即 0 表示排名第一的成员, 1 表示排名第二的成员,以此类推。 //也可以使用负数表示,-1 表示最后一个成员,-2 表示倒数第二个成员,以此类推。命令执行成功,则返回被移除成员的数量。
11.zremrangebyscore
ZREMRANGEBYSCORE key min max //移除有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或max )的成员。
//命令执行成功,则返回被移除成员的数量。
12.zrangebylex
ZRANGEBYLEX key min max [LIMIT offset count] //该命令仅适用于集合中所有成员都具有相同分值的情况。当有序集合的所有成员都具有相同的分值时,有序集合的元素会根据成员的字典序(lexicographical ordering)来进行排序。 //即这个命令返回给定集合中元素值介于 min 和 max 之间的成员。如果有序集合里面的成员带有不同的分值, 那么命令的执行结果与 zrange key 效果相同。 //合法的 min 和 max 参数必须包含左小括号“(”或左中括号“[”,其中左小括号“(”表示开区间, 而左中括号“[”则表示闭区间。min 或max 也可使用特殊字符“+”和“-”,分别表示正无穷大与负无穷大。
13.zlexcount
ZLEXCOUNT key min max //该命令仅适用于集合中所有成员都具有相同分值的情况。该命令返回该集合中元素值本身(而非score 值)介于 min 和 max 范围内的元素数量。
14.zremrangebylex
ZREMRANGEBYLEX key min max //该命令仅适用于集合中所有成员都具有相同分值的情况。该命令会移除该集合中元素值本身介于 min 和 max 范围内的所有元素。
15.应用场景
有序 Set 最为典型的应用场景就是排行榜,例如音乐、视频平台中根据播放量进行排序的排行榜;电商平台根据用户评价或销售量进行排序的排行榜等。将播放量作为 score,将作品 id 作为 member,将用户评价积分或销售量作为 score,将商家 id 作为member。使用 zincrby 增加排序 score,使用 zrevrange 获取 Top 前几名,使用 zrevrank 查询当前排名,使用 zscore 查询当前排序score 等。
标签:返回,元素,Redis,value,列表,命令,key,集合,操作 From: https://www.cnblogs.com/coder-Fish/p/17867274.html