首页 > 数据库 >Redis基础命令操作

Redis基础命令操作

时间:2023-12-15 17:35:32浏览次数:33  
标签:返回 元素 Redis value 列表 命令 key 集合 操作

一、基础命令

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

相关文章

  • docker部署redis主从集群
    1、创建数据目录(logs目录要给权限,要不然会报错)mkdir-pv/data/redis/(data,logs}chmod777/data/redis/logs2、redis.conf配置文件-—-主从配置master节点配置cd/data/redisvimredis.confport6379bind0.0.0.0daemonizenoprotected-modenorequirepass123......
  • Linux下解压命令、压缩命令大全,详细教程
    Linux下解压命令、压缩命令大全,详细教程linux常用的解压和压缩命令如下:1、.tar解包:tarxvfFileName.tar打包:tarcvfFileName.tarDirName(注:tar是打包,不是压缩!)2、.gz解压1:gunzipFileName.gz解压2:gzip-dFileName.gz压缩:gzipFileName3、.tar.gz和.tgz解压:tarzxvfFil......
  • Redis分布式锁的扩展方法
     分布式锁代码#region秒杀业务测试privatestaticreadonlystringredisConnectionStr="127.0.0.1:6379,connectTimeout=5000,allowAdmin=false,defaultDatabase=1";///<summary>///秒杀业务///</summary>priv......
  • redis
    开启redis进程  redis-serverredis.windows.confredis对字符串的常用命令set 设置   get 获取  del  删除mset   mget设置获取多个key/valincr  incrby  decr   decrby    加/减setnx   msetnx   设置新的key/val   key必须是原来不存......
  • linux下的抓包工具tcpdump命令用法
     ############linux下的抓包工具tcpdump命令详解#########tcpdump命令--详解 tcpdump是工作中必用的一道指令,如果熟悉掌握,将会很快的帮你解决问题!先看看tcpdump的具体参数及意义:-i:指定tcpdump监听的网络接口-s:指定要监听数据包的长度-c:指定要监听的数据包数量,达到指定......
  • vue---操作状态
    VUE更改VUEX状态:简单示例代码:importVuefrom'vue';importVuexfrom'vuex';Vue.use(Vuex);exportdefaultnewVuex.Store({state:{count:0},mutations:{increment(state){state.count++;},d......
  • docker-基础常见命令
    2.1.常见命令首先我们来学习Docker中的常见命令,可以参考官方文档:https://docs.docker.com/engine/reference/commandline/cli/ 2.1.1.命令介绍其中,比较常见的命令有:命令说明文档地址dockerpull拉取镜像dockerpulldockerpush推送镜像到......
  • 13.adb命令连接真机
    一、准备工作1、准备一台或多台Android设备(如小米,华为),开启USB调试2、Android设备与电脑(Mac或者Windows)在同一个局域网内3、电脑安装好ADB工具二、具体步骤1.使用数据线通过USB接口将手机与电脑连接,在终端中执行如下命令:方法一USB数据线连接:adbdevices 查看设备是否连......
  • Helm Chart 部署 Redis 的完美指南
    目录一、Helm介绍二、安装Helm三、配置Helm的repository四、部署chart(以部署redis为例)1.搜索chart2.拉取chart3.修改values.yaml的一些配置(简单演示一下基本的配置)4.启动chart5.升级和回滚a.升级b.回滚一、Helm介绍Helm是一个Kubernetes的包管理工具,就像Linux下的包管......
  • SQL自动化注ru-SQLmap入门操作(一)
    了解SQLmap基础操作SQLmap是一款自动化的SQL注入工具,可以用于检测和利用SQL注入漏洞。以下是SQLmap的入门操作步骤:下载SQLmap:可以从官方网站(https://sqlmap.org/)下载最新版本的SQLmap。打开终端:在终端中进入SQLmap所在的目录。输入命令:使用以下命令运行SQLmap:pythonsqlmap.py-u<......