redis系列:通过文章点赞排名案例学习sortedset命令

前言

这一篇文章将讲述Redis中的sortedset类型命令,同样也是通过demo来讲述,其他部分这里就不在赘述了。

项目Github地址:https://github.com/rainbowda/learnWay/tree/master/learnRedis/case-sortedset

案例

demo功能是文章点赞排名等等,整个demo的大致页面如下。

%E9%A1%B5%E9%9D%A2.png?raw=true

准备工作

首先定义一个存储文章的key

private static final String ZSET_KEY = "articleList";

redis操作对象

private RedisTemplate redisTemplate;
//string 命令操作对象
private ValueOperations valueOperations;
//zset 命令操作对象
private ZSetOperations zSetOperations;

sortedset在Redis中的结构可以看下图(图片来源于Redis in Action)。

图片来源于Redis in Action

列表查询

@RequestMapping(value = "/getList/{sortType}", method = RequestMethod.GET)
public Set getList(@PathVariable String sortType) {//如果没有数据,则添加10条数据if (zSetOperations.size(ZSET_KEY) == 0){for (int i = 1; i <= 10; i++) {zSetOperations.add(ZSET_KEY,"文章:"+i, (int)(Math.random()*10+i));}}//ASC根据分数从小到大排序,DESC反之if ("ASC".equals(sortType)){return zSetOperations.rangeWithScores(ZSET_KEY, 0, -1);} else {return zSetOperations.reverseRangeWithScores(ZSET_KEY, 0, -1);}
}

这里为了省去一个个添加数据的麻烦,就在获取列表数据中加了个判断。当文章数据为0时,默认添加10条数据,设置随机score加上所在的索引。
然后根据url中的参数sortType来决定返回的数据是按照分数升序还是降序排序。功能效果如下
%E5%8D%87%E9%99%8D%E5%BA%8F%E6%98%BE%E7%A4%BA.gif?raw=true

命令介绍

命令用例描述
ZADDZADD key [NX|XX][CH] [INCR] score member [score member ...]将所有指定成员添加到键为key有序集合(sorted set)里面
ZRANGEZRANGE key start stop [WITHSCORES]返回有序集key中,指定区间内的成员。其中成员的位置按score值递减(从小到大)来排列。
ZREVRANGEZREVRANGE key start stop [WITHSCORES]返回有序集key中,指定区间内的成员。其中成员的位置按score值递减(从大到小)来排列。

赞或踩

java代码如下

@RequestMapping(value = "/star", method = RequestMethod.POST)
public boolean starOrUnStar(String member, String type) {if ("UP".equals(type)){zSetOperations.incrementScore(ZSET_KEY, member, 1);} else {zSetOperations.incrementScore(ZSET_KEY, member, -1);}return true;
}

根据type决定是否加减分数,当type为UP时表示赞,为其他(DOWN)时表示踩。功能效果如下
%E5%8D%87%E9%99%8D%E5%BA%8F%E6%98%BE%E7%A4%BA.gif?raw=true

命令介绍

命令用例描述
ZINCRBYZINCRBY key increment member为有序集key的成员member的score值加上增量increment

升降序排名

java代码如下

@RequestMapping(value = "/rank/{type}/{member}", method = RequestMethod.GET)
public Long rank(@PathVariable String member, @PathVariable String type) {Long rank = null;if ("ASC".equals(type)){rank = zSetOperations.rank(ZSET_KEY, member);} else {rank = zSetOperations.reverseRank(ZSET_KEY, member);}return rank;
}

根据type决定是升序排名还是降序排名,如果是ASC则调用rank方法获取升序排名,其他则调用reverseRank获取降序排名。与下方redis命令类似

ZRANK articleList "文章1"
ZREVRANK articleList "文章1"

页面效果图如下
%E5%8D%87%E9%99%8D%E5%BA%8F%E6%8E%92%E5%90%8D.gif?raw=true

命令介绍

命令用例描述
ZRANKZRANK key member返回有序集key中成员member的排名。其中有序集成员按score值递增(从小到大)顺序排列。排名以0为底,也就是说,score值最小的成员排名为0。
ZREVRANKZREVRANK key member返回有序集key中成员member的排名,其中有序集成员按score值从大到小排列。

其他命令

获取属性

命令用例描述
ZCARDZCARD key返回key的有序集元素个数。
ZCOUNTZCOUNT key min max返回有序集key中,score值在min和max之间(默认包括score值等于min或max)的成员个数。
ZLEXCOUNTZLEXCOUNT key min max用于计算有序集合中指定成员之间的成员数量。
ZSCOREZSCORE key member返回有序集key中,成员member的score值。
ZCARD命令

