《Spring实战》摘录 - 21

201

问题: #12.1.4-1 | Neo4j是什么

回答: 一种很流行的图数据库。

202

问题: #12.3.1 | Spring Data Redis为四种Redis客户端实现提供了连接工厂

回答:

  • JedisConnectionFactory
  • JredisConnectionFactory
  • LettuceConnectionFactory
  • SrpConnectionFactory

203

问题: #12.3.3 | 当某个条目保存到Redis key-value存储的时候,key和value都会使用Redis的序列化器(serializer)进行序列化。Spring Data Redis提供了多个这样的序列化器,包括:

回答:

  • GenericToStringSerializer:使用Spring转换服务进行序列化;
  • JacksonJsonRedisSerializer:使用Jackson 1,将对象序列化为JSON;
  • Jackson2JsonRedisSerializer:使用Jackson 2,将对象序列化为JSON;
  • JdkSerializationRedisSerializer:使用Java序列化;
  • OxmSerializer:使用Spring O/X映射的编排器和解排器(marshaler和unmarshaler)实现序列化,用于XML序列化;
  • StringRedisSerializer:序列化String类型的key和value。

204

问题: #13.1-1 | 通过使用@EnableCaching启用注解驱动的缓存

回答:

package com.habuma.cachefun;import net.sf.ehcache.CacheManager;import org.springframework.cache.annotation.EnableCaching:import org.springframework.cache.concurrent.ConcurrentMapCacheManager; import org.springframework.context.annotation.Bean;import org.springframework.contextannotation.Configuration;
@Configuration@Enablecaching  //启用缓存public class CachingConfig(    @Bean    public CacheManager cacheManager()( //声明缓存管理器      return new ConcurrentMapCacheManager();    }}

205

问题: #13.1-2 | 通过使用启用注解驱动的缓存

回答:

<?xml version="1.0" encoding="UTF-8"><beans xmlns="http://www.spring.org/schema/beans"    xmins:xsi="http://www.w3.org/20/XMLSchema-instance"    xmins:cache="http://www.springframework.org/schema/cache"    xsi:schemaLocation="      http://www.springframework.org/schema/beans      http://www.springframework.org/sch/beans/spring-beansxsd      http://www.springframework.org/schema/cache      http://www.springframework.org/sc/cache/spring-cachexsd">
  <cache:annotation-driven/> //启用缓存
  <bean id="cacheManager" class=      "org.springframework.cache.concurrent.ConcurrentMapCacheMan" /> //声明缓存管理器  </beans></beans>

206

问题: #13.1.1-1 | Spring 3.1内置了五个缓存管理器实现,如下所示:

回答:

  • SimpleCacheManager
  • NoOpCacheManager
  • ConcurrentMapCacheManager
  • CompositeCacheManager
  • EhCacheCacheManager

207

问题: #13.1.1-2 | 以Java配置的方式设置EhCacheCacheManager

回答:

package com.habuma.cachefun;import net.sf.ehcache.CacheManager;import org.springframework.cache.annotation.Enablecaching:import org.springframework.cache.ehcache.EhCachecacheManager;import org.springframework.cache.ehcache.EhCacheManagerFactoryBean; import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.core.io.classPathResource;@Configuration@Enablecachingpublic class CachingConfig{ 
  @Bean  public EhCachecacheManager cacheManager(CacheManager cm){//配置EhCachecacheManager      return new EhCachecacheManage(cm);  }   @Bean  public EhCacheManagerFactoryBear ehcache(){//配置EhCacheManagerFactoryBear      EhCacheManagerFactoryBean ehcacheFactoryBean = new EhCacheManagerFactoryBean();      ehCacheFactoryBean.setConfigLocation(new ClassPathResource("com/habuma/spittr/cache/ehcache.xml"));      return ehCacheFactoryBean;  }}

208

问题: #13.2-1 | Spring提供了四个注解来声明缓存规则

回答:

  • @Cacheable --- 表明Spring在调用方法之前,首先应该在缓存中查找方法的返回值。如果这个值能够找到,就会返回缓存的值。否则的话,这个方法就会被调用,返回值会放到缓存之中
  • @CachePut --- 表明Spring应该将方法的返回值放到缓存中。在方法的调用前并不会检查缓存,方法始终都会被调用
  • @CacheEvict --- 表明Spring应该在缓存中清除一个或多个条目
  • @Caching --- 这是一个分组的注解,能够同时应用多个其他的缓存注解

209

问题: #13.2.1-1 | @Cacheable和@CachePut有一些共有的属性

回答:

  • value --- String[] --- 要使用的缓存名称
  • condition --- String --- SpEL表达式,如果得到的值是false的话,不会将缓存应用到方法调用上
  • key --- String --- SpEL表达式,用来计算自定义的缓存key
  • unless --- String --- SpEL表达式,如果得到的值是true的话,返回值不会放到缓存之中

210

问题: #13.2.2-2 | @CacheEvict注解的属性,指定了哪些缓存条目应该被移除掉

回答:

  • value --- String [] --- 要使用的缓存名称
  • key --- String --- SpEL表达式,用来计算自定义的缓存key
  • condition --- String --- SpEL表达式,如果得到的值是false的话,缓存不会应用到方法调用上
  • allEntries --- boolean --- 如果为true的话,特定缓存的所有条目都会被移除掉
  • beforeInvocation --- boolean --- 如果为true的话,在方法调用之前移除条目。如果为false(默认值)的话,在方法成功调用之后再移除条目

原文发布于微信公众号 - 怀英的自我修炼(hydzwxl)

原文发表时间:2019-06-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券