| 导读 | 无法支撑这么大的数据访问量,redis使用的时候可以单独利用客户端引入jar包操作即可,实际项目中都是和框架进行整合的比较多,此处演示利用springboot整合 |
1.首先导入使用Maven导入jar包
<dependency>???? ????<groupId>org.springframework.boot</groupId>???? ????<artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> ????<groupId>com.alibaba</groupId> ????<artifactId>fastjson</artifactId> ????<version>1.2.62</version> </dependency>
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<T>?implements?RedisSerializer<T>?{
????public?static?final?Charset?DEFAULT_charset=utf-8.forName("UTF-8");
????private?Class<T>?clazz;
????static?{
????????ParserConfig.getGlobalInstance().addAccept("com.FireService");
????}
????public?FastJsonRedisSerializer(Class<T>?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?<=?0)?{
????????????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<Map<String,?Object>>?list=orderFindGoods.findUserOrder(account);
????????return?Results.successWithData(list,?BaseEnums.SUCCESS.code(),?BaseEnums.SUCCESS.desc());
????}else?{
????????return?Results.failure();
????}
}
运行项目查看结果
1.第一次访问
查看Druid连接信息
烽火连城39863131