## Redis
基于内存进行存储,支持key-value的存储形式,底层是用C语言编写的。
基于key-value形式的数据字典,结构非常简单,没有数据表的概念。
直接用键值对的形式进行数据的管理。
Redis支持5种数据类型:
1)字符串
2)列表
3)集合
4)有序集合
5)哈希
## 安装Redis
**苹果电脑**
下载:
redis.io
解压,在本地硬盘任意位置创建文件夹,在其中创建3个子文件夹
1)bin:放置启动Redis的可执行
2)db:放置数据文件
3)etc:放置配置文件,设置Redis服务的端口、日志文件的位置、数据文件位置。
**windows电脑**
https://github.com/tporadowski/redis/releases
下载 .zip文件
**linux电脑**
菜鸟教程上有呀
## 启动Redis服务(windows)
1,进入redis目录,启动redis-server
```yaml
redis-server.exe redis.windows.conf
```
2,进入redis目录,启动redis-cli,启动Redis的客户端窗口,在此窗口中即可操作Redis
数据库。
```yaml
redis-cli.exe -h 127.0.0.1 -p 6379
```
3,对数据进行操作
```yaml
set key value
get key
```
4,关闭Redis服务
```yaml
shutdown
```
5,退出客户端
```yaml
control+c
```
## Spring Boot整合Redis
Spring Data Redis 操作Redis:
https://baijiahao.baidu.com/s?id=1661937038552348304&wfr=spider&for=pc
1,创建一个maven工程
```yaml
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.5.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
```
2,创建实体类,实现序列化接口,否则无法存入Redis数据库。
```java
package com.shuang;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
@Data
public class Student implements Serializable {
private Integer id;
private String name;
private Double score;
private Date birthday;
}
```
3,创建控制器
```java
package com.shuang.controller;
import com.shuang.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 {
@Autowired
private RedisTemplate redisTemplate;
@PostMapping("/set")
public void set(@RequestBody Student student){
redisTemplate.opsForValue().set("student",student);
}
@GetMapping("/get/{key}")
public Student get(@PathVariable("key") String key ){
return (Student)redisTemplate.opsForValue().get(key);
}
@DeleteMapping("/delete/{key}")
public boolean delete(@PathVariable("key") String key){
redisTemplate.delete(key);
return redisTemplate.hasKey(key);
}
}
```
4,创建配置文件 application.yml
```yaml
spring:
redis:
database: 0
host: localhost
port: 6379
```
5,创建启动类
```java
package com.shuang;
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);
}
}
```
## Redis5种数据类型
**字符串**
```java
@GetMapping("/string")
public void stringTest(){
redisTemplate.opsForValue().set("str","hellow string");
String str=(String) redisTemplate.opsForValue().get("str");
System.out.println(str);
}
```
**列表**
```java
@GetMapping("/list")
public List<String> listTest(){
ListOperations<String,String> listOperations=redisTemplate.opsForList();
listOperations.leftPush("list","hello");
listOperations.leftPush("list","word");
listOperations.leftPush("list","java");
List<String> list=listOperations.range("list",0,2);
return list;
}
```
**集合**
```java
@GetMapping("/set")
public Set<String> setTest(){
SetOperations<String ,String> setOperations=redisTemplate.opsForSet();
setOperations.add("set","hello");
setOperations.add("set","hello");
setOperations.add("set","word");
setOperations.add("set","word");
setOperations.add("set","java");
setOperations.add("set","java");
Set<String> set= setOperations.members("set");
return set;
}
```
**有序集合**
```java
@GetMapping("/zset")
public Set<String> zsetTest(){
ZSetOperations<String,String> zSetOperations=redisTemplate.opsForZSet();
zSetOperations.add("zset","Hello",1);
zSetOperations.add("zset","word",2);
zSetOperations.add("zset","java",3);
Set<String> set=zSetOperations.range("zset",0,2);
return set;
}
```
**哈希**
HashMap key value
HashOperations key hashkey value
key是一组数据的ID,hashkey和value是一组完整的HashMap数据,通过key来区分不同的Hashmap。
```java
HashMap hashMap1=new HashMap();
hashMap1.put(key1,value1);
HashMap hashMap2=new HashMap();
hashMap2.put(key2,value2);
```
```java
@GetMapping("/hash")
public void hashTest(){
HashOperations<String,String,String> hashOperations=redisTemplate.opsForHash();
hashOperations.put("key","hashkey","hello");
System.out.println(hashOperations.get("key","hashkey"));
}
```
操作对象是最常用的。
原本2天前就打算写的,老姐买了一个家庭KTV套装,试了一下效果,今天星期六了,啊啊啊,干了5个小时终于搞完了.