专栏首页强仔仔SpringBoot中搭建Redis缓存功能

SpringBoot中搭建Redis缓存功能

今天给大家介绍一下SpringBoot中如何搭建Redis缓存功能

因为我的Redis是搭建在windows系统上面的,所以首先给大家介绍一下如何在windows上面搭建Redis缓存数据库。

步骤一:首先下载Redis缓存数据库,大家可以去官网上面下或者也可以在我这里下载:点击打开链接

步骤二:下载后就可以直接启动Redis服务,不需要安装或者配置。案例如下图所示:

如果显示上面等信息,就表示Windows上面的Redis缓存数据库已经搭建成功了。关于Linux或者其他系统上面的搭建过程,大家可以自己去百度,我就不多介绍了。

然后下面就开始正式介绍SpringBoot中如何搭建使用Redis缓存数据库的具体过程。

1.首先在pom.xml上面添加Redis相关的jar信息,代码如下所示:

        <!--redis配置-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-redis</artifactId>
        </dependency>

2.在application.properties配置文件中配置Redis的相关信息,代码示例如下所示:

# REDIS (RedisProperties)
# Redis数据库索引(默认为0)
spring.redis.database=0
# Redis服务器地址
spring.redis.host=localhost
# 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

3.添加关于Redis的相关配置类,实现类,实体类,测试类。具体代码如下:

RedisConfig配置类:

package example.test;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;

@Configuration
public class RedisConfig {
    @Bean
    JedisConnectionFactory jedisConnectionFactory() {
        return new JedisConnectionFactory();
    }
    @Bean
    public RedisTemplate<String, User> redisTemplate(RedisConnectionFactory factory) {
        RedisTemplate<String, User> template = new RedisTemplate<String, User>();
        template.setConnectionFactory(jedisConnectionFactory());
        template.setKeySerializer(new StringRedisSerializer());
        template.setValueSerializer(new RedisObjectSerializer());
        return template;
    }
}

RedisObjectSerializer实现类:

package example.test;

import org.springframework.core.convert.converter.Converter;
import org.springframework.core.serializer.support.DeserializingConverter;
import org.springframework.core.serializer.support.SerializingConverter;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.SerializationException;

public class RedisObjectSerializer implements RedisSerializer<Object> {
    private Converter<Object, byte[]> serializer = new SerializingConverter();
    private Converter<byte[], Object> deserializer = new DeserializingConverter();
    static final byte[] EMPTY_ARRAY = new byte[0];
    public Object deserialize(byte[] bytes) {
        if (isEmpty(bytes)) {
            return null;
        }
        try {
            return deserializer.convert(bytes);
        } catch (Exception ex) {
            throw new SerializationException("Cannot deserialize", ex);
        }
    }
    public byte[] serialize(Object object) {
        if (object == null) {
            return EMPTY_ARRAY;
        }
        try {
            return serializer.convert(object);
        } catch (Exception ex) {
            return EMPTY_ARRAY;
        }
    }
    private boolean isEmpty(byte[] data) {
        return (data == null || data.length == 0);
    }
}

实体类:

package example.test;
import java.io.Serializable;

public class User implements Serializable {
    private static final long serialVersionUID = -1L;
    private String username;
    private Integer age;
    public User(String username, Integer age) {
        this.username = username;
        this.age = age;
    }
    // 省略getter和setter

    public static long getSerialVersionUID() {
        return serialVersionUID;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}

junit测试类:

package test;
import example.DemoApplication;
import example.test.User;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.SpringApplicationConfiguration;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(DemoApplication.class)
public class TestRedis {
    @Autowired
    private RedisTemplate<String, User> redisTemplate;
    @Test
    public void test() throws Exception {
        // 保存对象
        User user = new User("超人", 20);
        redisTemplate.opsForValue().set(user.getUsername(), user);
        user = new User("蝙蝠侠", 30);
        redisTemplate.opsForValue().set(user.getUsername(), user);
        user = new User("蜘蛛侠", 40);
        redisTemplate.opsForValue().set(user.getUsername(), user);
        Assert.assertEquals(20, redisTemplate.opsForValue().get("超人").getAge().longValue());
        Assert.assertEquals(30, redisTemplate.opsForValue().get("蝙蝠侠").getAge().longValue());
        Assert.assertEquals(40, redisTemplate.opsForValue().get("蜘蛛侠").getAge().longValue());
    }
}

然后就可以启动Junit进行测试了,因为上面给出的案例是正确的,所以测试的结果也是对的,不会报出异常来。

虽然步骤很简单,但是今天在搭建的过程中还是遇到很多的问题,一个是不知道网上下载的Redis数据库到底能不能用,二是Junit中启动类出现jar的冲突老是启动出错。

最终我下载了好几个版本的Redis缓存数据库,终于可以肯定这个是可以用,也就是我上面给出的链接的那个,大家可以放心使用。

对于Jar包冲突,我今天的jar包冲突是tomcat相关包的冲突。下面给出冲突的案例,希望能给大家点帮助。

