Redis
基于内存进⾏存储,⽀持 key-value 的存储形式,底层是⽤ C 语⾔编写的。
基于 key-value 形式的数据字典,结构⾮常简单,没有数据表的概念,直接⽤键值对的形式完成数据的
管理,Redis ⽀持 5 种数据类型:
- 字符串
- 列表
- 集合
- 有序集合
- 哈希
安装 Redis
- 下载 Redis
下载地址
- 解压,并在本地硬盘任意位置创建⽂件夹,在其中创建 3 个⼦⽂件夹
- bin:放置启动 Redis 的可执⾏⽂件
- db:放置数据⽂件
- etc:放置配置⽂件,设置 Redis 服务的端⼝、⽇志⽂件位置、数据⽂件位置…
启动 Redis 服务
- 进⼊ redis ⽬录,启动 redis-server。
sudo ./bin/redis-server ./etc/redis.conf
- 进⼊ redis ⽬录,启动 redis-cli,启动 Redis 的客户端管理窗⼝,在此窗⼝中即可操作 Redis 数据库。
./bin/redis-cli
- 对数据进⾏操作。
set key value get key
- 关闭 Redis 服务。
shutdown
- 退出客户端,control+c。
Spring Boot 整合 Redis
Spring Data Redis 操作 Redis。
-
创建 Maven ⼯程。
<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>
-
创建实体类,实现序列化接⼝,否则⽆法存⼊ Redis 数据库。
package com.southwind.entity; 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; }
-
创建控制器。
package com.southwind.controller; import com.southwind.entity.Student; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.web.bind.annotation.*; @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); } }
-
创建配置⽂件 application.yml
spring: redis: database: 0 host: localhost port: 6379
-
创建启动类
package com.southwind; 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); } }
Redis 5 种数据类型
字符串
@GetMapping("/string")
public String stringTest(){
redisTemplate.opsForValue().set("str","Hello World");
String str = (String) redisTemplate.opsForValue().get("str");
return str;
}
列表
@GetMapping("/list")
public List<String> listTest(){
ListOperations<String,String> listOperations = redisTemplate.opsForList();
listOperations.leftPush("list","Hello");
listOperations.leftPush("list","World");
listOperations.leftPush("list","Java");
List<String> list = listOperations.range("list",0,2);
return list;
}
集合
@GetMapping("/set")
public Set<String> setTest(){
SetOperations<String,String> setOperations = redisTemplate.opsForSet();
setOperations.add("set","Hello");
setOperations.add("set","Hello");
setOperations.add("set","World");
setOperations.add("set","World");
setOperations.add("set","Java");
setOperations.add("set","Java");
Set<String> set = setOperations.members("set");
return set;
}
有序集合
@GetMapping("/zset")
public Set<String> zsetTest(){
ZSetOperations<String,String> zSetOperations = redisTemplate.opsForZSet();
zSetOperations.add("zset","Hello",1);
zSetOperations.add("zset","World",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。
HashMap hashMap1 = new HashMap();
hashMap1.put(key1,value1);
HashMap hashMap2 = new HashMap();
hashMap2.put(key2,value2);
HashMap hashMap3 = new HashMap();
hashMap3.put(key3,value3);
HashOperations<String,String,String> hashOperations =
redisTemplate.opsForHash();
hashOperations.put(hashMap1,key1,value1);
hashOperations.put(hashMap2,key2,value2);
hashOperations.put(hashMap3,key3,value3);