Springboot整合Redis

文章目录


一、添加Maven依赖

Spring Data为Redis专门的提供了从 Spring 应用程序轻松配置和访问 Redis 的功能。所以在Maven依赖中,Redis是以spring-boot-starter-data作为前缀。下面是Redis的Maven依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

如果将bean对象直接存入Redis中,Redis中的bean很可能会是乱码。为了预防这个问题的出现,本章提供的是Jackon给对象进行序列化来解决此问题。下面是Jackson的Maven依赖:

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.76</version>
</dependency>

二、application配置

以下是部分Reids参数的配置,如果您需要查看更全的参数,可以查看RedisProperties源码,RedisProperties类中的每一个成员都是一个参数。

#这个是yml配置
spring:
  redis:
    host: 127.0.0.1   #链接Redis的IP地址
    port: 6379        #链接Redis的端口号
#这个是properties配置
spring.redis.host=127.0.0.1
spring.redis.port=6379

三、Jackson序列化器配置到RedisTemplate中

RedisTemplate类的功能:1、给定对象和底层二进制数据之间执行自动序列化/反序列化。2、对Redis进行各种数据访问存储操作。

在使用默认的RedisTemplate的情况下,bean对象存入到Redis中是乱码,所以这边通过Jackson来给RedisTemplate的键和值进行序列化设置。

@Configurable
public class RedisConfig {
    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {

        RedisTemplate<String,Object> template=new RedisTemplate<>();
        template.setConnectionFactory(redisConnectionFactory);

//      给RedisTemplate的value进行序列化
        Jackson2JsonRedisSerializer<Object> objectJackson2JsonRedisSerializer = new         
        Jackson2JsonRedisSerializer<Object>(Object.class);
        ObjectMapper om=new ObjectMapper();
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        objectJackson2JsonRedisSerializer.setObjectMapper(om);

//      给RedisTemplate的key进行序列化
        StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
        template.setKeySerializer(stringRedisSerializer);
        template.setHashKeySerializer(stringRedisSerializer);
        template.setValueSerializer(objectJackson2JsonRedisSerializer);
        template.setHashValueSerializer(objectJackson2JsonRedisSerializer);

        template.afterPropertiesSet();
        return template;
    }
}


四、Springboot对Redis的简单操作

以下代码是对Springboot对Redis的简单操作。在运行程序前,要确保redis-server是运行状态。

@SpringBootTest
class SpringbootRedisApplicationTests {
    @Autowired
    private RedisTemplate redisTemplate;
    @Test
    void contextLoads() {
        Student student=new Student("xiaoming",18);
        redisTemplate.opsForValue() .set("student",student);
        System.out.println(redisTemplate.opsForValue().get("student"));
    }
}

第一次看到redisTemplate的方法可能会有点蒙,这边就简单的讲讲redisTemplate对redis操作的方法。opsForValue方法是针对Redis的字符串操作;opsForList是针对Redis的List数据操作;opsForSet是针对Redis的Set数据进行操作。以此类推。

在实际开发中,每次对Redis进行redisTemplate.opsForXxx.xxx()时,很费时费精力。所以通常情况下,我们自己创建一个RedisUitl来简化Redis数据库的操作。如下代码所示。

@Component
public final class RedisUtil {
    @Autowired
    private RedisTemplate<String,Object> redisTemplate;

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


    /**
     * 指定缓存失效时间
     * @param key 可以传一个至多个值
     **/
    public void del(String... key){
        if(key!=null && key.length>0){
            if(key.length == 1){
                redisTemplate.delete(key[0]);
            }else{
                redisTemplate.delete((Collection<String>) CollectionUtils.arrayToList(key));
            }
        }
    }

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值