@CacheConfig(cacheNames=“userInfoCache”) 在同个redis里面必须唯一
@Cacheable(查) : 来划分可缓存的方法 - 即,结果存储在缓存中的方法,以便在后续调用(具有相同的参数)时,返回缓存中的值而不必实际执行该方法
@CachePut(修改、增加) :当需要更新缓存而不干扰方法执行时,可以使用@CachePut注释。也就是说,始终执行该方法并将其结果放入缓存中(根据@CachePut选项)
@CacheEvict(删除) :对于从缓存中删除陈旧或未使用的数据非常有用,指示缓存范围内的驱逐是否需要执行而不仅仅是一个条目驱逐
1)引入pom.xml依赖:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-cache</artifactId> </dependency>2)启动类开启缓存注解:
@EnableCaching3)在方法上面加入SpEL
4)springboot cache 存在问题
第一,生成key过于简单,容易冲突userCache::3第二,无法设置过期时间,默认过期时间为永久不过期第三,配置序列化方式,默认的是序列化JDKSerialazable1)自定义KeyGenerator
2)自定义cacheManager,设置缓存过期时间
3)自定义序列化方式,Jackson
ab是Apache HTTP server benchmarking tool,可以用以测试HTTP请求的服务器性能
1)yum install -y httpd-tools 2)ab -V检验是否安装成功
ab -n1000 -c10 http://192.168.1.188:8090/getByCache?id=1 ab -n1000 -c10 http://192.168.1.188:8090/getUser?id=1
1)-n:进行http请求的总个数 2)-c:请求的client个数,也就是请求并发数 3)统计qps:qps即每秒并发数,request per second
统计: 10个并发的情况下 redis qps:963.85[#/sec] (mean) DB qps: 766.75 [#/sec] (mean)100个并发的情况下 1000个 redis qps:1130.60 [#/sec] (mean) DB qps:956.15 [#/sec] (mean)
100个并发的情况下,进行10000个请求 redsi qps: 2102.39 [#/sec] (mean) DB qps: 679.07 [#/sec] (mean)
500个并发的情况下,进行10000个请求 redis qps:374.91 [#/sec] (mean) DB qps:扛不住
多机器部署同一套服务(代码),性能更好,更承受更高的用户并发
1)Cookie是什么? Cookie 是一小段文本信息,伴随着用户请求和页面在 Web 服务器和浏览器之间传递。Cookie 包含每次用户访问站点时 Web 应用程序都可以读取的信息,我们可以看到在服务器写的cookie,会通过响应头Set-Cookie的方式写入到浏览器
2)HTTP协议是无状态的,并非TCP一样进行三次握手,对于一个浏览器发出的多次请求,WEB服务器无法区分是不是来源于同一个浏览器。所以服务器为了区分这个过程会通过一个 sessionid来区分请求,而这个sessionid是怎么发送给服务端的呢。cookie相对用户是不可见的,用来保存这个sessionid是最好不过了
3)指定缓存的时间 maxInactiveIntervalInSeconds
要查的key:spring:session:sessions:expires:+‘sessionId’的过期时间
ttl 查看有效时间 3、验证过程 使用隐身模式清空cookie来验证缓存的时间