Spring Boot 项目集成Redis的方式详解

yizhihongxing

下面是Spring Boot 整合Redis的完整攻略:

准备工作

在开始配置之前,我们需要完成几个基本的准备工作。

  1. 添加Redis依赖

使用Spring Boot集成Redis需要在pom.xml中添加spring-boot-starter-data-redis依赖,建议使用最新版本。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
  1. 配置Redis连接信息

在application.properties(或application.yml)配置文件中添加Redis连接信息,包括host、port、password等,具体可根据环境情况自行配置,如下所示:

spring.redis.host=127.0.0.1
spring.redis.port=6379
spring.redis.password=123456
  1. 编写Redis配置类

为了方便使用,在项目中可以自定义Redis配置类,用于配置RedisTemplate、StringRedisTemplate等操作Redis的Bean对象。以下是一个配置类的示例:

@Configuration
@EnableCaching
public class RedisConfig {

    @Value("${spring.redis.host}")
    private String host;
    @Value("${spring.redis.port}")
    private int port;
    @Value("${spring.redis.password}")
    private String password;
    @Value("${spring.redis.timeout}")
    private int timeout;

    /**
     * 配置Jedis连接工厂
     *
     * @return JedisConnectionFactory
     */
    @Bean
    public JedisConnectionFactory jedisConnectionFactory() {
        RedisStandaloneConfiguration config = new RedisStandaloneConfiguration(host, port);
        config.setPassword(RedisPassword.of(password));
        return new JedisConnectionFactory(config);
    }

    /**
     * 配置RedisTemplate
     *
     * @return RedisTemplate
     */
    @Bean
    public RedisTemplate<String, Object> redisTemplate() {
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(jedisConnectionFactory());
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
        return redisTemplate;
    }

    /**
     * 配置StringRedisTemplate
     *
     * @return StringRedisTemplate
     */
    @Bean
    public StringRedisTemplate stringRedisTemplate() {
        StringRedisTemplate stringRedisTemplate = new StringRedisTemplate();
        stringRedisTemplate.setConnectionFactory(jedisConnectionFactory());
        return stringRedisTemplate;
    }

    /**
     * 配置缓存管理器
     *
     * @return CacheManager
     */
    @Bean
    public CacheManager cacheManager() {
        RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig()
                .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()))
                .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer()));
        return RedisCacheManager.builder(jedisConnectionFactory())
                .cacheDefaults(redisCacheConfiguration)
                .build();
    }
}

使用Redis

完成准备工作后,就可以使用Redis来存储、操作数据了。

示例1:存储及读取对象类型数据

@Component
public class RedisUtils {

    @Autowired
    private RedisTemplate<String, Object> redisTemplate;

    /**
     * 存储对象到Redis
     *
     * @param key   键
     * @param value 值
     */
    public void set(String key, Object value) {
        redisTemplate.opsForValue().set(key, value);
    }

    /**
     * 从Redis中获取指定对象
     *
     * @param key   键
     * @param clazz 对象类型
     * @param <T>   类型
     * @return 对象
     */
    public <T> T get(String key, Class<T> clazz) {
        Object value = redisTemplate.opsForValue().get(key);
        if (value == null) {
            return null;
        }
        return JSONObject.parseObject(JSONObject.toJSONString(value), clazz);
    }
}

在上面的示例中,我们首先通过@Autowired注解注入了RedisTemplate对象,然后我们编写了set方法和get方法,前者可以将指定的对象存储到Redis中,后者可以从Redis中获取指定类型的对象。这里类型使用了泛型,配合JSONObject.parseObject方法可以使得对象可以自动转换为指定的类型。

示例2:使用缓存

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserDao userDao;

    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    @Override
    @Cacheable(value = "user", key = "#id")
    public User getById(int id) {
        User user = userDao.getById(id);
        if (user != null) {
            stringRedisTemplate.opsForValue().set("user_" + user.getId(), JSONObject.toJSONString(user), Duration.ofMinutes(30));
        }
        return user;
    }

    @Override
    @CachePut(value = "user", key = "#user.id")
    public User add(User user) {
        userDao.add(user);
        return user;
    }

    @Override
    @CacheEvict(value = "user", key = "#id")
    public void deleteById(int id) {
        userDao.deleteById(id);
    }
}

