发表于: 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 操作


返回列表 返回列表
评论

    分享到