当前位置: 首页 > news >正文

学校网站推广策划书做网站工作

学校网站推广策划书,做网站工作,名律汇网站建设设计,网站开发的排期概述 前段时间#xff0c;做了一个世界杯竞猜积分排行榜。对世界杯64场球赛胜负平进行猜测#xff0c;猜对1分#xff0c;错误0分#xff0c;一人一场只能猜一次。 1.展示前一百名列表。 2.展示个人排名(如#xff1a;张三#xff0c;您当前的排名106579)。 一.redis so…概述 前段时间做了一个世界杯竞猜积分排行榜。对世界杯64场球赛胜负平进行猜测猜对1分错误0分一人一场只能猜一次。 1.展示前一百名列表。 2.展示个人排名(如张三您当前的排名106579)。 一.redis sorts sets简介 Sorted Sets数据类型就像是set和hash的混合。与sets一样Sorted Sets是唯一的不重复的字符串组成。可以说Sorted Sets也是Sets的一种。 Sorted Sets是通过Skip List(跳跃表)和hash Table(哈希表)的双端口数据结构实现的因此每次添加元素时Redis都会执行O(log(N))操作。所以当我们要求排序的时候Redis根本不需要做任何工作了早已经全部排好序了。元素的分数可以随时更新。 二.springboot 中使用RedisTemplate 本文主要通过redisTemplate来操作redis,当然也可以使用redis-client,看个人喜好. 详细 详细 一、运行效果 分析 一开始打算直接使用mysql数据库来做遇到一个问题每个人的分数都会变化,如何能够获取到个人的排名呢数据库可以通过分数进行row_num排序但是这个方法需要进行全表扫描当参与的人数达到10000的时候查询就非常慢了。 redis的排行榜功能就完美锲合了这个需求。来看看我是怎么实现的吧。 二、实现过程 ①、在本机开启了一个单点的redis配置文件如下 : springboot-redis-rank   :     : defaultDataSource     : jdbc:mysql://localhost:3306/blue?serverTimezoneUTC     : root     : 123456   :     : : 127.0.0.1     :     : : : 5000 ②、Maven依赖引入如下 parentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion2.0.4.RELEASE/version /parentdependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-redis/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactId/dependency /dependencies ③、代码实现 1.注入redis将key声明为常量SCORE_RANK Autowiredprivate StringRedisTemplate redisTemplate;public static final String SCORE_RANK  score_rank; 2.新增默认排行数据 /*** 批量新增*/Testpublic void batchAdd() {SetZSetOperations.TypedTupleString tuples  new HashSet();long start  System.currentTimeMillis();for (int i  0; i  100000; i) {DefaultTypedTupleString tuple  new DefaultTypedTuple(张三  i, 1D  i);tuples.add(tuple);}System.out.println(循环时间: ( System.currentTimeMillis() - start));Long num  redisTemplate.opsForZSet().add(SCORE_RANK, tuples);System.out.println(批量新增时间: (System.currentTimeMillis() - start));System.out.println(受影响行数  num);}//输出 循环时间:56 批量新增时间:1015 受影响行数100000 3.获取前10名(根据分数倒序) /*** 获取排行列表*/Testpublic void list() {SetString range redisTemplate.opsForZSet().reverseRange(SCORE_RANK, 0, 10);System.out.println(获取到的排行列表: JSON.toJSONString(range));SetZSetOperations.TypedTupleString rangeWithScores redisTemplate.opsForZSet().reverseRangeWithScores(SCORE_RANK, 0, 10);System.out.println(获取到的排行和分数列表: JSON.toJSONString(rangeWithScores));}//输出 获取到的排行列表:[张三99999,张三99998,张三99997,张三99996,张三99995,张三99994,张三99993,张三99992,张三99991,张三99990,张三99989] 获取到的排行和分数列表:[{score:100000.0,value:张三99999},{score:99999.0,value:张三99998},{score:99998.0,value:张三99997},{score:99997.0,value:张三99996},{score:99996.0,value:张三99995},{score:99995.0,value:张三99994},{score:99994.0,value:张三99993},{score:99993.0,value:张三99992},{score:99992.0,value:张三99991},{score:99991.0,value:张三99990},{score:99990.0,value:张三99989}] 4.新增李四的分数 /*** 单个新增*/Testpublic void add() {redisTemplate.opsForZSet().add(SCORE_RANK, 李四, 8899);} 5.获取李四单人的排行 /*** 获取单个的排行*/Testpublic void find(){Long rankNum  redisTemplate.opsForZSet().reverseRank(SCORE_RANK, 李四);System.out.println(李四的个人排名  rankNum);Double score  redisTemplate.opsForZSet().score(SCORE_RANK, 李四);System.out.println(李四的分数:  score);}//输出 李四的个人排名91101 李四的分数:8899.0 6.统计分数之间有多少人 /*** 统计两个分数之间的人数*/Testpublic void count(){Long count  redisTemplate.opsForZSet().count(SCORE_RANK, 8001, 9000);System.out.println(统计8001-9000之间的人数:  count);}//输出 统计8001-9000之间的人数:1001 7.获取集合的基数(数量大小) /*** 获取整个集合的基数(数量大小)*/Testpublic void zCard(){Long aLong  redisTemplate.opsForZSet().zCard(SCORE_RANK);System.out.println(集合的基数为  aLong);}//输出 集合的基数为100001 8.使用加法操作分数 /*** 使用加法操作分数*/Testpublic void incrementScore(){Double score  redisTemplate.opsForZSet().incrementScore(SCORE_RANK, 李四, 1000);System.out.println(李四分数1000后  score);}//输出 李四分数1000后9899.0 四.归纳 在以上测试类中我们使用了redis的那些功能呢在以上的例子中我们使用了单个新增批量新增获取前十获取单人排名这些操作但是redisTemplate还提供了更多的方法。 新增or更新 有三种方式一种是单个一种是批量对分数使用加法(如果不存在则从0开始加)。 //单个新增or更新 Boolean add(K key, V value, double score); //批量新增or更新 Long add(K key, SetTypedTupleV tuples); //使用加法操作分数 Double incrementScore(K key, V value, double delta); 删除 删除提供了三种方式通过key/values删除通过排名区间删除通过分数区间删除。 //通过key/value删除 Long remove(K key, Object... values);//通过排名区间删除 Long removeRange(K key, long start, long end);//通过分数区间删除 Long removeRangeByScore(K key, double min, double max); 查 1.列表查询:分为两大类正序和逆序。以下只列表正序的逆序的只需在方法前加上reverse即可 //通过排名区间获取列表值集合 SetV range(K key, long start, long end);//通过排名区间获取列表值和分数集合 SetTypedTupleV rangeWithScores(K key, long start, long end);//通过分数区间获取列表值集合 SetV rangeByScore(K key, double min, double max);//通过分数区间获取列表值和分数集合 SetTypedTupleV rangeByScoreWithScores(K key, double min, double max);//通过Range对象删选再获取集合排行 SetV rangeByLex(K key, Range range);//通过Range对象删选再获取limit数量的集合排行 SetV rangeByLex(K key, Range range, Limit limit); 2.单人查询 可获取单人排行和通过key/value获取分数。以下只列表正序的逆序的只需在方法前加上reverse即可 //获取个人排行 Long rank(K key, Object o);//获取个人分数 Double score(K key, Object o); 统计 统计分数区间的人数统计集合基数。 //统计分数区间的人数Long count(K key, double min, double max);//统计集合基数Long zCard(K key); 三、项目结构图 四、补充 以上就是redis中使用排行榜功能的一些例子和对redis的操作方法了。redis不仅仅只是作为缓存它更是数据库提供了许多的功能我们都可以好好的利用。 在这里我使用redis来实现了世界杯积分排行的展示无论是在批量更新或是获取个人排行等方便都有着很高效率也降低了对数据库操作的压力达到了很好的效果。
http://www.w-s-a.com/news/213948/

