SpringBoot整合Redis附带视频源码

一、环境

Linux下安装Redis

1-1、SpringBoot 2.2.0
1-2、JDK 11
1-3、spring-boot-starter-data-redis 2.2.0
<!--Redis-->
 <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-data-redis</artifactId>
     <version>2.2.0.RELEASE</version>
 </dependency>
 <!-- 辅助Redis -->
 <dependency>
     <groupId>org.apache.commons</groupId>
     <artifactId>commons-pool2</artifactId>
     <version>2.4.2</version>
 </dependency>

二、引入Redis

2-1、application.yml/properties
spring:
  redis:
    database: 1
    host: 127.0.0.1
    port: 6379
    password: 123456
    timeout: 1000
    lettuce:
      pool:
        max-active: 8
        max-idle: 8
2-2、RedisConfig
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;

/**
 * 这里主要是对redis序列化进行一个配置
 * 
 * @author 小道仙
 * @date 2020年11月22日
 */
@Configuration
public class RedisConfig {

	@Bean
	public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
		RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
		template.setConnectionFactory(factory);
		Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<Object>(Object.class);
		StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
		// key采用String的序列化方式
		template.setKeySerializer(stringRedisSerializer);
		template.setHashKeySerializer(stringRedisSerializer);
		// value序列化方式采用jackson
		template.setValueSerializer(jackson2JsonRedisSerializer);
		template.setHashValueSerializer(jackson2JsonRedisSerializer);
		template.afterPropertiesSet();
		return template;
	}
}

Redis的数据类型有很多,但是我们一般用的比较多的就是String类型,我们经常会在String里面存储比如List、Object什么的。但是比如你不对数据进行序列化就会报错。

在RedisTemplate.class里面我们可以看到一个afterPropertiesSet方法,它就是用来做默认配置的,我们可以看到如果我们没有自定义自己的序列化方式,将使用JDK序列化。

this.enableDefaultSerializer 的默认值是 true

在这里插入图片描述


2-3、RedisUtils

Spring已经给我们封装好了RedisTemplete来操作redis。redis的数据类型有很多,String、List、Set、ZSet、Hash,但可能实际上我们使用的最多是String,所以我们封装一个Utils来使得我们的操作更加的简洁。

RedisUtils

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;

import java.util.concurrent.TimeUnit;

/**
 * redis相关操作
 *
 * @author 小道仙
 * @date 2020年11月21日
 */
@Component
public class RedisUtils {

    /**
     * 因为要定义一个静态变量,所以不能直接在变量上面使用 @Autowired 要使用set方式注入
     */
    public static RedisTemplate<String, Object> redisTemplate;

    @Autowired
    public RedisUtils(RedisTemplate<String, Object> redisTemplate) {
        RedisUtils.redisTemplate = redisTemplate;
    }

    /**
     * 设置一个不过期的key-value
     */
    public static void set(String key,Object value){
        redisTemplate.opsForValue().set(key, value);
    }

    /**
     * 设置一个过期的key-value
     * 过期时间 expiresTime,单位秒
     */
    public static void set(String key, Object value,Long expiresTime){
        redisTemplate.opsForValue().set(key, value,expiresTime, TimeUnit.SECONDS);
    }

    /**
     * 删除一个元素
     */
    public static Boolean delete(String key){
       return redisTemplate.delete(key);
    }

    /**
     * 判断这个key是否存在
     */
    public static Boolean hashKey(String key){
        return redisTemplate.hasKey(key);
    }
}

上面的封装方法主要是对String类型进行操作,但是因为我们在RedisConfig里面配置了序列化,所以我们这个Value可以是任何类型的,但是最后都会被序列化字符串存储起来。


Redis有五种数据类型,对应的RedisTemplete也提供了五种操作的方法

// 操作String类型
redisTemplate.opsForValue();
// 操作Set类型
redisTemplate.opsForSet();
// 操作ZSet类型
redisTemplate.opsForZSet();
// 操作List类型
redisTemplate.opsForList();
// 操作哈希类型
redisTemplate.opsForHash();

因为上面的RedisUtils只封装了对String进行操作的方法,但是变量 redisTemplate 是一个静态变量,我们可以使用它来操作其它的类型,比如我们要操作List类型数据时候可以选择这样。

RedisUtils.redisTemplate.opsForList();

三、测试使用

3-1、插入数据
@GetMapping("/test")
public void test(){
    List<String> list = new ArrayList<>();
    list.add("111");
    list.add("222");
    list.add("333");
    RedisUtils.set("key1",list);
    RedisUtils.redisTemplate.opsForList().leftPush("key2",list);
}

我们使用Redis工具查看结果

在这里插入图片描述
在这里插入图片描述

对于String类型操作很简单,下面就演示一下对于List数据类型的操作,其它的操作以此类推,也可以去看看文档。


3-2、List类型操作

我们知道List是一个数据集合,可以理解成它在里面是一个队列的形式存储一个个排序好了。

3-2-1、插入数据

因为它是集合,所以我们可以从它的前面和后面插入数据。

RedisUtils.redisTemplate.opsForList().leftPush("key2",list);
RedisUtils.redisTemplate.opsForList().rightPush("key2",list);

3-2-2、取出数据

1、类似于栈的pop出数据

 RedisUtils.redisTemplate.opsForList().leftPop("key2");
 RedisUtils.redisTemplate.opsForList().rightPop("key2");

2、类似于List的下标取出数据

RedisUtils.redisTemplate.opsForList().index("key2",0);

3、按照下标取出一个数据集

List<Object> key1 = RedisUtils.redisTemplate.opsForList().range("key2", 0, 10);

3-2-3、其它

1、通过key和下标去修改某个元素的内容

RedisUtils.redisTemplate.opsForList().set("key2",0,list);

2、返回当前key的元素个数

RedisUtils.redisTemplate.opsForList().size("key2");

3、删除某个key

RedisUtils.delete("key2");

4、其它

上面的种种操作,我们同时设置key然后再操作,我们也可以直接先找到这个元素,然后再做操作的时候就不需要设置key了。也就是我们先找到这个元素。

在这里插入图片描述


四、视频地址

https://www.bilibili.com/video/BV1kf4y1i761?p=11

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值