SpringBoot应用系列文章
SpringBoot应用之配置中心
SpringBoot应用之分布式会话
SpringBoot应用之分布式索引
SpringBoot应用之分布式缓存
本文主要讲怎么在SpringBoot中集成redis,以及使用redis的缓存以及高效的集合操作功能。
具体查看docker搭建redis集群这篇文章,该篇搭建了一主三从的redis集群。
spring.redis.database=0 spring.redis.host=192.168.99.100 #spring.redis.password= # Login password of the redis server. spring.redis.pool.max-active=8 spring.redis.pool.max-idle=8 spring.redis.pool.max-wait=-1 spring.redis.pool.min-idle=0 spring.redis.port=6379 #spring.redis.sentinel.master= # Name of Redis server. #spring.redis.sentinel.nodes= # Comma-separated list of host:port pairs. spring.redis.timeout=10
@RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = RedisdemoApplication.class) public class RedisdemoApplicationTests { @Autowired private StringRedisTemplate template; @Autowired private DemoService demoService; @Test public void set(){ String key = "test-add"; String value = "hello"; template.opsForValue().set(key,value); assertEquals(value,template.opsForValue().get(key)); } @Test public void incr(){ String key = "test-incr"; template.opsForValue().increment(key, 1); assertEquals(template.opsForValue().get(key),"1"); } @Test public void should_not_cached(){ demoService.getMessage("hello"); } @Test public void should_cached(){ demoService.getMessage("patterncat"); } @Test public void should_cache_bean(){ ReportBean b1 = demoService.getReport(1L, "2016-01-30", "hello", "world"); ReportBean b2 = demoService.getReport(1L, "2016-01-30", "hello", "world"); } }
@SpringBootApplication @EnableCaching public class RedisdemoApplication { /** * 设置缓存对象的序列化方式,不设置会报错 * 另外对于json序列化,对象要提供默认空构造器 * @param redisTemplate * @return */ @Bean public CacheManager cacheManager(RedisTemplate redisTemplate) { Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); ObjectMapper om = new ObjectMapper(); om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); jackson2JsonRedisSerializer.setObjectMapper(om); redisTemplate.setValueSerializer(jackson2JsonRedisSerializer); RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate); cacheManager.setDefaultExpiration(300); return cacheManager; } /** * 自定义key的生成策略 * @return */ @Bean public KeyGenerator myKeyGenerator(){ return new KeyGenerator() { @Override public Object generate(Object target, Method method, Object... params) { StringBuilder sb = new StringBuilder(); sb.append(target.getClass().getName()); sb.append(method.getName()); for (Object obj : params) { sb.append(obj.toString()); } return sb.toString(); } }; } public static void main(String[] args) { SpringApplication.run(RedisdemoApplication.class, args); } }
@Component public class DemoService { /** * Using SpEL for conditional caching - only cache method executions when * the name is equal to "Joshua" */ @Cacheable(value="messageCache", condition="'patterncat'.equals(#name)") public String getMessage(String name) { System.out.println("Executing DemoService" + ".getHelloMessage(/"" + name + "/")"); return "Hello " + name + "!"; } @Cacheable(value = "reportcache",keyGenerator = "myKeyGenerator") public ReportBean getReport(Long id, String date, String content, String title) { System.out.println("无缓存的时候调用这里---数据库查询"); return new ReportBean(id, date, content, title); } }
本工程 github
Spring Boot使用redis做数据缓存
Caching with Spring Data Redis
Caching Data in Spring Using Redis
Redis 在 Spring-boot 中使用介绍
删除redis所有KEY