SpringBoot 集成Redis

Reids概述:redis是一个基于内存的单线程高性能key—value型数据库。读写性能优异,支持丰富的数据类型,包括String(字符串)、list(链表)、set(集合)、zset(有序集合)、hash(哈希类型)

第一步、我们安装redis。地址Releases · microsoftarchive/redis · GitHub

第二步,在springboot中引入依赖

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

第三步、添加redis配置信息,在application.properties文件中添加如下信息:

spring:
  redis:     # redis配置
    database: 0      # Redis数据库索引(默认为0)
    host: localhost
    port: 6379
    timeout: 5000    # ms
    password: 123456

第三步、测试用例开发

package com.example.demo;

import com.example.demo.model.AyUser;
import com.example.demo.service.AyUserService;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.RedisTemplate;

import javax.annotation.Resource;
import java.util.List;

@SpringBootTest
public class RedisTests {
    @Resource
    private RedisTemplate redisTemplate;

    @Resource
    private AyUserService ayUserService;

    private static final String ALL_USER = "ALL_USER_LIST";
    /**
     * 测试redis
     */
    @Test
    public void testRedis() {
        //  Key: name, value: ay
        redisTemplate.opsForValue().set("names", "ay");
        String name = (String)redisTemplate.opsForValue().get("names");
        System.out.println(name);

        AyUser ayUser = new AyUser();
        ayUser.setId("8");
        ayUser.setName("小花");
        redisTemplate.opsForValue().set("uu", ayUser);
        AyUser user = (AyUser)redisTemplate.opsForValue().get("uu");

        List<AyUser> all = ayUserService.findAll();
        redisTemplate.delete(ALL_USER);
        redisTemplate.opsForList().leftPushAll(ALL_USER,all);
        List<AyUser> range = redisTemplate.opsForList().range(ALL_USER, 0, -1);
    }
}

RedisTemplate是Spring Data Redis为我们提供用来操作redist数据库的模板类。Spring会为我们初始化这个类,通过@Resource注解注入即可使用。

当我们把数据存到redis的时候,都是通过Spring提供的Serializer序列化到数据库的。

RedisTemplate默认使用JdkSerializationRedisSerializer它不能序列化对象、我们可以修改它的序列化方式,用来完成对象的序列化

package com.example.common.redis;

import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

@Configuration
public class RedisConfig {

    /**
     *
     * 自定义RedisTemplate的序列化方式
     * @param
     * @return
     */
    @Bean
    public RedisTemplate redisTemplate(RedisConnectionFactory factory) {
        RedisTemplate redisTemplate = new RedisTemplate();
        //设置连接方式
        redisTemplate.setConnectionFactory(factory);
        // 使用Jackson2JsonRedisSerialize 替换默认序列化
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);

        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        objectMapper.activateDefaultTyping(objectMapper.getPolymorphicTypeValidator(),ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.WRAPPER_ARRAY);
        jackson2JsonRedisSerializer.setObjectMapper(objectMapper);

        // 设置key的序列化规则和value的序列化规则
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
        redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
        redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
        return redisTemplate;
    }
}

到此,springboot集成redis就完成了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值