建设银行泰州分行网站,上海好的设计公司,wordpress 文章rss,wordpress最大上传2g一、Redis介绍
Redis是当前比较热门的NOSQL系统之一#xff0c;它是一个开源的使用ANSI c语言编写的key-value存储系统#xff08;区别于MySQL的二维表格的形式存储。#xff09;。和Memcache类似#xff0c;但很大程度补偿了Memcache的不足。和Memcache一样#xff0c;R…一、Redis介绍
Redis是当前比较热门的NOSQL系统之一它是一个开源的使用ANSI c语言编写的key-value存储系统区别于MySQL的二维表格的形式存储。。和Memcache类似但很大程度补偿了Memcache的不足。和Memcache一样Redis数据都是缓存在计算机内存中不同的是Memcache只能将数据缓存到内存中无法自动定期写入硬盘这就表示一断电或重启内存清空数据丢失。所以Memcache的应用场景适用于缓存无需持久化的数据。而Redis不同的是它会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件实现数据的持久化。
Redis的特点
1Redis读取的速度是110000次/s写的速度是81000次/s
2原子 。Redis的所有操作都是原子性的同时Redis还支持对几个操作全并后的原子性执行。
3支持多种数据结构string字符串list列表hash哈希set集合zset(有序集合)
4持久化集群部署
5支持过期时间支持事务消息订阅
Spring Cache 是一个非常优秀的缓存组件。自Spring 3.1起提供了类似于Transactional注解事务的注解Cache支持且提供了Cache抽象方便切换各种底层Cache如redis
使用Spring Cache的好处
1提供基本的Cache抽象方便切换各种底层Cache
2通过注解Cache可以实现类似于事务一样缓存逻辑透明的应用到我们的业务代码上且只需要更少的代码就可以完成
3提供事务回滚时也自动回滚缓存
4支持比较复杂的缓存逻辑
二,具体操作
2.1导入jar包
在需要用到redis的地方导入jar包 !-- redis --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-redis/artifactId/dependency!-- spring2.X集成redis所需common-pool2--dependencygroupIdorg.apache.commons/groupIdartifactIdcommons-pool2/artifactIdversion2.6.0/version/dependency2.2创建redis缓存的配置文件
Configuration
EnableCaching
public class RedisConfig {/*** 设置RedisTemplate规则* param redisConnectionFactory* return*/Beanpublic RedisTemplateObject, Object redisTemplate(RedisConnectionFactory redisConnectionFactory) {RedisTemplateObject, Object redisTemplate new RedisTemplate();redisTemplate.setConnectionFactory(redisConnectionFactory);Jackson2JsonRedisSerializer jackson2JsonRedisSerializer new Jackson2JsonRedisSerializer(Object.class);//解决查询缓存转换异常的问题ObjectMapper om new ObjectMapper();
// 指定要序列化的域field,get和set,以及修饰符范围ANY是都有包括private和publicom.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
// 指定序列化输入的类型类必须是非final修饰的final修饰的类比如String,Integer等会跑出异常om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);jackson2JsonRedisSerializer.setObjectMapper(om);//序列号key valueredisTemplate.setKeySerializer(new StringRedisSerializer());redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);redisTemplate.setHashKeySerializer(new StringRedisSerializer());redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);redisTemplate.afterPropertiesSet();return redisTemplate;}/*** 设置CacheManager缓存规则* param factory* return*/Beanpublic CacheManager cacheManager(RedisConnectionFactory factory) {RedisSerializerString redisSerializer new StringRedisSerializer();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);// 配置序列化解决乱码的问题,过期时间600秒RedisCacheConfiguration config RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofSeconds(600)).serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(redisSerializer)).serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer)).disableCachingNullValues();RedisCacheManager cacheManager RedisCacheManager.builder(factory).cacheDefaults(config).build();return cacheManager;}
}
2.3创建redis的配置文件appliction.yml
spring.redis.host192.168.44.165
spring.redis.port6379
spring.redis.database 0
spring.redis.timeout1800000spring.redis.lettuce.pool.max-active20
spring.redis.lettuce.pool.max-wait-1
#最大阻塞等待时间(负数表示没限制)
spring.redis.lettuce.pool.max-idle5
spring.redis.lettuce.pool.min-idle02.4在需要往缓存里面存入的数据上面加上注解
Cacheable(value dict,key selectIndexList) //redis里面的keyvalue::key value为方法的返回值 如果对于多级数据而言,这样只能查到单个一级的数据,而再次查询二级的数据会导致夯住,因此需要区分存储在redis里面的key,而在一般情况下,区分的唯一要求就是id,因此改造注解
改造完成测试发现缓存生效