返回key的有序集元素个数。
ZCARD key
返回值:key存在的时候,返回有序集的元素个数,否则返回0。

redis客户端执行的命令如下

zadd zCardKey 1 one
zcard zCardKey

下面是java代码

@Test
public void zCard() {jedis.zadd("zCardKey",1, "one");jedis.zadd("zCardKey",2, "two");System.out.println(jedis.zcard("zCardKey"));System.out.println(zSetOperations.size("zCardKey"));
}
ZCOUNT命令

返回有序集key中,score值在min和max之间(默认包括score值等于min或max)的成员数量。
ZCOUNT key min max
返回值:指定分数范围的元素个数。

redis客户端执行的命令如下

zadd zCountKey 1 one 2 two 3 three 4 four
zcount zCountKey 2 3

执行结果如下

zcount%E5%91%BD%E4%BB%A4%E5%AE%A2%E6%88%B7%E7%AB%AF%E6%89%A7%E8%A1%8C%E7%BB%93%E6%9E%9C.png?raw=true

下面是java代码

@Test
public void zCount() {jedis.zadd("zCountKey",1, "one");jedis.zadd("zCountKey",2, "two");jedis.zadd("zCountKey",3, "three");jedis.zadd("zCountKey",4, "four");System.out.println(jedis.zcount("zCountKey",2, 3));System.out.println(zSetOperations.count("zCountKey",2, 3));
}
ZLEXCOUNT命令

计算有序集合中指定成员之间的成员数量(按成员字典正序排序),可以使用 - 和 + 表示score最小值和最大值
ZLEXCOUNT key min max

redis客户端执行的命令如下

