redis作为mybatis缓存

mac2025-03-14  12

redis作为mybatis缓存

1、redis作为缓存使用2、 redis作为mybatis二级缓存2.1、springboot cache的使用:可以结合redis、ehcache等缓存2.2、springboot cache的整合步骤:2.3、springboot cache自定义项 3、redis缓存和数据库的对比3.1、apache abtest3.2、abtest的安装3.3、 4、redis实现分布式集群环境session共享4.1、cookie与session4.2、redis实现分布式集群配置过程:

1、redis作为缓存使用

用户第一次访问的时候获取数据库的值,再次访问时直接从缓存中获取数据设置缓存过期时间项目8080端口是对外端口(向外部暴露的端口),区别于内部进程号,查内部端口用ps -ef|grep port,查外部端口用lsof -i:port

2、 redis作为mybatis二级缓存

2.1、springboot cache的使用:可以结合redis、ehcache等缓存

一级缓存是:sqlSession,sql建立连接到关闭连接的数据缓存二级缓存是:全局

@CacheConfig(cacheNames=“userInfoCache”) 在同个redis里面必须唯一

@Cacheable(查) : 来划分可缓存的方法 - 即,结果存储在缓存中的方法,以便在后续调用(具有相同的参数)时,返回缓存中的值而不必实际执行该方法

@CachePut(修改、增加) :当需要更新缓存而不干扰方法执行时,可以使用@CachePut注释。也就是说,始终执行该方法并将其结果放入缓存中(根据@CachePut选项)

@CacheEvict(删除) :对于从缓存中删除陈旧或未使用的数据非常有用,指示缓存范围内的驱逐是否需要执行而不仅仅是一个条目驱逐

2.2、springboot cache的整合步骤:

1)引入pom.xml依赖:

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-cache</artifactId> </dependency>

2)启动类开启缓存注解:

@EnableCaching

3)在方法上面加入SpEL

4)springboot cache 存在问题

第一,生成key过于简单,容易冲突userCache::3第二,无法设置过期时间,默认过期时间为永久不过期第三,配置序列化方式,默认的是序列化JDKSerialazable

2.3、springboot cache自定义项

1)自定义KeyGenerator

2)自定义cacheManager,设置缓存过期时间

3)自定义序列化方式,Jackson

3、redis缓存和数据库的对比

3.1、apache abtest

ab是Apache HTTP server benchmarking tool,可以用以测试HTTP请求的服务器性能

3.2、abtest的安装

1)yum install -y httpd-tools 2)ab -V检验是否安装成功

3.3、

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:扛不住

4、redis实现分布式集群环境session共享

多机器部署同一套服务(代码),性能更好,更承受更高的用户并发

4.1、cookie与session

1)Cookie是什么? Cookie 是一小段文本信息,伴随着用户请求和页面在 Web 服务器和浏览器之间传递。Cookie 包含每次用户访问站点时 Web 应用程序都可以读取的信息,我们可以看到在服务器写的cookie,会通过响应头Set-Cookie的方式写入到浏览器

2)HTTP协议是无状态的,并非TCP一样进行三次握手,对于一个浏览器发出的多次请求,WEB服务器无法区分是不是来源于同一个浏览器。所以服务器为了区分这个过程会通过一个 sessionid来区分请求,而这个sessionid是怎么发送给服务端的呢。cookie相对用户是不可见的,用来保存这个sessionid是最好不过了

4.2、redis实现分布式集群配置过程:

<dependency> <groupId>org.springframework.session</groupId> <artifactId>spring-session-data-redis</artifactId> </dependency> 开启redis session缓存 @EnableRedisHttpSession

3)指定缓存的时间 maxInactiveIntervalInSeconds

要查的key:spring:session:sessions:expires:+‘sessionId’的过期时间

ttl 查看有效时间 3、验证过程 使用隐身模式清空cookie来验证缓存的时间

最新回复(0)