1.@Slf4j
log.debug(“记录日志”)
2.前端以json传数据,后端必须要用@RequestBody XX xx来接受
3.x x x.toString();将xx转换为String.
4.拦截器:implements HandlerInterceptor{
//它的三个方法:
public boolean preHandle:前置拦截,进入controller之前
public void postHandle:controller执行之后
public void afterCompletion:渲染之后
4.1拦截器写好以后要写一个配置类,让拦截器生效:

@Override
    public void addInterceptors(InterceptorRegistry registry) {
       		//new LoginInterceptor()是拦截器名字
         registry.addInterceptor(new LoginInterceptor())
         .excludePathPatterns("/shop/**",//**代表过滤shop后所有
                 "user/code",//代表拦截
                 "user/login"
                 )
         ;
    }

5.sesionn保存集群问题:不能实现数据共享,多台tomcat不能实现session共享的数据.

5.1替代session共享条件:必须数据共享,内存存储,key,value结构

二:Redis:

redis 永久有效时间 python redis设置永久有效_拦截器

2.1基于redis短信登陆:

@Autowired
    StringRedisTemplate redis;
    
    redis.opsForValue().set("log:code"+phone,code,2, TimeUnit.MINUTES)//2分钟过期
            stringRedisTemplate.expire("login:token"+token,30,TimeUnit.MINUTES);//expire方法代表设置key有效期
stringRedisTemplate.opsForHash().entries(key)//entries代表返回hash的值,以map形式返还

3.@RestController与@Controller区别:@RestController相当于@Controller+@RestBody,@RestController的返回值是不会跳转一个页面,它会去返回String、Object、json等实体对象。@Controller则会返回跳转页面,当它加上@RestBody则效果会跟@RestController一样

4.什么是缓存:存储数据的临时地方,读写性能高

4.1缓存作用:降低后台的负载,提高读写效率,降低响应时间。

缓存成本:数据一致性成本,造成代码维护成本,

5.缓存更新策略:超时剔除:给缓存数据添加数据过期时间,到期自动删除,下次查询再更新缓存。主动更新:编写业务逻辑,在修改数据库的同时,更新缓存。

5.1主动更新策略:操作数据库和缓存考虑的问题:

redis 永久有效时间 python redis设置永久有效_缓存_02

所以应该先操作数据库再删缓存,因为缓存比较快,操作数据库比较慢。

三、缓存穿透:请求的数据不在mysql和redsi中,因为不在redsi中,所以会发到mysql中,这时候如果它大并发的发请求,会造成系统奔溃,所以给redis中设置null值,让它不要请求到mysql中。也可以增强id的复杂度

四、缓存雪崩:大量key失效或者redis宕机了,导致大量请求到数据库,带来巨大压力。

4.1解决方案:给不同的key随机加过期值.(2).利用redis集群提高服务的可用性.(3).给缓存业务添加降级限流策略。(4).给业务添加多极缓存.

五、缓存击穿:高并发访问一个过期的key

5.1解决方案:加互斥锁.(2)逻辑过期

redis 永久有效时间 python redis设置永久有效_拦截器_03

redis 永久有效时间 python redis设置永久有效_redis_04

setnx key value :key不存在才执行,不然就不执行

redis 永久有效时间 python redis设置永久有效_redis_05


5.2逻辑过期:不是真正的过期,它的过期时间不是redis控制的,而是由我们自己决定的

redis 永久有效时间 python redis设置永久有效_redis_06


三、hash类型:value是一个无序字典,hash结构可以将对象中的每个字段独立存储, key field value EG:hset hello name zx

hmset一次添加多个,hkeys获取一个hash类型下的所有field。hvals获取一个hash类型的key的所有的value

3.1List:可以看成一个双向链表。支持左右查询,因为是链表,所有插入快,查找快。元素可以重复。常用来存储有序数据,比如朋友圈点赞。评论列表等。lpush key value,rpush key value。lpop key删除左1

3.2set:也是一个hash表,无序,不可重复,查找快,支持交集,并集等操作。sadd key value.

3.3SortedSet是一个有序的集合,元素不可重复。查询速度快。zadd .也支持交集并集

四、分布式锁:因为一个jvm只有一把锁,所以可以用redisson了:

redis 永久有效时间 python redis设置永久有效_redis_07

redis 永久有效时间 python redis设置永久有效_redis 永久有效时间 python_08