发表于: 2017-10-26 23:32:15

2 674



今天完成的事情:

1. spring 整合redis

2. redis的test写出运行成功

3. 了解了spring缓存标签的作用



明天计划的事情

. 完成redis

2. 部署代码到没有问题

3. 结束任务6


遇到的问题:

@Component("redies")
public class RedisUtil {

/**
    * 日志记录
    */
   private Logger logger = LoggerFactory.getLogger(this.getClass());

   @Autowired
   private RedisTemplate<String, String> redisTemplate;


加了上面的

@Component("redies")

下面的红字就会报错,怎么回事????




收获:

1. spring 整合redis,用的是缓存标签和手动存储


<!-- 配置JedisPoolConfig实例 -->
<bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
   <property name="maxIdle" value="300" />
   <property name="maxTotal" value="600" />
   <property name="maxWaitMillis" value="1000" />
   <property name="testOnBorrow" value="true"/>
</bean>


<!-- 配置JedisConnectionFactory -->
<bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
   <property name="hostName" value="localhost"/>
   <property name="port" value="6379"/>
   <property name="password" value="qwe123"/>
   <property name="database" value="0"/>
   <property name="poolConfig" ref="poolConfig"/>
</bean>

<!-- 配置RedisTemplate -->
<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
   <property name="connectionFactory" ref="jedisConnectionFactory"/>
</bean>

<!-- 配置RedisCacheManager -->
<bean id="redisCacheManager" class="org.springframework.data.redis.cache.RedisCacheManager">
   <constructor-arg name="redisOperations" ref="redisTemplate" />
   <property name="defaultExpiration" value="3000"/>
</bean>

<!-- 配置RedisCacheConfig -->
<bean id="redisCacheConfig" class="jnshu.tasksix.util.RedisCacheConfig">
   <constructor-arg ref="jedisConnectionFactory" />
   <constructor-arg ref="redisTemplate" />
   <constructor-arg ref="redisCacheManager" />
</bean>


发现标签的一个缺陷:

@Cacheable(value = "listStudentTable")

value作为缓存的名称是不能用传入参数的值,也就是说不能用SL表达式,而key可以用,不灵活

例如我要存每个用户的信息,缓存名就是用户名,就不能用。需要自己手动写



2. redis的test写出运行成功


@Autowired
RedisUtil redisUtil;


@Test
public void testRedis(){
loggerMencache.info("asda");
   redisUtil.cacheValue("holle","world");
   String hello = redisUtil.getValue("holle");
   loggerMencache.info("hello: "+ hello);
   Assert.assertEquals("world",hello);

}


或许可以把redis的方法都变成静态就不用@Autowired



3. 了解了spring缓存标签的作用


@Cacheable

       @Cacheable可以标记在一个方法上,也可以标记在一个类上。当标记在一个方法上时表示该方法是支持缓存的,当标记在一个类上时则表示该类所有的方法都是支持缓存的。对于一个支持缓存的方法,Spring会在其被调用后将其返回值缓存起来,以保证下次利用同样的参数来执行该方法时可以直接从缓存中获取结果,而不需要再次执行该方法。



 @CachePut

       在支持Spring Cache的环境下,对于使用@Cacheable标注的方法,Spring在每次执行前都会检查Cache中是否存在相同key的缓存元素,如果存在就不再执行该方法,而是直接从缓存中获取结果进行返回,否则才会执行并将返回结果存入指定的缓存中。@CachePut也可以声明一个方法支持缓存功能。与@Cacheable不同的是使用@CachePut标注的方法在执行前不会去检查缓存中是否存在之前执行过的结果,而是每次都会执行该方法,并将执行结果以键值对的形式存入指定的缓存中。



@CacheEvict

       @CacheEvict是用来标注在需要清除缓存元素的方法或类上的。当标记在一个类上时表示其中所有的方法的执行都会触发缓存的清除操作。


 @Caching

       @Caching注解可以让我们在一个方法或者类上同时指定多个Spring Cache相关的注解。其拥有三个属性:cacheable、put和evict,分别用于指定@Cacheable、@CachePut和@CacheEvict。




进度: 

         任务开始时间:10.13

         预计完成时间:10.27

         是否有延期风险:无

禅道:http://task.ptteng.com/zentao/project-task-264.htm


PS:任务六快完了!(用缓存注解结合redis试试)



返回列表 返回列表
评论

    分享到