摘要:配置以及缓存是一种数据库,一种数据库,一种数据库如何缓存将想要缓存的数据添加到数据库中基于内存亦可持久化的数据库,所以速度快配置启动缓存是默认生成主键的方式是缓存管理器是的一种模板,还有一种模板是手动使用做缓存思路
redis 配置以及缓存(javaconfig) redis
是一种数据库,一种数据库,一种数据库
如何缓存:将想要缓存的数据添加到 redis 数据库中
redis:基于内存亦可持久化的 Key-Value 数据库,所以速度快
mavengradlecom.fasterxml.jackson.core jackson-databind 2.4.1.3 redis.clients jedis ${redis.version} org.springframework.data spring-data-redis ${spring.data.redis.version} org.springframework spring-context ${spring.version}
dependencies { compile("org.springframework.boot:spring-boot-starter-data-redis") compile("com.fasterxml.jackson.core:jackson-databind:$jacksonVersion") compile("redis.clients:jedis:$redisVersion") ... }redis 配置
@EnableCaching @Configuration public class RedisConfig extends CachingConfigurerSupport { @Bean @Override public KeyGenerator keyGenerator() { return (target, method, 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(); }; } @Bean public CacheManager cacheManager(RedisTemplate redisTemplate) { return new RedisCacheManager(redisTemplate); } @Bean public RedisConnectionFactory redisCF() { JedisConnectionFactory cf = new JedisConnectionFactory(); cf.setPassword("$2a$10$7e3cgzcCqwapf.TmEl1vi.b4ibSRxhqRjZKmRf9fV5b5u5L/CWaIa"); return cf; } @Bean public StringRedisTemplate redisTemplate(RedisConnectionFactory cf) { StringRedisTemplate redis = new StringRedisTemplate(cf); Jackson2JsonRedisSerializer serializer = new Jackson2JsonRedisSerializer(Object.class); ObjectMapper objectMapper = new ObjectMapper(); objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); serializer.setObjectMapper(objectMapper); redis.setValueSerializer(serializer); redis.afterPropertiesSet(); return redis; } ... }
@EnableCaching 启动 spring 缓存
keyGenerator bean 是默认生成主键的方式
cacheManager bean 是缓存管理器
StringRedisTemplate 是 spring-data-redis 的一种模板,还有一种模板是 RedisTemplate
public ListfindAll() { long provinces_redis_size = redis.opsForList().size("provinces").longValue(); List redisProvinces = redis.opsForList().range("provinces", 0, provinces_redis_size); if(redisProvinces.size() != 0) return redisProvinces; List persistProvinces = repository.findAll(); for(Provinces provinces : persistProvinces) { redis.opsForList().rightPush("provinces", provinces); } return persistProvinces; }
思路就是查询的时候从 redis 中查询,若查到了,就将数据返回;若没查到,就从正在使用的数据库查(比如 MySql,H2等),然后将数据放入 redis 数据库中
使用 spring 注解缓存@Cacheable(value = "provincesCache", key = ""provinces"") public ListfindAllWithSpringCache() { return repository.findAll(); }
@Cacheable(value = "citiesCache", key = "#provinceId") public List测试findByProvinceId(String provinceId) { return repository.findByProvinceId(provinceId); }
测试缓存省份 provinces
@SpringBootTest @RunWith(SpringJUnit4ClassRunner.class) public class ProvincesServiceTest { @Autowired private ProvincesService provincesService; @Autowired private RedisTemplateredis; @Autowired private StringRedisTemplate stringRedis; @After public void cleanUp() { redis.delete("provinces"); stringRedis.delete("provinces"); stringRedis.delete("provincesCache~keys"); } @Test public void findAll() { List list = provincesService.findAll(); Assert.assertEquals(list.size(), 34); } @Test public void findAllWithSpringCache() { List list = provincesService.findAllWithSpringCache(); Assert.assertEquals(list.size(), 34); } }
测试缓存市区 cities
@SpringBootTest @RunWith(SpringJUnit4ClassRunner.class) public class CitiesServiceTest { @Autowired private CitiesService citiesService; @Autowired private StringRedisTemplate stringRedis; @After public void cleanUp() { stringRedis.delete("440000"); } @Test public void findByProvinceId() { List源码地址list = citiesService.findByProvinceId("440000"); Assert.assertEquals(list.size(), 21); } }
springmvc: https://git.oschina.net/seald...
springboot: https://git.oschina.net/seald...
建议看 springboot 的,springmvc 的加了挺多测试,比较不清晰
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/76409.html
摘要:否则,这个方法就会被调用,返回值会放到缓存之中表名应该将方法的返回值放到缓存中。 Redis是一种特殊类型的数据库,他被称之为key-value存储 本文覆盖缓存和存储两方面进行说明,使用的是Spring 4.0和Java配置方式 代码地址下载地址:https://github.com/zoeminghong/springmvc-javaconfig 存储 Redis的配置 packa...
摘要:介绍在配置和直接注解式配置之外还有一种有趣的选择方式,是指基于配置的。传统的一般都是基本配置的,后来新增了许多的注解,特别是,基本都是清一色的。代码如下创建对象创建对象创建一个对象运行后的两种结果 1.javaconfig介绍 在XML配置和直接注解式配置之外还有一种有趣的选择方式-JavaConfig,java config是指基于java配置的spring。传统的Spring一般都...
摘要:装配任何一个成功的应用都是由多个为了实现某个业务目标而相互协作的组件构成的创建应用对象之间协作关系的行为通常称为装配,这也是依赖注入配置的可选方案在中进行显示配置在中进行显示配置隐式的发现机制和自动装配自动化装配组件扫描会自动发现应用上下文 装配Bean 任何一个成功的应用都是由多个为了实现某个业务目标而相互协作的组件构成的 创建应用对象之间协作关系的行为通常称为装配(wiring)...
阅读 2793·2023-04-26 02:49
阅读 3336·2021-11-25 09:43
阅读 3253·2021-10-09 09:43
阅读 2919·2021-09-28 09:44
阅读 2377·2021-09-22 15:29
阅读 4380·2021-09-14 18:02
阅读 2735·2021-09-03 10:48
阅读 3387·2019-08-30 12:47