《Redis开发与运维》摘录 - 2.5集合&2.6有序集合&2.7键管理

集合

命令

添加元素

api: sadd key element [element ...]
在这里插入图片描述

删除元素

api: srem key element [element ...]
在这里插入图片描述

计算元素个数

api: scard key
在这里插入图片描述

判断元素是否在集合中

api: scard myset
在这里插入图片描述

随机从集合返回指定个元素

api: srandmember key [count]
[count]是可选参数,如果不写默认为1
在这里插入图片描述

随机从集合弹出元素

api: spop key
在这里插入图片描述
需要注意的是Redis从3.2版本开始,spop也支持[count]参数。
srandmember和spop都是随机从集合选出元素,两者不同的是spop命令执行后,元素会从集合中删除,而srandmember不会。

获取所有元素

api: smembers key
在这里插入图片描述
smembers和lrange、hgetall都属于比较重的命令,如果元素过多存在阻塞Redis的可能性,这时候可以使用sscan来完成

交并差

交: sinter key [key ...]
在这里插入图片描述
并: suinon key [key ...]
在这里插入图片描述
差: sdiff key [key ...]
在这里插入图片描述
在这里插入图片描述

保存交并差结果

结果保存在destination中

sinterstore destination key [key ...]
suionstore destination key [key ...]
sdiffstore destination key [key ...]

在这里插入图片描述

内部编码

  • intset(整数集合):当集合中的元素都是整数且元素个数小于set-maxintset-entries配置(默认512个)时,Redis会选用intset来作为集合的内部实
    现,从而减少内存的使用。
  • hashtable(哈希表):当集合类型无法满足intset的条件时,Redis会使
    用hashtable作为集合的内部实现。

使用场景

集合类型比较典型的使用场景是标签(tag)。例如一个用户可能对娱乐、体育比较感兴趣,另一个用户可能对历史、新闻比较感兴趣,这些兴趣点就是标签。有了这些数据就可以得到喜欢同一个标签的人,以及用户的共同喜好的标签,这些数据对于用户体验以及增强用户黏度比较重要。

有序集合

有序集合就是给集合中的每个元素一个分数, 作为排名依据, member最为集合元素不能重复, score可以重复. api很多都是针对分数
在这里插入图片描述

命令

添加成员

api: zadd key score member [score member ...]
在这里插入图片描述

Redis3.2为zadd命令添加了nx、xx、ch、incr四个选项:
·nx:member必须不存在,才可以设置成功,用于添加。
·xx:member必须存在,才可以设置成功,用于更新。
·ch:返回此次操作后,有序集合元素和分数发生变化的个数
·incr:对score做增加,相当于后面介绍的zincrby。

计算成员个数

api: zcard key
在这里插入图片描述

获取某个成员的分数

api: zscore key member
在这里插入图片描述

计算成员的排名

api

zrank key member
zrevrank key member

zrank是从分数从低到高返回排名,zrevrank反之。排名从0开始计算
在这里插入图片描述

删除成员

api: zrem key member [member ...]
在这里插入图片描述

增加成员的分数

api: zincrby key increment member
李四原来2分, 给她加5分
在这里插入图片描述

获取指定排名范围的成员

api:

zrange key start end [withscores]
zrevrange key start end [withscores]

zrange是由低到高, withscores可选的用于显示分数
在这里插入图片描述

返回指定分数范围的成员

api:

zrangebyscore key min max [withscores] [limit offset count]
zrevrangebyscore key max min [withscores] [limit offset count]

反着输没反应原因是, 反着输是max在头
在这里插入图片描述
同时min和max还支持开区间(小括号)和闭区间(中括号),-inf和+inf分别代表无限小和无限大

返回指定分数范围成员个数

api: zcount key min max
在这里插入图片描述

删除指定排名内的升序元素

zremrangebyrank key start end

zremrangebyrank key 0 1,由小到大删除前两名

删除指定分数范围的成员

zremrangebyscore key min max

