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

下面是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日

相关文章

  • Redis实现限流功能

    Redis实现限流功能的优点: 可以应用于分布式或者集群下 redis并发量大 Redis限流实现思路 使用redis中key的过期机制、key自增机制, 主类,可以在Filter或者HandlerInterceptor中定义,用于拦截请求 @GetMapping(value = “/limitRate”) public ServiceResult limi…

    Redis 2023年4月13日
    00
  • C#中SQL Command的基本用法

    C#中连接到数据库并执行SQL语句的一种方法是使用SQL Command。下面是SQL Command的基本用法攻略: 创建SqlConnection对象 在使用SQL Command之前,我们需要创建SqlConnection对象,这是与数据库进行连接的一种方式。下面是一个示例,演示如何创建SqlConnection对象: SqlConnection co…

    database 2023年5月21日
    00
  • Nuxt的动态路由和参数校验操作

    下面我将为您详细讲解Nuxt的动态路由和参数校验操作的完整攻略。 动态路由 动态路由是指路由的路径中包含某些参数,这些参数可以在路由被匹配时动态地被提取出来并作为路由参数传递给页面组件。在Nuxt中,动态路由是通过文件夹和文件命名来实现的。 创建动态路由 在Nuxt项目中,动态路由文件路径的格式如下: pages/:参数名.vue 例如,如果要创建一个参数为…

    database 2023年5月22日
    00
  • Android架构组件Room指南

    下面就为大家详细讲解“Android架构组件Room指南”的完整攻略。 什么是Room Room是Google推出的一个轻量级的ORM(Object-Relational Mapping)框架,是Android架构组件之一,用于替代Android存储数据库的SQLite语句。 Room提供了一个对象映射层,让您可以使用Java方法调用来访问您的数据库。它旨在…

    database 2023年5月18日
    00
  • linux下讲解MySQL安装与登录方法

    下面就是关于”Linux下讲解MySQL安装与登录方法”的完整攻略。 MySQL的安装方法 MySQL的安装方法有很多种,在这里我们主要介绍通过Linux系统自带的包管理器(yum、apt-get等)进行安装的方法。以下以CentOS 7系统为例: 1. 更新系统 在安装MySQL前,我们需要先确保系统是最新的。通过以下命令进行更新: sudo yum up…

    database 2023年5月22日
    00
  • CentOS7.5安装配置Harbor1.7的全过程

    CentOS7.5安装配置Harbor1.7的全过程 简介 Harbor是企业级的Docker镜像仓库,提供安全、可靠的镜像管理功能,支持LDAP、AD认证、权限管理、日志审计等企业级功能。本文将详细介绍在CentOS7.5上安装配置Harbor1.7的全过程。 准备 安装了CentOS7.5操作系统的服务器,具备root权限。 安装Docker Harbo…

    database 2023年5月22日
    00
  • Go语言编译程序从后台运行,不出现dos窗口的操作

    首先,Go语言的编译器可以在后台运行,并且不会出现DOS窗口,这是因为可以使用Go语言的官方IDE和其他第三方开发环境,如Visual Studio Code或Sublime Text等来进行编译并运行程序。 以下是两个示例说明: 使用Goland IDE Goland是一款强大的Go语言开发IDE,可以让开发人员编写,调试和测试Go语言程序。在编译和运行程…

    database 2023年5月22日
    00
  • MySQL之Join语句执行流程是什么

    本文小编为大家详细介绍“MySQL之Join语句执行流程是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“MySQL之Join语句执行流程是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。 Join语句执行流程 在实际生产中,关于 join 语句使用的问题,一般会集中在以下两类: 不让使用 join,使用 join 有什么问…

    MySQL 2023年4月11日
    00
合作推广
合作推广
分享本页
返回顶部