发表于: 2020-01-08 20:40:33
2 1118
啥也不说就是干!!!
今天完成的事情:
1、使用 RedisTemplate做缓存
添加相关依赖
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
<version>1.8.4.RELEASE</version>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
配置 RedisTemplate bean
<!--3.redis-->
<bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
<!--最大空闲数-->
<property name="maxIdle" value="50"/>
<!--最大连接数-->
<property name="maxTotal" value="10000"/>
<!--最大等待时间-->
<property name="maxWaitMillis" value="20000"/>
</bean>
<bean id="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
<!--Redis服务地址-->
<property name="hostName" value="f0t1.top"/>
<!--端口号-->
<property name="port" value="6379"/>
<!--如果有密码则需要配置密码-->
<!--<property name="password" value="password"/>-->
<!--连接池配置-->
<property name="poolConfig" ref="poolConfig"/>
</bean>
<bean id="redisTemplate"
class="org.springframework.data.redis.core.RedisTemplate"
p:connection-factory-ref="connectionFactory">
<property name="keySerializer" value="org.springframework.data.redis.serializer.StringRedisSerializer"/>
<property name="valueSerializer" value="org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer"/>
</bean>
在代码中添加缓存
查询学生信息时候,先从缓存中获取,如果没有再从数据库中查询并放入缓存
@Resource
private RedisTemplate redisTemplate;
public static final String KEY_PATTERN = "student:%d:%s";
@Override
public Student getStudentInfo(Integer id, String name) {
String key = String.format(KEY_PATTERN,id,name);
Student student = JSONUtil.parseObject((String) redisTemplate.opsForValue().get(key),Student.class);
if(student==null){
student = studentMapper.queryStudentInfo(id,name);
redisTemplate.opsForValue().set(key,JSONUtil.toJSONBytes(student));
}
return student;
}
添加数据时候,先插入数据库,在放入缓存中
@Override
public int addStudent(Student student) {
Integer stuId = studentMapper.addStudent(student);
String key = String.format(KEY_PATTERN,stuId,student.getName());
student.setId(stuId);
redisTemplate.opsForValue().set(key,JSONUtil.toJSONBytes(student));
return stuId;
}
测试接口,插入数据时候已经存至 Redis 缓存中
2、Jmeter 压测使用缓存的查询接口
在无缓存的情况下:
在 Redis 做缓存的时候
可以看到 有缓存时候 Average 平均请求时间少了很多
3、Nginx 做负载压测接口
在 Nginx 中配置两台 tomcat 虚拟节点
启动 Nginx 对接口进行压测,结果如下:
请求耗费的时间还是缩短了不少
Memcache 可能之后项目用的比较少,这里就不使用 Memcache 进行压测了
明天计划的事情:
1、任务6深度思考部分
2、提交任务6
遇到的问题:
对于 Redis 做缓存,一般项目中都有哪些数据需要缓存。分页查询的数据需要缓存么?如果需要缓存该怎么缓存,并且在数据变动的时候如何更新缓存?
收获:
学习了 RedisTemplate 的使用及常用的 API 操作
评论