交集

zinterstore destination numkeys key [key ...] [weights weight [weight ...]]
[aggregate sum|min|max]

这个命令参数较多,下面分别进行说明:

  • destination:交集计算结果保存到这个键。
  • numkeys:需要做交集计算键的个数。
  • key[key…]:需要做交集计算的键。
  • weights weight[weight…]:每个键的权重,在做交集计算时,每个键中的每个member会将自己分数乘以这个权重,每个键的权重默认是1。
  • aggregate sum|min|max:计算成员交集后,分值可以按照sum(和)、min(最小值)、max(最大值)做汇总,默认值是sum。

并集

zunionstore destination numkeys key [key ...] [weights weight [weight ...]]
[aggregate sum|min|max]

内部编码

  • ziplist(压缩列表):当有序集合的元素个数小于zset-max-ziplistentries配置(默认128个),同时每个元素的值都小于zset-max-ziplist-value配置(默认64字节)时,Redis会用ziplist来作为有序集合的内部实现,ziplist可以有效减少内存的使用。
  • skiplist(跳跃表):当ziplist条件不满足时,有序集合会使用skiplist作
    为内部实现,因为此时ziplist的读写效率会下降。

使用场景

有序集合比较典型的使用场景就是排行榜系统。

键管理

键重名

api: rename key newkey
在这里插入图片描述

  • 为了防止被强行rename,Redis提供了renamenx命令,确保只有newKey不存在时候才被覆盖
  • 由于重命名键期间会执行del命令删除旧的键,如果键对应的值比较大,会存在阻塞Redis的可能性

随机返回一个键

api: randomkey
在这里插入图片描述

键过期

  • expire key seconds:键在seconds秒后过期。
  • expireat key timestamp:键在秒级时间戳timestamp后过期。
    在这里插入图片描述

ttl命令和pttl都可以查询键的剩余过期时间,但是pttl精度更高可以达到毫秒级别,有3种返回值:

  • 大于等于0的整数:键剩余的过期时间(ttl是秒,pttl是毫秒)。
  • -1:键没有设置过期时间。
  • -2:键不存在。

Redis2.6版本后提供了毫秒级的过期方案:

  • pexpire key milliseconds:键在milliseconds毫秒后过期。
  • pexpireat key milliseconds-timestamp键在毫秒级时间戳timestamp后过
    期。

清除键的过期时间: persist
在这里插入图片描述
对于字符串类型键,执行set命令会去掉过期时间,这个问题很容易在开发中被忽视。
Redis不支持二级数据结构(例如哈希、列表)内部元素的过期功能,例如不能对列表类型的一个元素做过期时间设置。

迁移键

1.move: move key db
将本数据库中键名list1的数据迁移到数据库1(redis默认有16个数据库, 索引0-15)
在这里插入图片描述
2, 3没看懂

遍历键

api: keys pattern
pattern使用的是glob风格的通配符:

  • *代表匹配任意字符。
  • 代表匹配一个字符。
  • []代表匹配部分字符,例如[1,3]代表匹配1,3,[1-10]代表匹配1到10
    的任意数字。
  • \x用来做转义,例如要匹配星号、问号需要进行转义。

渐进式遍历
那么每次执行scan,可以想象成只扫描一个字典中的一部分键,直到将字典中的所有键遍历完毕。scan的使用方法如下:scan cursor [match pattern] [count number]

  • cursor是必需参数,实际上cursor是一个游标,第一次遍历从0开始,每
    次scan遍历完都会返回当前游标的值,直到游标值为0,表示遍历结束。
  • match pattern是可选参数,它的作用的是做模式的匹配,这点和keys的
    模式匹配很像。
  • count number是可选参数,它的作用是表明每次要遍历的键个数,默认
    值是10,此参数可以适当增大。
    在这里插入图片描述

数据库管理

切换数据库

select dbIndex

清除数据库

flushdb清除当前数据库

flushdb/flushall
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值