Spring Boot集成Redis的步骤

1、引入Redis依赖

在项目中引入starter依赖,Spring Boot就能根据依赖信息自动扫描到要加载的信息并启用相应的默认配置

<!-- 引入 redis 依赖 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
    <exclusions>
         <exclusion>
             <groupId>io.lettuce</groupId>
             <artifactId>lettuce-core</artifactId>
         </exclusion>
    </exclusions>
</dependency>

2、编写配置类

将key-value进行序列化,方便操作(不进行序列化的后果是,将数据存储到数据库之后key或者value不是正常的数据类型)

SpringBoot redisTemplete 项目引用 springboot redistemplate新配置_java

下面是编写的配置类:

@Configuration
public class RedisConfiguration {
    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        // 1: 开始创建一个redistemplate
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        // 2:开始redis连接工厂
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        // 创建一个json的序列化方式
        GenericJackson2JsonRedisSerializer jackson2JsonRedisSerializer = new GenericJackson2JsonRedisSerializer();
        // 设置key用string序列化方式
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        // 设置value用jackjson进行处理
        redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
        // hash也要进行修改
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
        // 默认调用
        redisTemplate.afterPropertiesSet();
        return redisTemplate;
    }
}

3、编写yml配置文件

redis:
  host: 172.0.0.1
  port: 6379
  # 数据库索引 默认是 0
  database: 2
  # 链接超时时间 单位是ms (毫秒) 下面设置为5秒
  timeout: 5000
  password: mkxiaoer1986.
  jedis:
    pool:
      # 连接池最大连接数(使用负值表示没有限制)默认是 8
      max-active: 20
      # 连接池最大阻塞等待时间(使用负值表示没有限制)默认是 -1
      max-wait: -1
      # 连接池中最大空闲连接 默认为 8
      max-idle: 30
      # 连接池中最小空闲连接 默认为 0
      min-idle: 5

4、RedisTemplate使用和redis几种类型数据操作

(1)使用@Autowired注入RedisTemplate

@Autowired
RedisTemplate redisTemplate;

(2)String类型

//1、通过redisTemplate设置值和获取值
redisTemplate.boundValueOps("StringKey").set("StringValue");
//设置值的同时设置过期时间
redisTemplate.boundValueOps("StringKey").set("StringValue",30, TimeUnit.MINUTES);
//获取值
String str1 = (String) redisTemplate.boundValueOps("StringKey").get();

//2、通过BoundValueOperations设置值和获取值
BoundValueOperations stringKey = redisTemplate.boundValueOps("StringKey");
stringKey.set("StringVaule");
//设置值的同时设置过期时间
stringKey.set("StringValue",30, TimeUnit.MINUTES);
//获取值
BoundValueOperations stringKey = redisTemplate.boundValueOps("StringKey");
String str2 = (String) stringKey.get();

//3、通过ValueOperations设置值和获取值
ValueOperations ops = redisTemplate.opsForValue();
ops.set("StringKey", "StringVaule");
//设置值的同时设置过期时间
ops.set("StringValue","StringVaule",30, TimeUnit.MINUTES);
//获取值
ValueOperations ops = redisTemplate.opsForValue();
String str3 = (String) ops.get("StringKey");

//4、单独设置过期时间
redisTemplate.boundValueOps("StringKey").expire(30,TimeUnit.MINUTES); // 缓存30分钟
redisTemplate.expire("StringKey",30,TimeUnit.MINUTES);

//5、删除Key
Boolean result = redisTemplate.delete("StringKey");

//6、顺序递增和递减
redisTemplate.boundValueOps("StringKey").increment(3L);
redisTemplate.boundValueOps("StringKey").increment(-3L);

(3)List类型

//1、通过redisTemplate设置值
redisTemplate.boundListOps("listKey").leftPush("listLeftValue1");  //左进
redisTemplate.boundListOps("listKey").rightPush("listRightValue2");  //右进

//2、通过BoundValueOperations设置值
BoundListOperations listKey = redisTemplate.boundListOps("listKey");
listKey.leftPush("listLeftValue3"); //左进
listKey.rightPush("listRightValue4"); //右进

//3、通过ValueOperations设置值
ListOperations opsList = redisTemplate.opsForList();
opsList.leftPush("listKey", "listLeftValue5"); //左进
opsList.rightPush("listKey", "listRightValue6"); //右进

//4、设置过期时间
redisTemplate.boundValueOps("listKey").expire(30,TimeUnit.MINUTES);  // 缓存30分钟
redisTemplate.expire("listKey",30,TimeUnit.MINUTES); 

//5、获取List缓存全部内容
List listKey1 = redisTemplate.boundListOps("listKey").range(0, -1); 

//6、从左或从右弹出一个元素
String listKey2 = (String) redisTemplate.boundListOps("listKey").leftPop();  //从左侧弹出一个元素
String listKey3 = (String) redisTemplate.boundListOps("listKey").rightPop(); //从右侧弹出一个元素

(4)Hash类型

//1、通过redisTemplate设置值 
redisTemplate.boundHashOps("HashKey").put("HashKey1", "HashVaue1");
//获取值
Set keys1 = redisTemplate.boundHashOps("HashKey").keys();//获取Map的Key
List values1 = redisTemplate.boundHashOps("HashKey").values();//获取Map的values
Map entries = redisTemplate.boundHashOps("HashKey").entries();//map 键值对

//2、通过BoundValueOperations设置值
BoundHashOperations hashKey = redisTemplate.boundHashOps("HashKey");
hashKey.put("HashKey2", "HashVaue2");
//获取值
Set keys2 = hashKey.keys();//获取Map的Key
List values2 = hashKey.values();//获取Map的values
Map entries1 = hashKey.entries();//map 键值对

//3、通过ValueOperations设置值和获取值
HashOperations hashOps = redisTemplate.opsForHash();
hashOps.put("HashKey","HashKey3", "HashVaue3");
//获取值
Set keys3 = hashOps.keys();//获取Map的Key
List values3 = hashOps.values();//获取Map的values
Map entries2 = hashOps.entries();//map 键值对

//4、设置过期时间
redisTemplate.boundValueOps("HashKey").expire(30,TimeUnit.MINUTES);  // 缓存30分钟
redisTemplate.expire("HashKey",30,TimeUnit.MINUTES);

(5)Set类型

//1、通过redisTemplate设置值
redisTemplate.boundSetOps("setKey").add("setValue1", "setValue2", "setValue3");
//获取值
Set set1 = redisTemplate.boundSetOps("setKey").members();

//2、通过BoundValueOperations设置值
BoundSetOperations setKey = redisTemplate.boundSetOps("setKey");
setKey.add("setValue1", "setValue2", "setValue3");
//获取值
Set set2 = setKey.members();

//3、通过ValueOperations设置值
SetOperations setOps = redisTemplate.opsForSet();
setOps.add("setKey", "SetValue1", "setValue2", "setValue3");
//获取值
Set set3 = setOps.members("setKey");

//4、设置过期时间
redisTemplate.boundValueOps("setKey").expire(30,TimeUnit.MINUTES);  // 缓存30分钟
redisTemplate.expire("setKey",30,TimeUnit.MINUTES);