SpringBoot整合Redis|StringRedisTemplate和RedisTemplate得测试|数据类型相关操作|基本原理

  1. pom.xml
 <dependencyManagement>
        <dependencies>
            <!-- 导入SpringBoot需要使用的依赖信息 -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.1.6.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <dependencies>
        <!-- 引入整合Redis所需的场景启动器 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <!-- 引入SpringBoot测试的场景启动器 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
  1. 创建application.yml配置文件:在main/resources目录下创建application.yml,在这个配置文件中配置Redis连接信息
spring:
redis:
host: 192.168.19.88
port: 6379
  1. 创建主启动类
@SpringBootApplication
public class SpringBootMainClass {
    public static void main(String[] args) {
        SpringApplication.run(SpringBootMainClass.class, args);
    }
}
  1. 创建测试类: 在test文件夹下创建一个SpringBootRedisTest测试类
    1)带泛型的模板类:虽然使用泛型可以指定各种具体数据类型,但是用着不方便。Redis中最基本的数据类型就是字符串。
    2)StringRedisTemplate在继承RedisTemplate时直接指定泛型为String类型,所有操作都按照字符串处理,使用非常方便
package com.atguigu.spring.boot.test;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringBootRedisTest {

    // 带泛型的模板类:虽然使用泛型可以指定各种具体数据类型,但是用着不方便。Redis中最基本的数据类型就是字符串。
    @Autowired
    private RedisTemplate<Object, Object> redisTemplate;

    // StringRedisTemplate在继承RedisTemplate时直接指定泛型为String类型,所有操作都按照字符串处理,使用非常方便
    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    @Test
    public void RedisTemplateTest(){
        // 1. 根据要操作得类型获取Operation对象
        ValueOperations<Object, Object> operations = redisTemplate.opsForValue();

        // 2. 执行操作
        operations.set("cat","miaomiao");
    }

    @Test
    public void StringRedisTemplateTest(){
        // 1. 根据要操作得类型获取Operation对象
        ValueOperations operations = redisTemplate.opsForValue();

        // 2. 执行操作
        operations.set("daxiang","fengfeng");
    }

}

在这里插入图片描述

  1. 查看结果:一般用StringRedisTemplate较多,RedisTemplate的出来得结果为序列化后得值
>  sudo bin/redis-cli -h 192.168.43.102 -p 6379

在这里插入图片描述

key相关操作

在这里插入图片描述

string类型操作

先获取“操作对象”,然后调用“操作对象”的相关方法即可

ValueOperations<String, String> operations = stringRedisTemplate.opsForValue();
operations.set("hello", "hello-value");

list类型操作

先获取“操作对象”,然后调用“操作对象”的相关方法即可

ListOperations<String, String> operations = stringRedisTemplate.opsForList();
List<String> fruitList = operations.range("fruit", 0, -1);
for (String fruit : fruitList) {
    System.out.println(fruit);
}

set类型操作

 SetOperations<String, String> operations = stringRedisTemplate.opsForSet();
        Set<String> animalSet = operations.members("animal");
        for (String animal : animalSet) {
            System.out.println("animal="+animal);
        }

hash类型操作

HashOperations<String, Object, Object> operations = stringRedisTemplate.opsForHash();
Map<Object, Object> studentMap = operations.entries("student");
Set<Map.Entry<Object, Object>> entries = studentMap.entrySet();
for (Map.Entry<Object, Object> entry : entries) {
    Object key = entry.getKey();
    Object value = entry.getValue();
    System.out.println(key+"="+value);
}

zset类型操作

ZSetOperations<String, String> operations = stringRedisTemplate.opsForZSet();
Set<ZSetOperations.TypedTuple<String>> chengjiSet = operations.rangeWithScores("chengji", 0, -1);
for (ZSetOperations.TypedTuple<String> stringTypedTuple : chengjiSet) {
    String value = stringTypedTuple.getValue();
    Double score = stringTypedTuple.getScore();
    System.out.println(value+"="+score);
}

基本原理

  1. SpringBoot的自动化配置包:spring-boot-autoconfigure-2.1.6.RELEASE.jar
  2. 自动化配置包中的重要配置文件:在META-INF目录下有一个spring.factories文件
  3. 重要配置文件中配置了大量自动化配置类:属性名是:org.springframework.boot.autoconfigure.EnableAutoConfiguration
  4. Redis的自动化配置类:org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration
  5. 配置项的默认值:RedisProperties类中定义了Redis配置的默认值。
@Configuration
@ConditionalOnClass(RedisOperations.class)
@EnableConfigurationProperties(RedisProperties.class)
@Import({ LettuceConnectionConfiguration.class, JedisConnectionConfiguration.class })
public class RedisAutoConfiguration {@Bean
    @ConditionalOnMissingBean(name = "redisTemplate")
    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory)
            throws UnknownHostException {
        RedisTemplate<Object, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(redisConnectionFactory);
        return template;
    }@Bean
    @ConditionalOnMissingBean
    public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory)
            throws UnknownHostException {
        StringRedisTemplate template = new StringRedisTemplate();
        template.setConnectionFactory(redisConnectionFactory);
        return template;
    }

}

版权声明:本文为qq_40180229原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。