关于redis和springboot结合的入门学习

关于redis如何下载和安装使用开启都在下面的菜鸟连接当中,这里就不多叙述了。

http://www.runoob.com/redis/redis-tutorial.html

关于查看redis中数据,我是用的是RedisDesktopManager可视化工具很方便能看到里面的东西

这篇博客是参考下面这个链接时产生的问题和解决这些问题,这也是我第一次使用redis

https://www.cnblogs.com/gdpuzxs/p/7222309.html

为什么使用springboot因为简单方便没那么多的配置文件。

接下来进入正题:

在pom.xml中增加redis的依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

在启动类中增加@EnableCaching开启缓存的注解 ps:@EnableScheduling//开启对定时任务的支持

@EnableCaching
@EnableScheduling
@SpringBootApplication
public class Application extends SpringBootServletInitializer {
    private static Logger logger = Logger.getLogger(Application.class);
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
        logger.info("============= SpringBoot Start Success =============");
    }

}

在application.properties中增加redis的配置,有一部分配置是原本项目中就存在的配置,只配置redis时就增加redis的配置就行。设置redis缓存超时时间可以在application里面配置也可以在厦门的redisConfig中配置

扫描二维码关注公众号,回复: 4597456 查看本文章
spring.datasource.url=jdbc:mysql://127.0.0.1:3307/*****?useUnicode=true&characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=*****
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
mybatis.mapperLocations=classpath:mybatis/*.xml
mybatis.type-aliases-package=com.mnnu.dao
## LOG4J配置
log4j.rootCategory=DEBUG,stdout
## 控制台输出
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %5p %c{1}:%L - %m%n
logging.level.com.mnnu=DEBUG
#logging.file=logs/spring-boot-logging.log
server.address=127.0.0.1
server.port=8080
spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
server.jsp-servlet.init-parameters.development=true
spring.mail.host=*******
spring.mail.username=*******
spring.mail.password=*******
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.timeout=25000 
spring.mail.properties.mail.debug=true 
spring.mail.port=25
spring.mail.protocol=smtp
spring.mail.default-encoding=UTF-8
# Redis数据库索引(默认为0)
spring.redis.database=0
# Redis服务器地址
spring.redis.host=127.0.0.1
# Redis服务器连接端口
spring.redis.port=6379
# Redis服务器连接密码(默认为空)
spring.redis.password=
# 连接池最大连接数(使用负值表示没有限制)
spring.redis.pool.max-active=8
# 连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.pool.max-wait=-1
# 连接池中的最大空闲连接
spring.redis.pool.max-idle=8
# 连接池中的最小空闲连接
spring.redis.pool.min-idle=0
# 连接超时时间(毫秒)
spring.redis.timeout=0

接下来就是新建一个java文件用来编写redis的配置代码。

一开始时忘记在类名上面增加@Configuration@EnableCaching这两个注解的时候这个配置文件是不起作用的,犯了个低级错误。

package com.mnnu.redis;

import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;


@Configuration
@EnableCaching
public class RedisConfig extends CachingConfigurerSupport {
    @Value("${spring.redis.host}")
    private String host;
    @Value("${spring.redis.port}")
    private int port;
    @Value("${spring.redis.timeout}")
    private int timeout;
    //缓存管理器
    @Bean
    public CacheManager cacheManager(@SuppressWarnings("rawtypes") RedisTemplate redisTemplate) {
        RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate);
        //设置缓存过期时间
        cacheManager.setDefaultExpiration(30);
        return cacheManager;
    }
    @Bean
    public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory){
        StringRedisTemplate template = new StringRedisTemplate(factory);
        setSerializer(template);//设置序列化工具
        template.afterPropertiesSet();
        return template;
    }
    private void setSerializer(StringRedisTemplate template){
        @SuppressWarnings({ "rawtypes", "unchecked" })
        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.setValueSerializer(jackson2JsonRedisSerializer);
    }
}

因为忘记增加那两个注解启动项目的时候,当进入到有需要缓存的Dao层是报了一个错误:

org.springframework.data.redis.serializer.SerializationException

这个错误呢是因为要缓存的JavaBean必须实现Serializable接口,因为Spring会将对象先序列化再存入 Redis,现在实现Redis序列化的有这么几种

  (1)StringRedisSerializer

  (2)Jackson2JsonRedisSerializer

  (3)JdkSerializationRedisSerializer

  (4)GenericToStringSerializer

  (5)OxmSerializer

具体这几种的使用方式可以参考

https://blog.csdn.net/hotdust/article/details/52251148

我是在我的实体中继承了JdkSerializationRedisSerializer。但因为后来我发现没有开启扫描那个RedisConfig我又开启时又报了个冲突No serializer found for class org.json.JSONObject原因是因为那两个冲突了吧。

使用JdkSerializationRedisSerializer Redis中存入的数据长成这个样子的

而使用Jackson2JsonRedisSerializer时候是长成一个json串,个人感觉这个看起来舒服很多,应该大部分人都会喜欢这个。

最后一部分呢应该就是dao层了,dao层的类上忘记加CacheConfig时会需要在下面的配置其他缓存时要加上value不然会报错

据某位大神说: 正常的话 项目是不会这样使用redis的, 正常会将一些不常变化但使用频率高的数据放人redis,  如果数据库有变则人为手动去重新存入redis。就是有个发布功能,并不是实时更新 不然 根本就没有用上redis的好处。还有一种就是, 当项目重启时, 加入一个启动类,将项目中所需的数据 从数据库读取放入redis,这样就不用频繁更新。

所以上述这个例子只是用来尝试简单的redis记录一下自己第一次尝试redis。

猜你喜欢

转载自blog.csdn.net/weixin_42173547/article/details/81667031