互联网框架day08(redis[接上一期])

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
redis安装
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
favor1有但是favor2没有的元素
favor2有但是favor1没有的元素
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
交集 :相同的元素相加输出
并集:不同的元素输出

redis客户端jedis
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

注意:3.0版本不能设置protected-mode no[3.0.7版本没有这个功能,建议使用3.2版本及以上]
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

拷贝三份【建立分布式的redis】
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
问号或者斜杆加下边的内容
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

package cn.tedu.user.test;
import org.junit.Test;
import redis.clients.jedis.Jedis;

/**
 * 实现单个节点的连接底层对象
 * 分布式的连接实现对象
 * @author 在路上
 *
 */
public class RedisJedisTest {
	/*
	 * 使用jedis创建一个连接对象,操作6379
	 */
	@Test
	public void connection(){
		Jedis jedis=new Jedis("192.168.253.129",6379);
		//jedis可以连接到192.168.253.129:6379
		//redis-cli -h(host) 192.168.253.129 -p(port)6379
		jedis.set("name", "王老师");
		System.out.println(jedis.get("name"));
		
	}
}

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
key值的计算逻辑【保证不同的用户的key值不一样,保证同一个用户登录时间不同key值也不一样】
jedis setex(ticket,60602,userJson)
返回使用过的ticket的值
控制层使用ticket 放到cookie中返回浏览器

在这里插入图片描述
usercontroller

//登录功能
	@RequestMapping("login")
	public SysResult doLogin(User user,HttpServletRequest request,HttpServletResponse response){
		//通过业务层返回的数据ticket是否为空判断
		//登录逻辑是否正常""  正常值
		String ticket=userService.doLogin(user);
		if("".equals(ticket)){
			//登录失败
			return SysResult.build(201, "", null);
		}else{
			//ticket不为空,说明登录成功
			//返回成功信息之前,要在cookie中定义一个携带ticket的key值
			//的头信息 EM_TICKET
			CookieUtils.setCookie(request, response, "EM_TICKET", ticket);
			return SysResult.ok();
		}
		
	}

userservice层

public String doLogin(User user) {
		//判断登录的权限检验select where user_name and password
		//加密
		user.setUserPassword(MD5Util.md5(user.getUserPassword()));
		User exist=userMapper.selectUserByUserNameAndPassword(user);
		String ticket="";
		//判断对象是否存在
		if(exist==null){
			//登录失败
			return ticket;
		}else{
			//登录成功
			//生成ticket redis 的key,生成value userJson
			//ticket生成公式:“EM_TICKET”+currentTime+userId
			ticket="EM_TICKET"+System.currentTimeMillis()+exist.getUserId();
			
			Jedis jedis=new Jedis("192.168.253.129", 6379);
			try {
				String userJson=MapperUtil.MP.writeValueAsString(exist);
				//设置超时存储
				jedis.setex(ticket, 60*60*2, userJson);
			} catch (Exception e) {
				e.printStackTrace();
				return "";
			}finally{
				jedis.close();
			}
			//存储在redis,将ticket返回
			return ticket;
		}
		
	}

windows启动eureka(以可以在eclipse启动)
eclipse启动user
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
usercontroller

//获取redis中的userJson
	@RequestMapping("query/{ticket}")
	public SysResult queryTicket(@PathVariable String ticket){
		String userJson=userService.queryTicket(ticket);
		if(userJson==null){//超过2个小时
			return SysResult.build(201, "用户超时", null);
		}else{
			//登录状态可用
			return SysResult.build(200, "登录状态可用", userJson);
		}
	}

userservice

public String queryTicket(String ticket) {
		Jedis jedis=new Jedis("192.168.253.129", 6379);
		try {
			return jedis.get(ticket);
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}finally{
			jedis.close();
		}
		
	}

测试:【注意:cookie跟着域名走】
windows启动eureka(也可以在eclipse启动),启动nginx
eclipse启动zuul、user
在这里插入图片描述
在这里插入图片描述
3.登录功能的业务逻辑缺陷
3.1登录能顶替?
顶替逻辑的数据结构
3.2登录突然超时
续约

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值