  <!--<!–打包成war文件的相关配置信息–>-->
        <!--<dependency>-->
            <!--<groupId>org.springframework.boot</groupId>-->
            <!--<artifactId>spring-boot-starter-tomcat</artifactId>-->
            <!--<!–<scope>provided</scope>–>-->
        <!--</dependency>-->

        <!--<dependency>-->
            <!--<groupId>org.springframework.boot</groupId>-->
            <!--<artifactId>spring-boot-legacy</artifactId>-->
            <!--<version>1.0.2.RELEASE</version>-->
        <!--</dependency>-->

        <!--<dependency>-->
            <!--<groupId>javax.servlet</groupId>-->
            <!--<artifactId>javax.servlet-api</artifactId>-->
            <!--<version>3.0.1</version>-->
        <!--</dependency>-->

        <!--<dependency>-->
            <!--<groupId>javax.servlet</groupId>-->
            <!--<artifactId>javax.servlet-api</artifactId>-->
            <!--<version>3.0.1</version>-->
        <!--</dependency>-->

        <!--<dependency>-->
            <!--<groupId>commons-fileupload</groupId>-->
            <!--<artifactId>commons-fileupload</artifactId>-->
            <!--<version>1.3.1</version>-->
        <!--</dependency>-->

        <!--<dependency>-->
            <!--<groupId>org.springframework</groupId>-->
            <!--<artifactId>spring-test</artifactId>-->
            <!--<version>4.1.4.RELEASE</version>-->
        <!--</dependency>-->

上面的相关jar包不要和Redis放在一起使用,会出现jar冲突问题。对于为什么冲突,具体哪个jar产生的冲突,大家可以自己去研究研究。知道答案的人记得可以告诉我啊!

案例项目的下载地址:点击打开链接

如果大家想要源代码或者对本文有啥异议都可以加我QQ:208017534  欢迎打扰哦!!!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • SpringBoot+SpringSecurity+JWT实RESTfulAPI权限控制

    关于什么是jwt(json web token),还有jwt的工作流程我这边就不多介绍,主要给大家介绍一下SpringBoot中如何整合Security然后在添...

    用户1149268
  • 分库分表技术简述

    今天和大家聊聊分库分表技术,大家面试的时候肯定都有这样的经历,面试官动不动就问分库分表、高并发、虚拟机、分布式事务等等这些高大上的技术。所以我们还是有必要要了解...

    用户1149268
  • Windows下搭建Redis集群

     如果部署到多台电脑,就跟普通的集群一样;因为Redis是单线程处理的,多核CPU也只能使用一个核,

    用户1149268
  • redis事件监听的应用场景与案例实战

    在使用Redis的过程中,我们对Redis做的每一个操作,下发的每一个命令, 都可以认为是事件的存在。所谓事件监听,就是Redis Server会对客户端下发命...

    蒋老湿
  • 一起来学SpringBoot | 第九篇:整合Lettuce Redis

    SpringBoot 除了支持常见的ORM框架外,更是对常用的中间件提供了非常好封装,随着 SpringBoot2.x的到来,支持的组件越来越丰富,也越来越成熟...

    battcn
  • 远程调用服务框架-CXF(WebServic)

    介绍 远程调用web服务,不需要自己编写具体代码,只需要调用作者给出的接口即可. 我们可以调用互联网上查询天气信息Web服务,然后将它嵌入到我们的程序(C/S或...

    李家酒馆酒保
  • springBoot系列教程04:mybatis及druid数据源的集成及查询缓存的使用

    首先说下查询缓存:查询缓存就是相同的数据库查询请求在设定的时间间隔内仅查询一次数据库并保存到redis中,后续的请求只要在时间间隔内都直接从redis中获取,不...

    肖哥哥
  • springboot整合redis进行缓存的使用

    看过我的文章的都应该有所了解如何使用docker方式进行redis环境的搭建过程,想要了解的可以看下历史文章。今天我们想要分享的就是如何使用redis进行缓存的...

    用户3625239
  • 一起来学 SpringBoot 2.x | 第九篇:整合 Lettuce Redis

    摘要: 原创出处 http://blog.battcn.com/2018/05/11/springboot/v2-nosql-redis/ 「唐亚峰」欢迎转载,...

    芋道源码
  • 解决Redis报错Redis is configured to save RDB snapshots, but it is currently not able to persist on disk

    如果是权限问题,则服务对应目录的权限,或在配置文件中修改目标目录到有权限操作的目录。

    用户1161110

扫码关注云+社区

领取腾讯云代金券