Redis之RedisTemplate在实际开发中的使用

        本篇文章介绍的是RedisTemplate在实际开发中如何使用,从SpringBoot自动装配RedisTemplate出发,介绍如何定义自己的RedisTemplate,到RedisTemplate的封装,老司机不必再浪费时间,O(∩_∩)O

一、SpringBoot中集成RedisTemplate

        我的上一篇博客清楚明了介绍了在SpringBoot中如何集成Redis,其中遇到了一些问题,都有记录,可以看下:如何在SpringBoot中集成Redis(RedisTemplate)_springboot集成redistemplate_LuckyWangxs的博客-CSDN博客

二、RedisTemplate自动装配

        org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration这个类为RedisTemplate自动装配的类,我们不妨打开看一眼:

        1)这个带@Bean注解的就是SpringBoot默认为我们装配的RedisTemplate,我们可以看到装配类型是RedisTemplate<Object, Object>,所以默认情况下我们只能自动注入<Object, Object>或者<String, String>泛型的RedisTemplate(上一篇博客记录了踩过的这个坑)

        2)我们可以看到方法上带有@ConditionalOnMissingBean(name = "redisTemplate"),这个注解的作用就是如果我们自己定义了RedisTemplate并放入了IoC,那SpringBoot的这个RedisTemplate就不生效了,我们用@Autowired注入的RedisTemplate就是我们自己写的那个了

        3)默认的这个RedisTemplate使用的序列化方式是jdk的,所以我们存入的Object要实现序列化接口,不然会报错,但在实际开发中我们并不想用这种序列化方式,我们都会采用JSON方式的序列化

三、自定义RedisTemplate

        在实际开发中,我们用的RedisTemplate通常是<String, Object>这种泛型,所以我们自定义的RedisTemplate采用这种泛型,并用@Configuration和@Bean注解将我们自己定义的RedisTemplate放入IoC容器,使默认RedisTemplate失效:

@Configuration
public class RedisConfig {

    @Bean
    @SuppressWarnings("all")
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        //设置连接工厂,包含一些Redis连接信息
        redisTemplate.setConnectionFactory(factory);

        // Json序列化配置
        Jackson2JsonRedisSerializer jsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        jsonRedisSerializer.setObjectMapper(objectMapper);

        // String的序列化
        StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();

        // key均采用String序列化方式
        redisTemplate.setKeySerializer(stringRedisSerializer);
        // hsah的key也采用String序列化的方式
        redisTemplate.setHashKeySerializer(stringRedisSerializer);
        // value采用json的序列化方式
        redisTemplate.setValueSerializer(jsonRedisSerializer);
        // hash的value也采用json的序列化方式
        redisTemplate.setHashKeySerializer(jsonRedisSerializer);

        redisTemplate.afterPropertiesSet();
        return redisTemplate;
    }

}

四、RedisTemplate的工具类RedisUtil

        上篇博客的案例提到过RedisTemplate的使用,例如往Redis中存值、取值、设置失效时间:

// 存
redisTemplate.opsForValue().set(id, blogTemp);
// 取
redisTemplate.opsForValue().get(id);
// 设置失效时间
redisTemplate.expire(id, 30, TimeUnit.SECONDS)

        我们可以发现每次都要写很长,所以在实际开发中不仅会定义自己的RedisTemplate,而且还会给写一个工具类,目的就是为了方便,下面用代码简单举例说明,大家可以按照如此思路定义方便自己的使用Utils:

@Component
public final class RedisUtil {
    
    // 此处自动注入参数是上述自己定义的RedisTemplate,而非默认的
    @Autowired
    private RedisTemplate<String, Object> redisTemplate;
    
    /**
     * 取
     * @param key 键
     * @return
     */
    public Object get(String key) {
        return key == null ? null : redisTemplate.opsForValue().get(key);
    }

