SpringBoot整合Redis—RedisTemplate
Spring Boot 整合Redis (一) spring-boot-starter-data-redis
SpringBoot 使用Spring Data Redis 这个框架来操作Redis
1、创建SpringBoot工程, 添加依赖
添加依赖:spring-boot-starter-data-redis
<!--SpringBoot依赖-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-parent</artifactId>
<version>2.2.2.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- SpringBoot默认通过客户端来操作Redis,
所以我们需要引入连接池commons-pool2-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
<!--lombok依赖能简化实体类的开发 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
2、创建实体类
package com.Redis.entity;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
@Data
public class student implements Serializable {
//实现序列化接口Serializable,不实现,不能存进Redis
private Integer id;
private String name;
private Double score;
private Date birthday;
}
3、创建控制器
package com.Redis.controller;
import com.Redis.entity.Student;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class StudentHandler {
//RedisTemplate 封装了 lettuce
@Autowired
private RedisTemplate redisTemplate;
//添加一个学生对象进Redis
@PostMapping("/set")
//@RequestBody 把客户端传来的json数据转成对象
public void set(@RequestBody Student student){
//要先调用opsForValue方法,将键值对,转成对象
redisTemplate.opsForValue().set("student",student);
}
//通过key获取Redis中的值
@GetMapping("/get/{key}")
//@PathVariable做映射
public Student get(@PathVariable("key") String key){
//get方法返回的是Object类型 , 所以要强制类型转换
return (Student) redisTemplate.opsForValue().get(key);
}
//删除数据
@DeleteMapping("/delete/{key}")
public boolean delete(@PathVariable("key") String key){
redisTemplate.delete(key);
//判断key值是否存在,true表示存在
return redisTemplate.hasKey(key);
}
}
4、在resources包下创建配置文件application.yml
#spring.redis.database
spring:
redis:
database: 0 #0表示使用本身的数据库
host: localhost #ip地址
port: 6370 #端口
5、创建启动类
package com.Redis;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class,args);
}
}
6、启动测试
1、 使用Postman来post数据进set接口
2、使用Postman的post请求方式, 填写json格式数据
后台拿到数据转成student对象,经过 redisTemplate.opsForValue().set(“student”,student);方法添加进redis。
在redis中使用get student 命令 会返回空 , 应为redis会给key之前添加一串字符串。使用key * 获取所有 key 。 就能知道被改成什么了
3、使用Postman来测试get接口
7、注意点
- SpringBoot整合Redis必须引入commons-pool2 与 spring-boot-starter-data-redis 依赖。
- 使用RedisTemplate 对象来操作Redis。
- 在进行get 、 set 方法之前, 必须先调用opsForValue方法。删除不用加。
redisTemplate.opsForValue().set(“student”,student); - 使用SpringBoot添加数据进Redis的时候会在key前加字符串。
SpringBoot的get方法的时候,会自动在key前添加字符串。但是使用Redis查的时候要加。 - 删除方法,不用加opsForValue方法,但是要使用hasKey方法判断还在不在
8、五种数据类型的Java操作
字符串 String
@GetMapping("/String")
public String stringTest(){
redisTemplate.opsForValue().set("str","hello");
String str = (String) redisTemplate.opsForValue().get("str");
return str;
}
列表 List
@GetMapping("/list")
public List<String> listTest(){
//操作List列表 使用opsForList方法
ListOperations<String,String> listOperations = redisTemplate.opsForList();
//从左右边添加元素
listOperations.leftPush("list","hello0");
listOperations.leftPush("list","hello1");
listOperations.rightPush("list","hello2");
//截取list中从0-2的数据
List<String> list = listOperations.range("list",0,2);
return list;
}
集合Set
@GetMapping("/set")
public Set<String> setTest(){
SetOperations<String,String> setOperations = redisTemplate.opsForSet();
setOperations.add("set","hel0");
setOperations.add("set","hel0");
setOperations.add("set","hel1");
//获取所有key为set的值
Set<String> set = setOperations.members("set");
return set;
}
有序集合Zset
ZSet与Set的区别:
Set存进去可能是乱序的
ZSet的时候附带了序号,所以是有序的
@GetMapping("/set")
public Set<String> zsetTest(){
ZSetOperations<String,String> zSetOperations = redisTemplate.opsForZSet();
zSetOperations.add("set","hel0",1);
zSetOperations.add("set","hel0",2);
zSetOperations.add("set","hel1",3);
//获取所有key为set的值
Set<String> set = zSetOperations.range("zset",0,2);
return set;
}
哈希Hash
@GetMapping("/hash")
public void hashTest(){
HashOperations<String,String,String> hashOperations = redisTemplate.opsForHash();
hashOperations.put("key","hashkey","hello");
String s = hashOperations.get("key", "hashkey");
System.out.println(s);
}
本文含有隐藏内容,请 开通VIP 后查看