良许Linux教程网 干货合集 SpringBoot 整合 Redis 缓存具体方法

SpringBoot 整合 Redis 缓存具体方法

无法支撑这么大的数据访问量,redis使用的时候可以单独利用客户端引入jar包操作即可,实际项目中都是和框架进行整合的比较多,此处演示利用springboot整合

SpringBoot 整合 Redis 缓存具体方法

1.首先导入使用Maven导入jar包

    
   org.springframework.boot    
   spring-boot-starter-data-redis
   com.alibaba
   fastjson
   1.2.62

2.在application.properties配置信息

# Redis数据库索引(默认为0)  
spring.redis.database=0  
# Redis服务器地址  
spring.redis.host=localhost
# Redis服务器连接端口  
spring.redis.port=6379  
# Redis服务器连接密码(默认为空)  
spring.redis.password=123456
# 连接池最大连接数(使用负值表示没有限制)  
spring.redis.pool.max-active=200  
# 连接池最大阻塞等待时间(使用负值表示没有限制)  
spring.redis.pool.max-wait=-1  
# 连接池中的最大空闲连接  
spring.redis.pool.max-idle=10
# 连接池中的最小空闲连接  
spring.redis.pool.min-idle=0  
# 连接超时时间(毫秒)  
spring.redis.timeout=1000ms

3.编写Redis工具类

@Configuration
@ConditionalOnClass(RedisOperations.class)      //系统中有RedisOperations类时
@EnableConfigurationProperties(RedisProperties.class)  //启动RedisProperties这个类
@EnableCaching

// www.1b23.com
public class RedisConfig extends CachingConfigurerSupport {
   @Autowired
   RedisTemplate redisTemplate;
   // 配置缓存管理器
   @Bean
   public RedisCacheManager cacheManager(RedisConnectionFactory connectionFactory) {
       LettuceConnectionFactory jedisConnectionFactory = (LettuceConnectionFactory) redisTemplate.getConnectionFactory();
       jedisConnectionFactory.setDatabase(2);      //指定dbindex
       redisTemplate.setConnectionFactory(jedisConnectionFactory);
       jedisConnectionFactory.resetConnection();

       RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
               .entryTtl(Duration.ofSeconds(60*20)) // 20分钟缓存失效
               // 设置key的序列化方式
//                .entryTtl(Duration.ofSeconds(10))
               .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()))
               // 设置value的序列化方式
               .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new FastJsonRedisSerializer(Object.class)))
               // 不缓存null值
               .disableCachingNullValues();
       RedisCacheManager redisCacheManager = RedisCacheManager.builder(connectionFactory)
               .cacheDefaults(config)
               .transactionAware()
               .build();
       return redisCacheManager;
   }
}
package com.FireService.config;
import java.nio.charset.Charset;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.SerializationException;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.parser.ParserConfig;
import com.alibaba.fastjson.serializer.SerializerFeature;

public class FastJsonRedisSerializer implements RedisSerializer {

   public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8");

   private Class clazz;
   static {
       ParserConfig.getGlobalInstance().addAccept("com.FireService");
   }
   public FastJsonRedisSerializer(Class clazz) {
       super();
       this.clazz = clazz;
   }

   @Override
   public byte[] serialize(T t) throws SerializationException {
       if (null == t) {
           return new byte[0];
       }
       return JSON.toJSONString(t, SerializerFeature.WriteClassName).getBytes(DEFAULT_CHARSET);
   }

   @Override
   public T deserialize(byte[] bytes) throws SerializationException {
       if (null == bytes || bytes.length return null;
       }
       String str = new String(bytes, DEFAULT_CHARSET);
       return (T) JSON.parseObject(str, clazz);
   }

}

4.SpringBoot有关缓存的几个注解

@Cacheable:查询 可选属性: cacheNames/value:指定缓存组件的名字; key:缓存数据使用的key,可以用来指定。默认即使用方法参数的值 keyGenerator:key的生成器,可以自己指定key的生成器的组件id

//自定义配置类配置keyGenerator
@Configuration
public class MyCacheConfig {
   @Bean("myKeyGenerator")
   public KeyGenerator keyGenerator(){
       return new KeyGenerator() {
           @Override
           public Object generate(Object target, Method method, Object... params) {
               return method.getName()+"["+ Arrays.asList(params).toString() +"]";
           }
       };
   }
}

cacheManager:指定缓存管理器;或者cacheResolver获取指定解析器

condition:指定符合条件的情况下才缓存;如condition=”#id>0″

unless:否定缓存,当unless指定的条件为true,方法的返回值不会被缓存,可以获取到结果进行判断;如unless=”#result==null”;

sync:是否使用异步模式

例如:

@Cacheable(value = "RedisInfo", key = "#root.methodName+'['+#account+']'")
@ResponseBody
@RequestMapping("/RedisTest")
public Result findUserOrder(String account) throws Exception{
   if(account!=null) {
       List> list=orderFindGoods.findUserOrder(account);
       return Results.successWithData(list, BaseEnums.SUCCESS.code(), BaseEnums.SUCCESS.desc());
   }else {
       return Results.failure();
   }
}

运行项目查看结果

1.第一次访问

查看Druid连接信息

以上就是良许教程网为各位朋友分享的Linu系统相关内容。想要了解更多Linux相关知识记得关注公众号“良许Linux”,或扫描下方二维码进行关注,更多干货等着你 !

img
本文由 良许Linux教程网 发布,可自由转载、引用,但需署名作者且注明文章出处。如转载至微信公众号,请在文末添加作者公众号二维码。
良许

作者: 良许

良许,世界500强企业Linux开发工程师,公众号【良许Linux】的作者,全网拥有超30W粉丝。个人标签:创业者,CSDN学院讲师,副业达人,流量玩家,摄影爱好者。
上一篇
下一篇

发表评论

联系我们

联系我们

公众号:良许Linux

在线咨询: QQ交谈

邮箱: yychuyu@163.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部