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日

相关文章

  • MySQL百万级数据大分页查询优化的实现

    MySQL百万级数据大分页查询优化的实现 背景 当MySQL数据库中数据量较大时,常用的分页查询方式会导致查询速度变慢,尤其是当需要查询的数据量达到百万级别时,查询速度更是受限。此时为了保证查询速度,需要进行分页查询的优化。 分页查询优化实现的方法 1. 使用Limit和Offset分页 常用的MySQL分页方式是使用Limit和Offset来进行分页查询。…

    database 2023年5月19日
    00
  • 在CentOS上MySQL数据库服务器配置方法

    下面是在CentOS上配置MySQL数据库服务器的完整攻略: 配置步骤 安装MySQL数据库服务器。 $ sudo yum install mysql-server 启动MySQL服务并设置开机自启动。 $ sudo systemctl start mysqld $ sudo systemctl enable mysqld 进入MySQL服务器并通过命令设置…

    database 2023年5月22日
    00
  • AnzoGraph和MongoDB的区别

    AnzoGraph和MongoDB是两种不同类型的数据库管理系统,它们在数据存储、查询、处理等方面有很大差异。 首先,AnzoGraph是一种图数据库,广泛应用于语义网、知识图谱等领域,能够处理大量的图数据。MongoDB是一种文档型数据库,数据以文档的形式存储。 其次,在数据存储方面,AnzoGraph采用的是三元组模型,即以主语、谓语、宾语的形式存储数据…

    database 2023年3月27日
    00
  • SQL和T-SQL的区别

    SQL和T-SQL都是用于管理关系型数据库的编程语言,但二者之间存在一些区别。下面将对SQL和T-SQL的区别进行详细的讲解。 SQL和T-SQL的区别 1. T-SQL的扩展 T-SQL是SQL的一种扩展,它包含了SQL没有的语句和功能。例如T-SQL具有存储过程、游标、触发器等高级功能,可以更灵活的进行数据库操作。相对而言,SQL语言则较为简单,仅包含基…

    database 2023年3月27日
    00
  • Linq to SQL Delete时遇到问题的解决方法

    Linq to SQL Delete时遇到问题的解决方法 在使用Linq to SQL进行删除操作时,我们可能会遇到一些问题。这篇攻略将介绍在Linq to SQL Delete时遇到问题的解决方法。 问题描述 当我们使用Linq to SQL进行删除操作时,可能会出现以下情况: 当我们在DataContext中直接使用DeleteOnSubmit方法进行删…

    database 2023年5月21日
    00
  • DBMS 中的 ACID 属性

    ACID是数据库处理事务的四个基本原则,分别是原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。这四个基本原则可以保证在处理事务过程中,数据库的数据始终处于合理、正确、安全的状态。 原子性(Atomicity) 原子性指,在一个事务中包含的所有操作,要么全部执行成功,要么全部执行失败…

    database 2023年3月27日
    00
  • PostgreSQL中json数据类型详解

    PostgreSQL中json数据类型详解 什么是json JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 JSON格式中的数据可以被任何编程语言读取和解析,因为它使用了键值对的形式。此外,JSON是一种自文档化的数据结构。 PostgreSQL 中的json PostgreSQL支持JSON格式的存储、查询和…

    database 2023年5月19日
    00
  • Win2008中SqlServer2008 无法打开错误日志文件导致无法启动的解决方法

    以下是详细的攻略: 问题描述 在Win2008系统中使用SqlServer2008时,可能会遇到无法启动的问题。查看错误日志时发现无法打开日志文件,导致无法启动。此时,我们需要进行以下的解决方法。 解决方法 方法一:修改服务启动参数 打开服务管理器,找到SQL Server服务,选中右键,选择“属性”。 在“属性”对话框中,选择“服务”选项卡,找到“启动参数…

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