redis与kafka基础

初识Redis
一. 为什么在多线程并发情况下,以Redis实现的“自增ID工具”能保证ID按顺序自增长且不重复:

此处的自增ID工具用的是redis的增加score方法 , 每调用一次 , redis的key ‘id’ 就自增1 , 返回值为增加后的数值 , 故获取id的动作不会有重复值.

/**
 * “自增ID工具”
 * @description: 
 * @author: Jeff
 * @date: 2020年9月21日
 * @return
 */
public Long getId(){
	return redisTemplate.opsForValue().increment("id", 1);
}

1
2
3
4
5
6
7
8
9
10
11
二 . 描述Redis之List类型分页实现过程,企业里存在类似的场景。

从redis中rang数据时 , 用的是按索引rang , 页面请求的页码和pageSize传到后台 , 调用redis的rang方法 ,
int startIndex = (pageNum-1)pageSize;作为起始索引 ,
int endIndex = pageNumpageSize;作为截至索引 , 就能获取到指定索引区间的数据返回页面 .

package com.chencan.redis.controller;

import java.util.List;

import javax.annotation.Resource;

import org.springframework.data.redis.core.ListOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import com.chencan.redis.domain.ScoreType;
import com.chencan.redis.domain.Student;

@Controller
public class StudentController {

@Resource
private RedisTemplate redisTemplate;

/**
 * 6.页面数据展示:(25分)
	(1)按原型图效果展示数据。(5分)
	(2)正确显示“课程数”,课程数是学生除了成绩为“-”外课程的数量。(4分)
	(3)正确显示“不及格数”,不及格数是除了成绩为“-”外,低于60分的课程数量。(5分)
	(4)正确显示“平均成绩”,平均成绩是学生除了成绩为“-”外课程成绩的平均数。(5分)
	(5)正确分页,每页展示10条。提示:必须在Redis中分好页,不得全部取出通过Java在虚拟机内存中分页。(6分)
 * @description: 
 * @author: Jeff
 * @date: 2020年9月21日
 * @param pageNum
 * @param pageSize
 * @param model
 * @return
 */

@RequestMapping("list")
public String list(@RequestParam(defaultValue="1")Integer pageNum,@RequestParam(defaultValue="9")Integer pageSize,Model model){
	ListOperations<String, Student> opsForList = redisTemplate.opsForList();
	
	int startIndex = (pageNum-1)*pageSize;
	int endIndex = pageNum*pageSize;
	
	List<Student> list = opsForList.range("studentList", startIndex, endIndex);
	for (Student student : list) {
		
		 Float chinese = student.getChinese();
		 Float english = student.getEnglish();
		 Float maths = student.getMaths();
		 Float c = student.getC();
		 Float css = student.getCss();
		 Float cf = student.getCf();
		 Float ds = student.getDs();
		 Float dsi = student.getDsi();
		 ScoreType os= student.getOs();
		 Float network = student.getNetwork();
		
		int classCount=0;
		//String osname=os.getDiplayName();
		int fcount=0;
		int count =0;
		//System.out.println(osname);
		
		
		if(chinese==null){
			
		}else{
			classCount++;
			count+=chinese;
			if(chinese<60){
				fcount++;
			}
		}

		if(english==null){
			
		}else{
			classCount++;
			count+=english;
			if(english<60){
				fcount++;
			}
		}
		//数学
		if(maths==null){
			
		}else{
			classCount++;
			count+=maths;
			if(maths<60){
				fcount++;
			}
		}
		if(c==null){
			
		}else{
			classCount++;
			count+=c;
			if(c<60){
				fcount++;
			}
		}
		if(css==null){
			
		}else{
			classCount++;
			count+=css;
			if(css<60){
				fcount++;
			}
		}
		if(cf==null){
			
		}else{
			classCount++;
			count+=cf;
			if(cf<60){
				fcount++;
			}
		}
		if(ds==null){
			
		}else{
			classCount++;
			count+=ds;
			if(ds<60){
				fcount++;
			}
		}
		if(dsi==null){
			
		}else{
			classCount++;
			count+=dsi;
			if(dsi<60){
				fcount++;
			}
		}
		
		if(network==null){
			
		}else{
			classCount++;
			count+=network;
			if(network<60){
				fcount++;
			}
		}
		student.setAvg(count/classCount);
		student.setClassCount(classCount);
		student.setFcount(fcount);
	}
	model.addAttribute("list", list);
	model.addAttribute("pageNum", pageNum);
	model.addAttribute("total", opsForList.size("studentList")/pageSize);
	
	return "list";
}
/**
 * 7.测试持久化机制:(10分)
	(1)保持Web项目不停止运行的情况下,通过Redis客户端命令关闭Redis服务端。(3分)
	(2)重新启动Redis服务端。(2分)
	(3)刷新或继续访问页面,数据继续显示。数据丢失则全扣此大项13分。(5分)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值