SpringBoot 2.x 整合 redis 作为缓存使用
SpringBoot对Redis进行了封装,使用起来十分方便。这里使用的SpringBoot版本为2.2.5.RELEASE。
1、安装redis并进行配置
Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。 Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(highavailability)。
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
Redis 的中文网站
2、在项目中引入redis依赖编写配置文件
a. 引入redis 启动器
<!-- redis -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
b. 在 application.yml 编写redis 端口 地址 连接池相关
spring:
redis:
host: 192.168.0.106
port: 6379
jedis:
pool:
max-active: 20
timeout: 1800000
lettuce:
pool:
max-active: 20
max-wait: -1
#最大阻塞等待时间(负数表示没限制)
max-idle: 5
min-idle: 0
c.引入Redis的starter 我们是用一个配置类 继承 CachingConfigurerSupport
@Configuration //声明这是一个配置类
@EnableCaching //开启缓存
public class RedisConfig extends CachingConfigurerSupport {
@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.enableDefaultTyping(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.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;
}
3、在接口方法中添加缓存
a. Spring Boot缓存注解
I 缓存@Cacheable
根据方法对其返回结果进行缓存,下次请求时,如果缓存存在,则直接读取缓存数据返回;如果缓存不存在,则执行方法,并把返回的结果存入缓存中。
第一次查询,首先查询数据库,把数据库查询数据返回,并且返回数据放到缓存中
第二次查询,查询缓存,发现缓存有数据,直接返回
一般用在查询方法上。
II 缓存@CachePut
使用该注解标志的方法,每次都会执行,并将结果存入指定的缓存中。其他方法可以直接从响应的缓存中读取缓存数据,而不需要再去查询数据库。
一般用在新增方法上。
III 缓存@CacheEvict
使用该注解标志的方法,会清除指定的缓存。
一般用在更新或删除方法上。
b.接口实现方法上添加注解
@Service
public class CrmBannerServiceImpl extends ServiceImpl<CrmBannerMapper, CrmBanner> implements CrmBannerService {
/**
* 前台查询所有
*
* @return list
*/
@Override
@Cacheable(cacheNames = "banner", key = "'selectIndexList'") //将数据放入缓存
public List<CrmBanner> selectAllBannerInfo() {
QueryWrapper<CrmBanner> crmWrapper = new QueryWrapper<>();
crmWrapper.orderByAsc("id");
crmWrapper.last("LIMIT 4");
return this.baseMapper.selectList(null);
}
c.启动redis即可
启动成功
4、关于Redis 相关问题
a. 无法连接
I 保护模式没关闭
出现以下错误
在redis目录中找到redis.windows.conf 中编辑配置文件 找到protected-mode yes 将 yes 改为 no
II 服务未启动
找到并打开即可解决问题
b.以上是Windows版本 下面说说Liunx版本
I Liunx 下如何启动
启动图片来源于网络
II 关闭liunx防火墙
centos6防火墙操作
1. service命令
关闭防火墙:service iptables stop
开启防火墙:service iptables start
重启防火墙:service iptables restart
查看防火墙状态:service iptables status
2. 通过:/etc/init.d/iptables 进行操作
关闭防火墙:/etc/init.d/iptables stop(这是临时关闭,关闭的是当前运行的防火墙,
重启之后防火墙又会启动,因为它是开机自启动的,它相当于/etc/init.d/iptables start)
查看防火墙状态:/etc/init.d/iptables/status
3. 需要改为开机不启动,使用chkconfig命令
永久关闭防火墙:chkconfig iptables off
永久开启防火墙:chkconfig iptables on
查看状态:chkconfig --list iptables
4. 找到redis配置文件, 注释一行配置
# bind 127.0.0.1
OK以上就这么多 具体还需要大家结合自己的业务操作~ Wiki