SpringBoot中使用Redis

SpringBoot中使用Redis

1.在本地或者云端安装redis服务

2.项目中使用

2.1 引入依赖

  <!--        redis start-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <!--common-pool 对象池,使用redis时必须引入-->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-pool2</artifactId>
        </dependency>

        <!--Jackson依赖  如果需要将redis存入时json格式化 必须引入 而且必须写配置文件 RedisConfig -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
        </dependency>

image

2.2 写配置信息

spring:
  redis:
    database: 3
    host: localhost
    port: 16379
    password: Zz@.789++

image

2.3写配置文件

用于序列化键值,便于观看

redisTemplate是使用jdk默认编码格式来序列化的。

存的key value在redis数据库中实际上是乱码的。而StringTemplate不会。

@Configuration
public class RedisConfig {

    /**
     *
     * @param connectionFactory
     * @return org.springframework.data.redis.core.RedisTemplate<java.lang.String, java.lang.Object>
     * @author pyb
     * @date 2023/12/21 15:41
     * 初始化 redisTemplate 使存储的键值为 json 字符串
     */
    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory){
        // 创建RedisTemplate对象
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        // 设置连接工厂
        template.setConnectionFactory(connectionFactory);
        // 创建JSON序列化工具
        GenericJackson2JsonRedisSerializer jsonRedisSerializer =
                new GenericJackson2JsonRedisSerializer();
        // 设置Key的序列化
        template.setKeySerializer(RedisSerializer.string());
        template.setHashKeySerializer(RedisSerializer.string());
        // 设置Value的序列化
        template.setValueSerializer(jsonRedisSerializer);
        template.setHashValueSerializer(jsonRedisSerializer);
        // 返回
        return template;
    }
}

image

2.4 进行测试

这个 redisTemplate 不知道为什么只能用 @Resource 进行注入,使用

// @Autowired
// @Qualifier(value = "redisTemplate")

注入失败

 @Resource
    private RedisTemplate<String,Student> redisTemplate;

    @Test
    void setObject(){
        Student student = new Student(1, "张三", 183);
        redisTemplate.opsForValue().set("user:stu",student,60,TimeUnit.SECONDS);

        Student student1 = redisTemplate.opsForValue().get("user:stu");
        System.out.println(student1);
    }

    @Test
    void setList(){
        ListOperations<String, Student> ops = redisTemplate.opsForList();
        Student s1 = new Student(1, "张三", 18);
        Student s2 = new Student(2, "张三2", 18);
        Student s3 = new Student(3, "张三3", 18);
        ops.rightPush("stu:List",s1);
        ops.rightPushAll("stu:List",s2,s3);

        List<Student> range = ops.range("stu:List", 0, -1);
        System.out.println(range);

    }

image

image

2.5 使用 StringRedisTemplate

这个自带序列化

 @Autowired
    private StringRedisTemplate stringRedisTemplate;

    @Test
    void set(){
        ValueOperations<String, String> ops = stringRedisTemplate.opsForValue();
        ops.set("str:name1","ppp");
        ops.set("str:name2","y");
        ops.set("str:name3","b");
    }

image

posted @ 2024-08-19 13:00  进击的乌拉  阅读(76)  评论(0编辑  收藏  举报