java redis 缓存配置_redis 配置以及缓存(javaconfig)

redis 配置以及缓存(javaconfig)

redis

是一种数据库,一种数据库,一种数据库

如何缓存:将想要缓存的数据添加到 redis 数据库中

redis:基于内存亦可持久化的 Key-Value 数据库,所以速度快

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 启动 spring 缓存

keyGenerator bean 是默认生成主键的方式

cacheManager bean 是缓存管理器

StringRedisTemplate 是 spring-data-redis 的一种模板,还有一种模板是 RedisTemplate

手动使用 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;

}

思路就是查询的时候从 redis 中查询,若查到了,就将数据返回;若没查到,就从正在使用的数据库查(比如 MySql,H2等),然后将数据放入 redis 数据库中

使用 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);

}

测试

测试缓存省份 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);

}

}

测试缓存市区 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);

}

}

源码地址

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值