    /**
     * 普通缓存放入
     * @param key   键
     * @param value 值
     * @return true成功 false失败
     */
    public boolean set(String key, Object value) {
        try {
            redisTemplate.opsForValue().set(key, value);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

    /**
     * 指定缓存失效时间
     * @param key  键
     * @param time 时间(秒)
     * @return
     */
    public boolean expire(String key, long time) {
        try {
            if (time > 0) {
                redisTemplate.expire(key, time, TimeUnit.SECONDS);
            }
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

    /**
     * 根据key 获取过期时间
     * @param key 键 不能为null
     * @return 时间(秒) 返回0代表为永久有效
     */
    public long getExpire(String key) {
        return redisTemplate.getExpire(key, TimeUnit.SECONDS);
    }
}

        这样我们存值就可以这么写:

public class PaymentServiceImpl implements PaymentService {
    
    @Autowired
    private RedisUtil redisUtil;
    
    @Override
    public ResultVO getByPrimaryKey(Integer id) {
        // 取值
        redisUtil.get(id.toString());
        return ResultVO.success();
    }
}

        大家理解这个思想就可以,网上有一大堆这种工具类,当然如果你有时间,也可以自己写一套自己用着舒服的Util。

  • 7
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Spring Boot集成Redis可以通过以下步骤实现: 1. 添加Redis依赖:在Spring Boot项目的pom.xml文件添加以下依赖: ``` <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> ``` 2. 配置Redis连接信息:在application.properties文件添加以下配置信息: ``` spring.redis.host=redis服务器IP spring.redis.port=redis服务器端口号 spring.redis.password=redis密码 ``` 3. 创建RedisTemplate:在Java代码创建RedisTemplate对象,并注入到需要使用Redis的类。 ``` @Configuration public class RedisConfig { @Bean public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) { RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>(); redisTemplate.setConnectionFactory(factory); redisTemplate.setKeySerializer(new StringRedisSerializer()); redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer<>(Object.class)); redisTemplate.afterPropertiesSet(); return redisTemplate; } } ``` 4. 使用RedisTemplate操作Redis:通过RedisTemplate对象的方法,可以进行各种Redis操作,如set、get、delete等。 以上是Spring Boot集成Redis的基本步骤,具体实现还需根据具体需求进行配置和调整。 ### 回答2: Spring Boot是一个基于Spring框架的快速开发框架,它提供了简化的配置和开箱即用的功能,使得我们可以快速构建和部署应用程序。而Redis是一个高性能的键值对存储数据库,它常被用于缓存和数据存储。 在Spring Boot集成Redis,首先需要引入相关的依赖。可以通过Maven或Gradle来引入spring-boot-starter-data-redis依赖,该依赖会自动引入Redis相关的配置和依赖库。 然后,在配置文件添加Redis的连接信息。在application.properties或application.yml,可以配置Redis的主机地址、端口号、密码等信息。 接下来,在需要使用Redis的地方,可以使用@Autowired注解来注入RedisTemplate对象。RedisTemplateSpring提供的操作Redis的模板类,它封装了常用的操作方法。 使用RedisTemplate,可以通过调用其对应的方法来操作Redis数据库,比如设置键值对、获取键值对、设置过期时间等。 除了RedisTemplateSpring Boot还提供了RedisCacheManager类用于缓存管理,它可以通过注解@Configuration和@EnableCaching来启用缓存功能。在需要缓存的方法上使用@Cacheable注解,就可以将方法的返回值缓存Redis,下次调用时可以直接从缓存获取,提高了性能。 总的来说,集成RedisSpring Boot,只需要引入依赖、配置连接信息,然后通过RedisTemplate操作Redis数据库,或使用RedisCacheManager进行数据缓存管理就可以了。这样可以简化我们与Redis的交互,提高开发效率和应用性能。 ### 回答3: 在Spring Boot,集成Redis可以通过以下步骤实现: 1. 在pom.xml文件添加Redis的依赖库: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> ``` 2. 在application.properties或application.yaml文件配置Redis连接信息: ```properties spring.redis.host=127.0.0.1 spring.redis.port=6379 spring.redis.password= ``` 3. 创建一个Redis配置类,用于配置Redis连接工厂: ```java @Configuration @EnableCaching public class RedisConfig extends CachingConfigurerSupport { @Bean @Override public KeyGenerator keyGenerator() { return new KeyGenerator() { @Override public Object generate(Object target, Method method, Object... params) { // 生成缓存的key,可以根据实际需求定制 return ""; } }; } @Bean public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) { RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>(); redisTemplate.setConnectionFactory(connectionFactory); // 设置value的序列化方式 redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer()); // 设置key的序列化方式 redisTemplate.setKeySerializer(new StringRedisSerializer()); redisTemplate.afterPropertiesSet(); return redisTemplate; } } ``` 4. 在需要使用Redis的类,通过注入RedisTemplate来操作Redis: ```java @Autowired private RedisTemplate<String, Object> redisTemplate; public void cacheData(String key, Object value) { redisTemplate.opsForValue().set(key, value); } public Object getData(String key) { return redisTemplate.opsForValue().get(key); } ``` 通过以上步骤,我们就成功在Spring Boot集成了Redis,可以方便地使用Redis进行缓存、存储和读取数据。在配置Redis时,我们需要根据实际情况修改host、port和password等配置项。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值