整合Redis
redis一般做缓存数据库使用,就是让资源加载的更快。每次查完指定数据,都将数据返回一份到redis数据库中,下次在查询相同的指定数据的时候,不在从主数据库查询了,而是先去redis数据库中查找,看看有没有需要的数据,有的话返回,没有的话在去主数据库查
这里整合的redis实例是尚荣宝项目的,给树状图做缓存 下面在整合一个前端的banner轮播图
树状图整合
1、centos上运行redis服务器
2、目前数据库是空的
127.0.0.1:6379> keys * (empty array) 127.0.0.1:6379>
3、在查询接口实现类中通过redistemplate加上redis缓存
- 查询的步骤为先去redis数据库中查询
- 没有数据从数据库中查询
- 将数据存入redis
4、访问前端项目,看redis中是否会加上key和value
5、测试
banner整合
第二种整合方式采用注解形式,注解形式的整合需要redis的配置文件
配置文件的写法是固定的,如下:
一、配置类
这一部分是很重复的部分,代码大都一样
CV即可
@Configuration @EnableCaching //开启缓存 public class RedisConfig extends CachingConfigurationSelector { @Bean public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) { RedisTemplate<String, Object> template = new RedisTemplate<>(); RedisSerializer<String> redisSerializer = new StringRedisSerializer(); Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); ObjectMapper om = new ObjectMapper(); om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); om.activateDefaultTyping(LaissezFaireSubTypeValidator.instance,ObjectMapper.DefaultTyping.NON_FINAL); jackson2JsonRedisSerializer.setObjectMapper(om); template.setConnectionFactory(factory); //key序列化方式 template.setKeySerializer(redisSerializer); //value序列化 template.setValueSerializer(jackson2JsonRedisSerializer); //value hashmap序列化 template.setHashValueSerializer(jackson2JsonRedisSerializer); return template; } @Bean public CacheManager cacheManager(RedisConnectionFactory factory) { RedisSerializer<String> redisSerializer = new StringRedisSerializer(); Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); //解决查询缓存转换异常的问题 ObjectMapper om = new ObjectMapper(); om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); om.activateDefaultTyping(LaissezFaireSubTypeValidator.instance,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; } }
二、配置文件
也可以用yml格式
我这里用的是properties格式的配置文件
# 服务端口 server.port=8004 # 服务名 spring.application.name=service-cms spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848 # mysql数据库连接 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/guli?serverTimezone=GMT%2B8 spring.datasource.username=root spring.datasource.password=root #返回json的全局时间格式 spring.jackson.date-format=yyyy-MM-dd HH:mm:ss spring.jackson.time-zone=GMT+8 #配置mapper xml文件的路径 mybatis-plus.mapper-locations=classpath:com/caq/educms/mapper/xml/*.xml spring.redis.host=172.20.10.9 spring.redis.port=6379 spring.redis.database= 0 spring.redis.timeout=1800000 spring.redis.lettuce.pool.max-active=20 spring.redis.lettuce.pool.max-wait=-1 #最大阻塞等待时间(负数表示没限制) spring.redis.lettuce.pool.max-idle=5 spring.redis.lettuce.pool.min-idle=0 #mybatis日志 mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
三、修改实现类
@Service public class CrmBannerServiceImpl extends ServiceImpl<CrmBannerMapper, CrmBanner> implements CrmBannerService { @Cacheable(value = "banner",key = "'selectIndexList'") @Override public List<CrmBanner> selectAllBanner() { //根据id进行降序排序,显示排列之后的前两条记录 QueryWrapper<CrmBanner> queryWrapper = new QueryWrapper<>(); queryWrapper.orderByDesc("id"); //拼接sql语句 queryWrapper.last("limit 2"); List<CrmBanner> list = baseMapper.selectList(null); return list; } }
四、测试
注意点
redis主要是配置文件,对配置文件的详解可看如下文章
(1)关闭liunx防火墙
(2)找到redis配置文件, 注释一行配置
默认情况这个bind不改的话只能接受本机的访问请求
修改protected-mode yes
改为protected-mode no
关掉redis的bind项和没设置redis密码的时候,能让redis接受其他主机的响应