相关文章:

  • 长沙网站seo优化公司东莞企业官方网站建设
  • 网站个人备案材料北京网站推广价格
  • 百度做任务的网站电子工程网网站
  • 中介订制网站开发玉溪网站建设设计
  • 免费网站免费无遮挡手机页面设计软件
  • 网站建设需求规格说明书中山模板建站公司
  • wordpress get值网站建设 seo sem
  • 网站建设微信开发工厂代加工平台
  • 厦门 网站建设 公司哪家好asp.net 创建网站
  • 专业北京网站建设凡科网做网站怎么样
  • 金富通青岛建设工程有限公司网站浙江省住建厅四库一平台
  • 有搜索引擎作弊的网站企业建设H5响应式网站的5大好处6
  • 是做网站编辑还是做平面设计seo外包公司接单
  • 做性的网站有哪些苏州专业网站设计制作公司
  • 陵水网站建设友创科技十大优品店排名
  • 想换掉做网站的公司简要说明网站制作的基本步骤
  • 国企公司网站制作wordpress 浮动定位
  • 网站网页直播怎么做的企业网站建设推荐兴田德润
  • 网站建设熊猫建站厦门seo全网营销
  • 扁平网站设计seo是什么岗位的缩写
  • 工商企业网站群晖配置wordpress 80端口
  • 企业网站建设流程步骤镇江东翔网络科技有限公司
  • 网络工程师和做网站哪个难网络建站如何建成
  • 网站建设需要哪些项目游民星空是用什么做的网站
  • 旅游网站建设要如何做百度商城网站建设
  • destoon 网站搬家中国企业500强都有哪些企业
  • 商城网站前端更新商品天天做吗哈尔滨做网站优化
  • 新乡网站开发wordpress 产品分类侧边栏
  • 网站自己做自己的品牌好做互联网企业分类
  • 项目网站建设方案石家庄网站快速排名