ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

总结个人博客系统技术亮点【学习自B站码神之路】

2022-07-10 23:34:33  阅读:200  来源: 互联网

标签:登录 站码 redis ThreadLocal 博客 token 线程 value 神之路


1、个人博客系统技术亮点【后端】

页面效果:

主页面:

image-20220710202031794

image-20220710202231419

分类标签等:

image-20220710202109911

归档:

image-20220710202122923

写文章:

image-20220710202202021

 


 

  • jwt + redis 使用token令牌的登录,访问认证速度快,实现session共享,安全性较高。 redis做了token令牌和用户信息的对应管理。1. 访问接口token验证,进一步增加了安全性 2. 登录用户做了缓存 3. 灵活控制用户的过期时间(可以续期,踢掉线等)

jwt 可以生成 一个加密的token,做为用户登录的令牌,当用户登录成功之后,发放给客户端。 当请求需要登录的资源或者接口的时候,将token携带,后端验证token是否合法。

首先在登陆之前在redis数据库中对数据进行查询,看是否存在该条数据,如果不存在的话,就去数据库查找,然后在查找到之后,在正常登录的时候将数据存储到redis中,当然这个存储信息的键值对也就是在redis查询的那个数据,然后下次如果再次执行访问的时候,在redis中就有了此数据,进而提高了访问的效率。细节:存储用户的登录信息,存储在redis中的时候使用的是hash数据结构,【hash数据结构其实就是,对应的键值对的值是一个字典类型。】此时就可以将用户携带的唯一标识作为值的键,将用户的其他某个信息作为该键的值存储起来。

 

 private RedisTemplate<String, String> redisTemplate;
 redisTemplate.opsForValue().set("TOKEN_"+token, JSON.toJSONString(sysUser),1, TimeUnit.DAYS);

 

  • ThreadLocal 本地线程变量保存用户信息副本到每一个线程中【线程封闭,不会出现线程并发安全问题】。

    在请求的线程之内,可以随时获取登录的用户,在使用完ThreadLocal之后,做了对value的删除,防止了内存泄漏

    【内存泄露】

    ThreadLocalMapThreadLocal 的一个静态内部类,里面定义了Entry 来保存数据。而且是继承的弱引用。在Entry内部使用ThreadLocal作为key,使用我们设置的value作为value

    如果 key threadlocalnull 了,这个 entry 就可以清除了。

    ThreadLocalMap中的key为ThreadLocal的弱引用,当key为null时,ThreadLocal会被当成垃圾回收 。

     //首先获取当前线程对象
     Thread t = Thread.currentThread();
     //获取线程中变量 ThreadLocal.ThreadLocalMap
     ThreadLocalMap map = getMap(t); //弱引用

    虽然ThreadLocalMap的key没了,但是value还在,这就造成了内存泄漏。

image-20220710175107187

 

  • 线程安全 update table set value = [newValue] where id=[xx] and value=[oldValue]

    • CAS:CAS是Compare And Swap的简称,即:比较并交换。这是当前的处理器基本都支持的一种指令。每个CAS指令包括三个运算符,一个内存地址V,一个期望值A和一个新值B,CAS指令执行的时候是去判断这个地址V上的值和期望值A是否相等,相等则将地址V上的值修改为新值B,不等则不作任何操作。CAS操作实际实现是在一个循环中不断执行CAS指令,直到成功为止。

    • 线程池@Async 对当前的主业务流程无影响的操作,放入线程池执行。

      比如加载文章详情和文章阅读数更新,这两个业务流程需要分开执行,互不影响。

 

  • 文章发布 @Transactional 事务处理。

 

  • 后台权限管理系统 Spring Security

 

image-20220710202726918

 

  • 统一日志记录

  • 定义切点、实现切面

image-20220710203446152

  • 统一缓存处理

    • 定义切点、实现切面

image-20220710203703333

  • 统一异常处理

    • @ControllerAdvice 对所有带Controller注解的类实施异常拦截

image-20220710203759963

  • 统一登录拦截

    • 先写Handler拦截类,再到WebConfig类配置生效

image-20220710204028104

image-20220710204301660

 

标签:登录,站码,redis,ThreadLocal,博客,token,线程,value,神之路
来源: https://www.cnblogs.com/rainbow-1/p/16464383.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有