摘要:配置以及緩存是一種數(shù)據(jù)庫,一種數(shù)據(jù)庫,一種數(shù)據(jù)庫如何緩存將想要緩存的數(shù)據(jù)添加到數(shù)據(jù)庫中基于內(nèi)存亦可持久化的數(shù)據(jù)庫,所以速度快配置啟動緩存是默認生成主鍵的方式是緩存管理器是的一種模板,還有一種模板是手動使用做緩存思路
redis 配置以及緩存(javaconfig) redis
是一種數(shù)據(jù)庫,一種數(shù)據(jù)庫,一種數(shù)據(jù)庫
如何緩存:將想要緩存的數(shù)據(jù)添加到 redis 數(shù)據(jù)庫中
redis:基于內(nèi)存亦可持久化的 Key-Value 數(shù)據(jù)庫,所以速度快
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 中查詢,若查到了,就將數(shù)據(jù)返回;若沒查到,就從正在使用的數(shù)據(jù)庫查(比如 MySql,H2等),然后將數(shù)據(jù)放入 redis 數(shù)據(jù)庫中
使用 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); } }
測試緩存市區(qū) 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 的加了挺多測試,比較不清晰
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/76409.html
摘要:否則,這個方法就會被調(diào)用,返回值會放到緩存之中表名應(yīng)該將方法的返回值放到緩存中。 Redis是一種特殊類型的數(shù)據(jù)庫,他被稱之為key-value存儲 本文覆蓋緩存和存儲兩方面進行說明,使用的是Spring 4.0和Java配置方式 代碼地址下載地址:https://github.com/zoeminghong/springmvc-javaconfig 存儲 Redis的配置 packa...
摘要:介紹在配置和直接注解式配置之外還有一種有趣的選擇方式,是指基于配置的。傳統(tǒng)的一般都是基本配置的,后來新增了許多的注解,特別是,基本都是清一色的。代碼如下創(chuàng)建對象創(chuàng)建對象創(chuàng)建一個對象運行后的兩種結(jié)果 1.javaconfig介紹 在XML配置和直接注解式配置之外還有一種有趣的選擇方式-JavaConfig,java config是指基于java配置的spring。傳統(tǒng)的Spring一般都...
摘要:裝配任何一個成功的應(yīng)用都是由多個為了實現(xiàn)某個業(yè)務(wù)目標而相互協(xié)作的組件構(gòu)成的創(chuàng)建應(yīng)用對象之間協(xié)作關(guān)系的行為通常稱為裝配,這也是依賴注入配置的可選方案在中進行顯示配置在中進行顯示配置隱式的發(fā)現(xiàn)機制和自動裝配自動化裝配組件掃描會自動發(fā)現(xiàn)應(yīng)用上下文 裝配Bean 任何一個成功的應(yīng)用都是由多個為了實現(xiàn)某個業(yè)務(wù)目標而相互協(xié)作的組件構(gòu)成的 創(chuàng)建應(yīng)用對象之間協(xié)作關(guān)系的行為通常稱為裝配(wiring)...
閱讀 2894·2023-04-26 02:49
閱讀 3461·2021-11-25 09:43
閱讀 3437·2021-10-09 09:43
閱讀 3020·2021-09-28 09:44
閱讀 2461·2021-09-22 15:29
閱讀 4538·2021-09-14 18:02
閱讀 2794·2021-09-03 10:48
閱讀 3438·2019-08-30 12:47