springboot redis 数据缓存

说明:工程基于spring boot,jdk1.8

缓存配置类

@Configuration
@EnableCaching //开启缓存支持
public class RedisConfig {

@Bean
public CacheManager cacheManager(RedisTemplate redisTemplate) {
//使用redis作为缓存实现
RedisCacheManager rcm = new RedisCacheManager(redisTemplate);
//设置缓存过期时间,单位s(0为永不过期)
rcm.setDefaultExpiration( 0 ); //秒
return rcm;
}

@SuppressWarnings ( "SpringJavaAutowiringInspection" )
@Primary
@Bean
public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory) {
StringRedisTemplate template = new StringRedisTemplate(factory);
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);
template.setKeySerializer(jackson2JsonRedisSerializer);
template.setValueSerializer(jackson2JsonRedisSerializer);
template.afterPropertiesSet();
return template;
}
}

//业务方法
@Cacheable (value = "goodList" )
public ResponseModel getGoodList(String serverCode, Integer agentId) {
//返回数据将被缓存到redis中
return new ResponseModel();
}

被缓存到redis中的数据模型,如下图:






不想按照spring默认生成key的规则,可以在配置类中,配置key的自定义生成规则

@Configuration
public class RedisConfig extends CachingConfigurerSupport {

/**
* 生成key的规则
* @return
*/
@Bean
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) {
RedisCacheManager rcm = new RedisCacheManager(redisTemplate);
//设置缓存过期时间
rcm.setDefaultExpiration( 0 ); //秒
return rcm;
}

@SuppressWarnings ( "SpringJavaAutowiringInspection" )
@Primary
@Bean
public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory) {
StringRedisTemplate template = new StringRedisTemplate(factory);
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);
template.setKeySerializer(jackson2JsonRedisSerializer);
template.setValueSerializer(jackson2JsonRedisSerializer);
template.afterPropertiesSet();
return template;
}
}

被缓存到redis中的数据模型,如下图:



以上只对 @Cacheable注解做了简单的演示。
下面简单介绍一下关于数据缓存相关的几个注解:
  1. @Cacheable 在方法执行前spring先查缓存中是否有数据,如果有直接返回,若没有将方法返回值放入缓存并返回
  2. @CachePut 无论怎样,都会将方法的返回值放到缓存中
  3. @CacheEvict 将数据从缓存中删除(在更新数据库数据的时候,可以顺便更新一下缓存)
  4. @Cacheing 可以通过它来组合多个注解策略在一个方法上

实现原理实际上是sping aop
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Spring Boot 中使用 Redis 缓存列表数据可以使用 RedisTemplate 对象来实现。下面是一个简单的示例: 首先,在 pom.xml 文件中添加 Redis 和 Spring Data Redis 的依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> ``` 然后,在 application.properties 文件中配置 Redis: ```properties spring.redis.host=localhost spring.redis.port=6379 ``` 接下来,创建一个 RedisListService 类,用于操作 Redis 中的列表数据: ```java @Service public class RedisListService { @Autowired private RedisTemplate<String, Object> redisTemplate; public void addToList(String key, Object value) { redisTemplate.opsForList().rightPush(key, value); } public List<Object> getList(String key) { return redisTemplate.opsForList().range(key, 0, -1); } public Object popFromList(String key) { return redisTemplate.opsForList().leftPop(key); } } ``` 在上面的代码中,我们使用了 RedisTemplate 对象的 opsForList() 方法来获取操作 Redis 列表的方法。其中,rightPush() 方法用于将一个元素添加到列表的尾部,range() 方法用于获取列表的所有元素,leftPop() 方法用于弹出列表的第一个元素。 最后,我们可以在其他类中使用 RedisListService 对象来操作 Redis 列表数据: ```java @Autowired private RedisListService redisListService; public void testRedisList() { // 添加元素到列表 redisListService.addToList("mylist", "value1"); redisListService.addToList("mylist", "value2"); // 获取列表中的所有元素 List<Object> list = redisListService.getList("mylist"); System.out.println(list); // [value1, value2] // 弹出列表中的第一个元素 Object obj = redisListService.popFromList("mylist"); System.out.println(obj); // value1 } ``` 在上面的代码中,我们首先添加了两个元素到列表中,然后获取了列表中的所有元素并打印出来,最后弹出了列表中的第一个元素并打印出来。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值