ZADD zLexCountKey 2 "b" 1 "a" 3 "c" 5 "e" 4 "d"
ZLEXCOUNT zLexCountKey - +
ZLEXCOUNT zLexCountKey [b [d

执行结果如下

zlexcount%E5%91%BD%E4%BB%A4%E5%AE%A2%E6%88%B7%E7%AB%AF%E6%89%A7%E8%A1%8C%E7%BB%93%E6%9E%9C.png?raw=true

下面是java代码

@Test
public void zLexCount() {zSetOperations.add("zLexCountKey", "b", 2);zSetOperations.add("zLexCountKey", "a", 1);zSetOperations.add("zLexCountKey", "c", 3);zSetOperations.add("zLexCountKey", "e", 5);zSetOperations.add("zLexCountKey", "d", 4);System.out.println(jedis.zlexcount("zLexCountKey", "-", "+"));System.out.println(jedis.zlexcount("zLexCountKey", "[b", "[d"));
}
ZSCORE命令

返回有序集key中,成员member的score值。
ZSCORE key member
返回值:成员member的score值

redis客户端执行的命令如下

zadd zScoreKey 1 one
ZSCORE zScoreKey one

下面是java代码

@Test
public void zScore() {jedis.zadd("zScoreKey",1, "one");System.out.println(jedis.zscore("zScoreKey", "one"));System.out.println(zSetOperations.score("zScoreKey", "one"));
}

获取成员

命令用例描述
ZRANGEBYLEXZRANGEBYLEX key min max [LIMIT offset count]返回指定成员区间内的成员,按成员字典正序排序。
ZRANGEBYSCOREZRANGEBYSCORE key min max [WITHSCORES]``[LIMIT offset count]返回所有符合score条件的成员
ZREVRANGEBYLEXZREVRANGEBYLEX key max min [LIMIT offset count]返回指定成员区间内的成员,按成员字典倒序排序。
ZREVRANGEBYSCOREZREVRANGEBYSCORE key max min [WITHSCORES]``[LIMIT offset count]返回有序集合中指定分数区间内的成员,分数由高到低排序。
ZSCANZSCAN key cursor [MATCH pattern]``[COUNT count]请参考 SCAN
ZRANGEBYLEX命令

返回指定成员区间内的成员,按成员字典正序排序。https://redis.io/commands/zrangebylex
ZRANGEBYLEX key min max[LIMIT offset count]
返回值:指定成员范围的元素列表。

redis客户端执行的命令如下

ZADD zRangeByLexKey 0 ba 0 a 0 ab 0 aa 0 b
ZRANGEBYLEX zRangeByLexKey - +
ZRANGEBYLEX zRangeByLexKey [aa (ba

执行结果如下

zrangebylex%E5%91%BD%E4%BB%A4%E5%AE%A2%E6%88%B7%E7%AB%AF%E6%89%A7%E8%A1%8C%E7%BB%93%E6%9E%9C.png?raw=true

下面是java代码

@Test
public void zRangeByLex() {zSetOperations.add("zRangeByLexKey", "ba", 0);zSetOperations.add("zRangeByLexKey", "a", 0);zSetOperations.add("zRangeByLexKey", "ab", 0);zSetOperations.add("zRangeByLexKey", "aa", 0);zSetOperations.add("zRangeByLexKey", "b", 0);System.out.println(jedis.zrangeByLex("zRangeByLexKey", "-", "+"));RedisZSetCommands.Range range = new RedisZSetCommands.Range();range.gte("aa");range.lt("ba");System.out.println(zSetOperations.rangeByLex("zRangeByLexKey",range));
}
ZRANGEBYSCORE命令

获取score在范围之内的数据。min和max可以是-inf和+inf
ZRANGEBYSCORE key min max[WITHSCORES]``[LIMIT offset count]

redis客户端执行的命令如下

ZADD zRangeByScoreKey 1 ba 2 a 3 ab 4 aa 5 b
ZRANGEBYSCORE zRangeByScoreKey -inf +inf
ZRANGEBYSCORE zRangeByScoreKey 2 4

执行结果如下

zrangebyscore%E5%91%BD%E4%BB%A4%E5%AE%A2%E6%88%B7%E7%AB%AF%E6%89%A7%E8%A1%8C%E7%BB%93%E6%9E%9C.png?raw=true

下面是java代码

@Test
public void zRangeByScore() {zSetOperations.add("zRangeByScoreKey", "ba", 1);zSetOperations.add("zRangeByScoreKey", "a", 2);zSetOperations.add("zRangeByScoreKey", "ab", 3);zSetOperations.add("zRangeByScoreKey", "aa", 4);zSetOperations.add("zRangeByScoreKey", "b", 5);System.out.println(jedis.zrangeByScore("zRangeByScoreKey", "-inf", "+inf"));RedisZSetCommands.Range range = new RedisZSetCommands.Range();System.out.println(zSetOperations.rangeByScore("zRangeByScoreKey", 2, 4));
}

移除相关命令

命令用例描述
ZREMZREM key member [member ...]删除有序集合中的成员
ZREMRANGEBYLEXZREMRANGEBYLEX key min max删除名称按字典由低到高排序成员之间所有成员
ZREMRANGEBYRANKZREMRANGEBYRANK key start stop移除有序集key中,指定排名(rank)区间内的所有成员。
ZREMRANGEBYSCOREZREMRANGEBYSCORE key min max移除有序集key中,所有score值介于min和max之间(包括等于min或max)的成员
ZREM命令

ZREM key member [member ...]
返回值:有序集合中删除的成员个数

redis客户端执行的命令如下

ZADD zRemKey 1 "one" 2 "two" 3 "three"
ZREM zRemKey one
ZRANGE zRemKey 0 -1

执行结果如下

zrem%E5%91%BD%E4%BB%A4%E5%AE%A2%E6%88%B7%E7%AB%AF%E6%89%A7%E8%A1%8C%E7%BB%93%E6%9E%9C.png?raw=true

下面是java代码

@Test
public void zRem() {zSetOperations.add("zRemKey", "one", 1);zSetOperations.add("zRemKey", "two", 2);zSetOperations.add("zRemKey", "three", 3);//jedis.zrem("zRemKey", "one");zSetOperations.remove("zRemKey", "one");System.out.println(zSetOperations.range("zRemKey", 0 , -1));
}

交并集

命令用例描述
ZINTERSTOREZINTERSTORE destination numkeys key [key ...]``[WEIGHTS weight] [SUM\|MIN\|MAX]计算给定的numkeys个有序集合的交集,并且把结果放到destination中
ZUNIONSTOREZUNIONSTORE destination numkeys key [key ...]``[WEIGHTS weight] [SUM\|MIN\|MAX]计算给定的numkeys个有序集合的并集,并且把结果放到destination中
ZINTERSTORE命令

计算给定的numkeys个有序集合的交集,并且把结果放到destination中。
在给定要计算的key和其它参数之前,必须先给定key个数(numberkeys)。
默认情况下,结果中一个元素的分数是有序集合中该元素分数之和,前提是该元素在这些有序集合中都存在。因为交集要求其成员必须是给定的每个有序集合中的成员,结果集中的每个元素的分数和输入的有序集合个数相等。
对于WEIGHTS和AGGREGATE参数的描述,参见命令ZUNIONSTORE。
如果destination存在,就把它覆盖。

ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]
返回值:结果有序集合destination中元素个数。
redis客户端执行的命令如下

ZADD zInterStoreKey1 1 "one" 2 "two"
ZADD zInterStoreKey2 1 "one" 2 "two" 3 "three"
ZINTERSTORE zInterStoreSumResult 2 zInterStoreKey1 zInterStoreKey2 WEIGHTS 2 3ZRANGE zInterStoreSumResult 0 -1 WITHSCORES

执行结果如下

zinterstore%E5%91%BD%E4%BB%A4%E5%AE%A2%E6%88%B7%E7%AB%AF%E6%89%A7%E8%A1%8C%E7%BB%93%E6%9E%9C.png?raw=true

下面是java代码

@Test
public void zInterStore() {zSetOperations.add("zInterStoreKey1", "one", 1);zSetOperations.add("zInterStoreKey1", "two", 2);zSetOperations.add("zInterStoreKey2", "one", 1);zSetOperations.add("zInterStoreKey2", "two", 2);zSetOperations.add("zInterStoreKey2", "three", 3);ZParams zParams = new ZParams();zParams.weightsByDouble(2, 3);zParams.aggregate(ZParams.Aggregate.SUM);jedis.zinterstore("zInterStoreSumResult", zParams, "zInterStoreKey1", "zInterStoreKey2");printTuple("zInterStoreSumResult", jedis.zrangeWithScores("zInterStoreSumResult", 0, -1));
}
ZUNIONSTORE命令

计算给定的numkeys个有序集合的并集,并且把结果放到destination中。
WEIGHTS参数相当于权重,默认就是1,可以给不同的key设置不同的权重
AGGREGATE参数默认使用的参数SUM,还可以选择MIN或者MAX。这个参数决定结果集的score是取给定集合中的相加值、最小值还是最大值
ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...] ] [AGGREGATE SUM|MIN|MAX]

redis客户端执行的命令如下

ZADD zUnionStoreKey1 1 "one" 2 "two"
ZADD zUnionStoreKey2 1 "one" 2 "two" 3 "three"
ZUNIONSTORE zUnionStoreSumResult 2 zUnionStoreKey1 zUnionStoreKey2 WEIGHTS 2 3
ZUNIONSTORE zUnionStoreMinResult 2 zUnionStoreKey1 zUnionStoreKey2 WEIGHTS 2 3 AGGREGATE MIN
ZUNIONSTORE zUnionStoreMaxResult 2 zUnionStoreKey1 zUnionStoreKey2 WEIGHTS 2 3 AGGREGATE MAX*
ZRANGE zUnionStoreSumResult 0 -1 WITHSCORES
ZRANGE zUnionStoreMinResult 0 -1 WITHSCORES
ZRANGE zUnionStoreMaxResult 0 -1 WITHSCORES

执行结果如下

zunionstore%E5%91%BD%E4%BB%A4%E5%AE%A2%E6%88%B7%E7%AB%AF%E6%89%A7%E8%A1%8C%E7%BB%93%E6%9E%9C.png?raw=true

下面是java代码

@Test
public void zUnionStore() {zSetOperations.add("zUnionStoreKey1", "one", 1);zSetOperations.add("zUnionStoreKey1", "two", 2);zSetOperations.add("zUnionStoreKey2", "one", 1);zSetOperations.add("zUnionStoreKey2", "two", 2);zSetOperations.add("zUnionStoreKey2", "three", 3);ZParams zParams = new ZParams();zParams.weightsByDouble(2, 3);zParams.aggregate(ZParams.Aggregate.SUM);jedis.zunionstore("zUnionStoreSumResult", zParams, "zUnionStoreKey1", "zUnionStoreKey2");//求最小值zParams.aggregate(ZParams.Aggregate.MIN);jedis.zunionstore("zUnionStoreMinResult", zParams, "zUnionStoreKey1", "zUnionStoreKey2");//求最大值zParams.aggregate(ZParams.Aggregate.MAX);jedis.zunionstore("zUnionStoreMaxResult", zParams, "zUnionStoreKey1", "zUnionStoreKey2");//springzSetOperations.unionAndStore("zUnionStoreKey1", "zUnionStoreKey2", "zUnionStoreResult");printTuple("zUnionStoreSumResult", jedis.zrangeWithScores("zUnionStoreSumResult", 0, -1));printTuple("zUnionStoreMinResult", jedis.zrangeWithScores("zUnionStoreMinResult", 0, -1));printTuple("zUnionStoreMaxResult", jedis.zrangeWithScores("zUnionStoreMaxResult", 0, -1));printTuple("zUnionStoreResult", jedis.zrangeWithScores("zUnionStoreResult", 0, -1));
}

还是那句话建议学习的人最好每个命令都去敲下,加深印象。

纸上得来终觉浅,绝知此事要躬行。————出自《冬夜读书示子聿》

转载于:https://www.cnblogs.com/fixzd/p/9369862.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/427324.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

xml生成2维码_MyBatis(2)之MyBatis-Generator最佳实践

自定义注释自定义注解指定xml文件模式上一篇文章详细阐述了xml配置文件的各种标签及其含义。其实从标签开始&#xff0c;每一个标签都对应一个实体类。context.class对应标签&#xff0c;而每一个子标签都对应一个属性&#xff1b;如图&#xff1a;标签与实体类的对应关系。有了…

nginx 配置详解_Nginx 配置详解

序言Nginx是lgor Sysoev为俄罗斯访问量第二的http://rambler.ru站点设计开发的。从2004年发布至今&#xff0c;凭借开源的力量&#xff0c;已经接近成熟与完善。Nginx功能丰富&#xff0c;可作为HTTP服务器&#xff0c;也可作为反向代理服务器&#xff0c;邮件服务器。支持Fast…

推荐系统——GBDT+LR

[[逻辑回归模型]] 逻辑回归是在[[线性回归]]的基础上添加了一个Sigmoid函数&#xff08;非线形&#xff09;映射&#xff0c;从而可以使逻辑回归成为一个优秀的分类算法 逻辑回归假设数据服从[[伯努利分布]]&#xff0c;通过[[极大化似然函数]]的方法&#xff0c;运用[[梯度下降…

从燃尽图看项目管理:你的项目哪里出错了?(燃尽图类型全解析)

什么是燃尽图 燃尽图&#xff08;burn down chart&#xff09;是在项目完成之前&#xff0c;对需要完成的工作任务的一种可视化表示。理想情况下&#xff0c;该图表是一个向下的曲线&#xff0c;随着项目任务的逐渐完成“烧尽”至零。 燃尽图常常用于敏捷开发中&#xff0c;作为…

springtboot 引用子工程的文件_xmake从入门到精通11:如何组织构建大型工程

xmake是一个基于Lua的轻量级现代化c/c的项目构建工具&#xff0c;主要特点是&#xff1a;语法简单易上手&#xff0c;提供更加可读的项目维护&#xff0c;实现跨平台行为一致的构建体验。本文主要详细讲解下&#xff0c;如何通过配置子工程模块&#xff0c;来组织构建一个大规模…

依赖项出现感叹号怎么办_SpringBoot中如何对依赖进行管理?

SpringBoot中的起步依赖(starter)是一组特定功能的依赖项集合&#xff0c;SpringBoot通过starter来进行项目的依赖管理&#xff0c;而不是直接基于单独的依赖项来进行依赖管理。starter其实就是特殊的Maven依赖项或者Gradle依赖项&#xff0c;它把常用的库组合到一起构成了一个…

5g理论速度_5G是什么?5G速度有多快?

原标题&#xff1a;5G是什么&#xff1f;5G速度有多快&#xff1f;5G到底是什么东西&#xff1f;今年5G网络会普及吗&#xff1f;5G网速到底有多快&#xff0c;背后又有哪些黑科技&#xff1f;近日&#xff0c;全球首个5G火车站在上海虹桥火车站启动建设。而根据三大运营商的时…

c++ new一个结构体_「C/C++」构造类型及应用:数组、结构体、共用体、枚举类型...

3.1数组同类型、同性质、按顺序存放的一组数据集合&#xff0c;易于批量处理。3.1.1一维数组定义int 1.数组名为常量&#xff0c;指向首地址&#xff0c;由系统指定。2.数组长度为整型常量,但不能为03.上例取值image[0]-image[255]&#xff0c;取值可以修改。初始化int 输入for…

自动产生fsm代码的工具_代码自动生成工具

构建支持多种数据库类型的代码自动生成工具背景&#xff1a;一般的业务代码中写来写去&#xff0c;无外乎是先建好model&#xff0c;然后针对这个model做些CRUD的操作。(主要针对单表的业务操作)针对于数据库dao、mapper等的代码自动生成已经有了mybatisGenerator这种工具&…

gtest测试框架使用详解_测试框架TestNG使用介绍

近期接触到了一个比较全面的基于Java的接口自动化测试框架&#xff0c;作为一名Java小白&#xff0c;所以打算研究一下&#xff0c;顺带学习学习Java&#xff0c;该测试框架的逻辑控制层使用的HttpClient TestNG。在本期中&#xff0c;给大家分享一下TestNG测试框架的基础知识…

LOJ#6282. 数列分块入门 6

一个动态的插入过程&#xff0c;还需要带有查询操作。 我可以把区间先分块&#xff0c;然后每个块块用vector来维护它的插入和查询操作&#xff0c;但是如果我现在这个块里的vector太大了&#xff0c;我可能的操作会变的太大&#xff0c;所以这时候我需要把现在里面的数全部拿出…

fragment在activity中的静态和动态用法_使用Matlab修改压缩Gif动态图片制作微信表情...

脚本之家你与百万开发者在一起作者&#xff1a;theOwlAndPussyCat/焦旭光引言电脑里存了很多有意思的Gif动态图片&#xff0c;闲暇想把这些动图全导入微信表情&#xff0c;可是这些动图很多大小超过了微信表情大小1MB的限制&#xff0c;要制作成表情只能压缩图像文件大小。网上…

frontcon函数用不了_C++复制构造函数与析构函数

想用机器人赋能未来&#xff0c;少不了扎实的编程的基本功&#xff0c;让我们跟着清华大学的C语言程序设计课程一起过一遍C的语法知识吧&#xff01;当定义基本类型的变量时&#xff0c;经常会用已有的变量去初始化新定义的变量&#xff0c;当定义对象的时候也有类似的需求&…

软件项目立项书_2019年度上海市软件和集成电路产业发展专项资金项目立项

上海艾瑞德生物科技有限公司荣获2019年上海市软件和集成电路产业发展专项资金(集成电路和电子信息制造领域)项目立项&#xff01;上海艾瑞德生物科技有限公司的【医用体外诊断动态光场图像采集电子模块的研发及产业化】喜获2019年上海市软件和集成电路产业发展专项资金(集成电路…

mysql提供了表示日期和时间的数据类型_MySQL数据类型 - 日期和时间类型(1)

1.日期和时间数据类型语法用于表示时间值的日期和时间数据类型是DATE, TIME, DATETIME, TIMESTAMP和 YEAR。对于TIME, DATETIME和 TIMESTAMP值&#xff0c;MySQL支持小数秒&#xff0c;精度可达微秒(6位数)。要定义包含小数秒部分的列&#xff0c;请使用语法type_name(fsp)&…

软件质量保证计划_CMMI V2.0 精讲之“过程质量保证”

过程质量保证(PROCESS QUALITY ASSURANCE, PQA)目的&#xff1a;验证并改进已执行的过程和所产生的工作产品的质量。价值&#xff1a;增强过程使用和改进的一致性&#xff0c;以最大限度地提高业务效益和客户满意度。实践概述第1级PQA 1.1识别并解决过程和工作产品问题。第2级P…

mysql gzip_在mysql中存储GZIP:ed文本?

Is it a common thing for bigger applications and databases to GZIP text data before inserting it to the database?Ill guess that any full-text search on the actual text field will not be working before unzipping it again?解决方案Ive not seen this done muc…

html 分页_JQuery堪称完美的分页函数

演示效果&#xff1a;html部分&#xff08;引入jquery.js&#xff09;<!DOCTYPE html> <html> <head> <meta charset"UTF-8"> <title>jQuery简单的分页插件</title> </head><link rel"stylesheet" href"…

mysql 8.0.12解压版安装教程_mysql 8.0.12 解压版安装教程

本文为大家分享了mysql 8.0.12 解压版安装教程&#xff0c;供大家参考&#xff0c;具体内容如下1、首先在官网上下载mysql8.0.12的压缩包&#xff1a;下载地址2、下载成功后解压到任意目录&#xff0c;比如我的是E:\download\mysql-8.0.12-winx64&#xff1b;3、配置环境变量&a…

简洁又快速地处理集合——Java8 Stream(下)

上一篇文章我讲解 Stream 流的基本原理&#xff0c;以及它与集合的区别关系&#xff0c;讲了那么多抽象的&#xff0c;本篇文章我们开始实战&#xff0c;讲解流的各个方法以及各种操作 没有看过上篇文章的可以先点击进去学习一下 简洁又快速地处理集合——Java8 Stream&#xf…