可以建网站的网络公司有哪些,南山网站建设公,金华建设局政务网站,优化是什么工作一、有序集合对象概述它保留了集合不能有重复成员的特性#xff0c; 但不同的是#xff0c;有序集合中的元素可以排序。但是它和列表使用索引下标作为排序依据不同的是#xff0c;它给每个元素设置一个分数#xff08;score#xff09;作为排序的依据如下图所示#xff0… 一、有序集合对象概述它保留了集合不能有重复成员的特性 但不同的是有序集合中的元素可以排序。但是它和列表使用索引下标作为排序依据不同的是它给每个元素设置一个分数score作为排序的依据如下图所示该有序集合包含kris、mike、frank、tim、martin、tom 它们的分数分别是1、91、200、220、250、251有序集合提供了获取指定 分数和元素范围查询、计算成员排名等功能合理的利用有序集合能帮助我们在实际开发中解决很多问题 特点有序集合中的键被称为“成员”成员的值成为“分值”分值必须为浮点数散列只能通过键访问元素。但是有序集合既可以通过键访问元素也可以根据分值以及分值的排列顺序来访问元素的结构和散列一样都是用于存储键值对键值不允许重复与散列的不同下图列出了列表、集合和有序集合三者的异同点二、命令命令zadd添加成员。返回结果代表成功添加成员的个数有关zadd命令有两点需要注意nxmember必须不存在才可以设置成功用于添加xxmember必须存在才可以设置成功用于更新ch返回此次操作后有序集合元素和分数发生变化的个数incr对score做增加相当于后面介绍的zincrby Redis3.2为zadd命令添加了nx、xx、ch、incr四个选项有序集合相比集合提供了排序字段但是也产生了代价zadd的时间复杂度为O(log(n))sadd的时间复杂度为O(1)zadd key score member [score member ...] zcard计算成员个数。时间复杂度为O(1)zcard keyzscore计算某个成员的分数。如果成员不存在则返回nilzscore key member zrank、zrevrank计算成员排名。zrank是从分数从低到高返回排名zrevrank反之。排名从0开始zrank key member
zrevrank key member
zrem删除成员。返回结果为成功删除的个数zrem key member [member ...] zincrby增加成员的分数zincrby key increment memberzrange、zrevrange返回指定排名范围的成员有序集合是按照分值排名的zrange是从低到高返回zrevrange反之如果加上withscores选项同时会返 回成员的分数zrange key start end [withscores]
zrevrange key start end [withscores]
zrangebyscore、zrevrangebyscore返回指定分数范围的成员其中zrangebyscore按照分数从低到高返回zrevrangebyscore反之[limit offset count]选项可以限制输出的起始位置和个数同时min和max还支持开区间小括号和闭区间中括号-inf和 inf分别代表无限小和无限大zrangebyscore key min max [withscores] [limit offset count]
zrevrangebyscore key max min [withscores] [limit offset count]zcount返回指定分数范围成员个数zcount key min max zremrangebyrank删除指定排名内的升序元素zremrangebyrank key start end zremrangebyscore删除指定分数范围的成员zremrangebyscore key min max 集合间的操作将下图的两个有序集合导入到Redis中zinterstore交集。参数如下destination交集计算结果保存到这个键numkeys需要做交集计算键的个数key[key...]需要做交集计算的键weights weight[weight...]每个键的权重在做交集计算时每个键中 的每个member会将自己分数乘以这个权重每个键的权重默认是1aggregate sum|min|max计算成员交集后分值可以按照sum和、 min最小值、max最大值做汇总默认值是sumzinterstore destination numkeys key [key ...] [weights weight [weight ...]]
[aggregate sum|min|max]
下面操作对userranking1和userranking2做交集weights和 aggregate使用了默认配置可以看到目标键userranking1_inter_2对分值 做了sum操作 如果想让userranking2的权重变为0.5并且聚合效果使用max可以 执行如下操作zunionstore并集。该命令的所有参数和zinterstore是一致的只不过是做并集计算zunionstore destination numkeys key [key ...] [weights weight [weight ...]]
[aggregate sum|min|max]
例如 下面操作是计算userranking1和userranking2的并集weights和 aggregate使用了默认配置可以看到目标键userranking1_union_2对分值 做了sum操作 下图给出了有序集合命令的复杂度命令时间复杂度zadd keyscoremember[scoremember...]O(kXlo())k是添加成员的个数”是当前有序集合成员个数zcard key0(1)zscore key member0(1).zrank key memberarevrank key member0(og()”是当前有序集合成员个数rem key member[member...10(k*1og())k是删除成员的个数是当前有序集合成员个数zincrby key increment memberO(log(m))”是当前有序集合成员个数zrange key start end[withscores]zrevrange key start end[withscores]O(log(m)k),k是要获取的成员个数η是当前有序集合成员个数zrangebyscore key min max[withscores]zrevrangebyscore key max min[withscores]0(log(m)k),k是要获取的成员个数η是当前有序集合成员个数zcount0(log(n))是当前有序集合成员个数zremrangebyrank key start endO(log(m)k),k是要删除的成员个数”是当前有序集合成员个数zremrangebyscore key min maxO(log(n)k),k是要删除的成员个数是当前有序集合成员个数zinterstore destinationnum keys key[key...1(n*k)0O(m*log(m))”是成员数最小的有序集合成员个数k是有序集合的个数m是结果集中成员个数zunionstore destinationnum keys key[key...]0()O(m*log(m)),”是所有有序集合成员个数和,m是结果集中成员个数三、内部编码有序集合类型的内部编码有两种ziplist压缩列表当有序集合的元素个数小于zset-max-ziplistentries配置默认128个同时每个元素的值都小于zset-max-ziplist-value配 置默认64字节时Redis会用ziplist来作为有序集合的内部实现ziplist 可以有效减少内存的使用skiplist跳跃表当ziplist条件不满足时有序集合会使用skiplist作 为内部实现因为此时ziplist的读写效率会下降演示说明当元素个数较少且每个元素较小时内部编码为skiplist当元素个数超过128个内部编码变为ziplist当某个元素大于64字节时内部编码也会变为skiplist:四、应用场景排行榜有序集合比较典型的使用场景就是排行榜系统。例如游戏里经常要对用户的副本关卡得分声望战力段位等做排行榜榜单的维度可能是多个方面的按照等级最后分数更新时间。本节使用等级这个维度记录每天用户副本星级的排行榜。主要需要实现以下4个功能①添加玩家星级。例如玩家mike打副本胜利获得了3颗星可以使用有序集合的zadd和zincrby功能zadd user:ranking mike 3如果之后再获得一个星星可以使用zincrbyzincrby user:ranking mike 1②取消用户星级排行信息。由于各种原因例如用户注销、用户作弊需要将用户删除此时需要 将用户从榜单中删除掉可以使用zrem。例如删除成员tomzrem user:ranking mike③展示获取前十名用户。此功能使用zrevrange命令实现zrevrangebyrank user:ranking 0 9④展示用户信息以及用户分数。此功能将用户名作为键后缀将用户信息保存在哈希类型中至于用户的分数和排名可以使用zscore和zrank两个功能hgetall user:info:tom
zscore user:ranking mike
zrank user:ranking mike
时间线在互联网上有很多网站都会根据内容的发布时间来对内容进行排序比如博客系统会按照文章发布时间的先后把最近发布的文章放在前面而发布时间较早的文章则放 在后面这样访客在浏览博客的时候就可以先阅读最新的文章然后再阅读较早的文章新闻网站会按照新闻的发布时间把最近发生的新闻放在网站的前面而早前发生的新闻则放在网站的后面这样当用户访问该网站的时候就可以第一时间查看到最新的新闻报道诸如微博和Twitter 这样的微博客都会把用户最新发布的消息放在页面的前面而稍早之前发布的 消息则放在页面的后面这样用户就可以通过向后滚动网页查看最近一段时间自己关注的人都发表了哪些动态