在上面的示例中,我们定义了一个UserService接口,用于对用户信息进行操作。在实现类中,我们首先通过@Autowired注解注入了UserDao对象和StringRedisTemplate对象。然后我们为获取用户(byId)方法添加了缓存注解@Cacheable,并指定了缓存的名称为user,缓存的key为用户的id。对于添加新用户(add)和删除指定用户(deleteById)的方法,我们添加了缓存注解@CachePut和@CacheEvict,分别用于在更新了数据和删除了数据后,同步更新缓存数据。

以上就是Spring Boot集成Redis的完整攻略了,希望对您有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring Boot 项目集成Redis的方式详解 - Python技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • Mysql字符串处理函数详细介绍、总结

    MySQL字符串处理函数是MySQL中常用的一种函数类型,可以对字符串进行一些常见的操作,如拼接、截取、替换、转化等操作。本文将详细介绍MySQL字符串处理函数,并包含两个示例说明。 1. CONCAT函数 CONCAT函数用于将若干个字符串拼接成一个字符串。其基本语法为: CONCAT(str1, str2, …) 其中,str1、str2等为待拼接的…

    database 2023年5月22日
    00
  • 简述Oracle中in和exists的不同

    下面我将为你详细讲解Oracle中in和exists的不同: 1. in和exists的基本概念 在Oracle数据库中,in和exists都是用来进行子查询的,它们可以在主查询中检索到子查询中的结果。in和exists都有一个共同点,即它们都可以用来进行多个值的比较,使主查询更加灵活。不过,它们的语法和执行方式却有所不同。 in的语法格式为:value i…

    database 2023年5月22日
    00
  • SpringBoot整合MyBatis-Plus乐观锁不生效的问题及解决方法

    下面我将详细讲解SpringBoot整合MyBatis-Plus乐观锁不生效的问题及解决方法。 问题描述 在使用SpringBoot整合MyBatis-Plus过程中,我们很容易遇到乐观锁不生效的问题。即在多线程操作同一条记录时,最后一次更新的操作会覆盖之前的更新,导致乐观锁失效。 问题原因 MyBatis-Plus默认使用的是OptimisticLockI…

    database 2023年5月21日
    00
  • 如何使用Python连接和操作MongoDB数据库?

    在Python中,可以使用pymongo模块连接和操作MongoDB数据库。以下是Python使用pymongo模块连接和操作MongoDB数据库的完整攻略,包括连接MongoDB数据库、插入数据、查询数据、和删除数据等操作。 连接MongoDB数据库 在Python中,可以使用pymongo模块连接MongoDB数据库。以下是连接MongoDB数据库的基本…

    python 2023年5月12日
    00
  • SpringBoot集成SSM、Dubbo、Redis、JSP的案例小结及思路讲解

    SpringBoot集成SSM、Dubbo、Redis、JSP的案例小结及思路讲解 介绍 SpringBoot 是一个开源的、快速构建Spring应用的框架,可以快速集成常用框架,很方便用于微服务架构中。常用的集成的框架包括SSM(Spring+SpringMVC+Mybatis)框架、Dubbo分布式服务框架、Redis非关系性数据库等,还可以利用JSP技…

    database 2023年5月22日
    00
  • SQL将一个表中的数据插入到另一个表中的方法

    要将一个表中的数据插入到另一个表中,我们可以使用SQL中的INSERT INTO语句。下面是具体的攻略及示例说明: 1. 创建目标表 首先,我们需要创建一个目标表,用于存储将要插入的数据。假设我们需要将一个名为”students”的表中的数据插入到另一个名为”new_students”的表中,我们首先需要创建”new_students”表: CREATE T…

    database 2023年5月22日
    00
  • mysql建表常用的sql语句汇总

    下面我将详细讲解“mysql建表常用的sql语句汇总”的完整攻略。 一、创建数据库 在使用mysql建表之前,我们需要根据需求创建一个数据库。创建数据库的sql语句如下: CREATE DATABASE mydb CHARACTER SET utf8 COLLATE utf8_general_ci; 上面的sql语句创建了一个名为mydb的数据库,并设置了数…

    database 2023年5月21日
    00
  • oracle 树查询 语句

    Oracle 树查询语句通常用于查询树形结构的数据。它们允许你从一张表中提取树形结构数据,甚至包括所有的父子关系和层级关系。下面是在 Oracle 数据库中使用树查询语句的完整攻略: 一、创建树形结构表 在任何数据库中,创建树形结构表的方法都类似。我们需要包含一个主键ID和一个父节点的ID列,还要包含一个约束,以确保每个节点都有一个父节点,除了根节点。 CR…

    database 2023年5月21日
    00
合作推广
合作推广
分享本页
返回顶部