亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

redis 配置以及緩存(javaconfig)

terro / 3478人閱讀

摘要:配置以及緩存是一種數(shù)據(jù)庫(kù),一種數(shù)據(jù)庫(kù),一種數(shù)據(jù)庫(kù)如何緩存將想要緩存的數(shù)據(jù)添加到數(shù)據(jù)庫(kù)中基于內(nèi)存亦可持久化的數(shù)據(jù)庫(kù),所以速度快配置啟動(dòng)緩存是默認(rèn)生成主鍵的方式是緩存管理器是的一種模板,還有一種模板是手動(dòng)使用做緩存思路

redis 配置以及緩存(javaconfig) redis

是一種數(shù)據(jù)庫(kù),一種數(shù)據(jù)庫(kù),一種數(shù)據(jù)庫(kù)

如何緩存:將想要緩存的數(shù)據(jù)添加到 redis 數(shù)據(jù)庫(kù)中

redis:基于內(nèi)存亦可持久化的 Key-Value 數(shù)據(jù)庫(kù),所以速度快

maven

    com.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}
gradle
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 啟動(dòng) spring 緩存

keyGenerator bean 是默認(rèn)生成主鍵的方式

cacheManager bean 是緩存管理器

StringRedisTemplate 是 spring-data-redis 的一種模板,還有一種模板是 RedisTemplate

手動(dòng)使用 redis 做緩存
public List findAll() {
    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;
}

思路就是查詢的時(shí)候從 redis 中查詢,若查到了,就將數(shù)據(jù)返回;若沒(méi)查到,就從正在使用的數(shù)據(jù)庫(kù)查(比如 MySql,H2等),然后將數(shù)據(jù)放入 redis 數(shù)據(jù)庫(kù)中

使用 spring 注解緩存
@Cacheable(value = "provincesCache", key = ""provinces"")
public List findAllWithSpringCache() {
    return repository.findAll();
}
@Cacheable(value = "citiesCache", key = "#provinceId")
public List findByProvinceId(String provinceId) {
    return repository.findByProvinceId(provinceId);
}
測(cè)試

測(cè)試緩存省份 provinces

@SpringBootTest
@RunWith(SpringJUnit4ClassRunner.class)
public class ProvincesServiceTest {
    @Autowired
    private ProvincesService provincesService;

    @Autowired
    private RedisTemplate redis;

    @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);
    }
}

測(cè)試緩存市區(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 的加了挺多測(cè)試,比較不清晰

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/76409.html

相關(guān)文章

  • Redis的Spring配置講解

    摘要:否則,這個(gè)方法就會(huì)被調(diào)用,返回值會(huì)放到緩存之中表名應(yīng)該將方法的返回值放到緩存中。 Redis是一種特殊類型的數(shù)據(jù)庫(kù),他被稱之為key-value存儲(chǔ) 本文覆蓋緩存和存儲(chǔ)兩方面進(jìn)行說(shuō)明,使用的是Spring 4.0和Java配置方式 代碼地址下載地址:https://github.com/zoeminghong/springmvc-javaconfig 存儲(chǔ) Redis的配置 packa...

    FullStackDeveloper 評(píng)論0 收藏0
  • JavaConfig方式以及處理自動(dòng)裝配歧義性-spring基礎(chǔ)學(xué)習(xí)

    摘要:介紹在配置和直接注解式配置之外還有一種有趣的選擇方式,是指基于配置的。傳統(tǒng)的一般都是基本配置的,后來(lái)新增了許多的注解,特別是,基本都是清一色的。代碼如下創(chuàng)建對(duì)象創(chuàng)建對(duì)象創(chuàng)建一個(gè)對(duì)象運(yùn)行后的兩種結(jié)果 1.javaconfig介紹 在XML配置和直接注解式配置之外還有一種有趣的選擇方式-JavaConfig,java config是指基于java配置的spring。傳統(tǒng)的Spring一般都...

    2shou 評(píng)論0 收藏0
  • Spring - 裝配Bean

    摘要:裝配任何一個(gè)成功的應(yīng)用都是由多個(gè)為了實(shí)現(xiàn)某個(gè)業(yè)務(wù)目標(biāo)而相互協(xié)作的組件構(gòu)成的創(chuàng)建應(yīng)用對(duì)象之間協(xié)作關(guān)系的行為通常稱為裝配,這也是依賴注入配置的可選方案在中進(jìn)行顯示配置在中進(jìn)行顯示配置隱式的發(fā)現(xiàn)機(jī)制和自動(dòng)裝配自動(dòng)化裝配組件掃描會(huì)自動(dòng)發(fā)現(xiàn)應(yīng)用上下文 裝配Bean 任何一個(gè)成功的應(yīng)用都是由多個(gè)為了實(shí)現(xiàn)某個(gè)業(yè)務(wù)目標(biāo)而相互協(xié)作的組件構(gòu)成的 創(chuàng)建應(yīng)用對(duì)象之間協(xié)作關(guān)系的行為通常稱為裝配(wiring)...

    CNZPH 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<