提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- Spring Data Redis
- https://spring.io/projects/spring-data-redis
- 1.依赖
- 2.RedisTemplate
- 3.案例
- 序列化
- 1.默认是 JdkSerializationRedisSerializer
- 2.添加Redis配置文件,使用 String 序列化、Json 序列化
- 3.案例
- 4.StringRedisTemplate
- RedisTemplate中API使用
- 基础
- 1.String类型相关操作
- 2.Hash类型相关操作
- 3.Set类型相关操作
- 4.List类型相关操作
- 5.Zset类型的相关操作
Spring Data Redis
https://spring.io/projects/spring-data-redis
1.依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
- 在 application.yml 配置 Redis 的信息
spring:
redis:
host: 127.0.0.1
port: 6379
password: 123456
database: 0 # 几号库
lettuce:
pool:
max-active: 8 # 最大连接
max-idle: 8 # 最大空闲连接
min-idle: 0 # 最小空闲连接
max-wait: 100ms # 连接等待时间
2.RedisTemplate
3.案例
- 注入 RedisTemplate
@Autowired
private RedisTemplate redisTemplate;
- Demo
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.DefaultTypedTuple;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ZSetOperations;
import java.util.*;
@SpringBootTest
public class RedisDemoApplicationTest {
// 注入 RedisTemplate
@Autowired
private RedisTemplate redisTemplate;
// String 类型
@Test
void testString () {
redisTemplate.opsForValue().set("name", "xiaobai");
Object name = redisTemplate.opsForValue().get("name");
System.out.println(name);
}
// Hash 类型
@Test
public void testHash () {
redisTemplate.opsForHash().put("user1", "name", "clarence");
redisTemplate.opsForHash().put("user1", "age", "25");
Map map = redisTemplate.opsForHash().entries("user1");
System.out.println(map);
}
// List 类型
@Test
public void testList () {
redisTemplate.opsForList().leftPushAll("names", "xiaobai", "xiaohei", "xiaolan");
List<String> names = redisTemplate.opsForList().range("names", 0, 3);
System.out.println(names);
}
// Set 类型
@Test
public void testSet () {
redisTemplate.opsForSet().add("set", "a", "b", "c");
Set<String> set = redisTemplate.opsForSet().members("set");
System.out.println(set);
}
// SortedSet 类型
@Test
public void testSortedSet () {
redisTemplate.opsForZSet().add("class", "xiaobai", 90);
Set aClass = redisTemplate.opsForZSet().rangeByScore("class", 90, 100);
System.out.println(aClass);
Set<ZSetOperations.TypedTuple<String>> set = new HashSet<>();
set.add(new DefaultTypedTuple<>("xiaohei", 88.0));
set.add(new DefaultTypedTuple<>("xiaohui", 94.0));
set.add(new DefaultTypedTuple<>("xiaolan", 84.0));
set.add(new DefaultTypedTuple<>("xiaolv", 82.0));
set.add(new DefaultTypedTuple<>("xiaohong", 99.0));
redisTemplate.opsForZSet().add("class", set);
Set aClass1 = redisTemplate.opsForZSet().range("class", 0, 6);
System.out.println(aClass1);
}
}
https://blog.csdn.net/AlbenXie/article/details/109348114?
序列化
1.默认是 JdkSerializationRedisSerializer
- RedisTemplate 可以接收任意 Object 作为值写入 Redis,不过在写入前会把 Object 序列化为字节形式,默认是采用 JDK 序列化,上面的 demo 运行后得到的结果如下:
2.添加Redis配置文件,使用 String 序列化、Json 序列化
- Redis 配置文件
package com.fc.config;
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.RedisSerializer;
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
// 创建 RedisTemplate 对象
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
// 设置连接工厂
redisTemplate.setConnectionFactory(connectionFactory);
// 设置 Key 的序列化 - String 序列化 RedisSerializer.string() => StringRedisSerializer.UTF_8
redisTemplate.setKeySerializer(RedisSerializer.string());
redisTemplate.setHashKeySerializer(RedisSerializer.string());
// 设置 Value 的序列化 - JSON 序列化 RedisSerializer.json() => GenericJackson2JsonRedisSerializer
redisTemplate.setValueSerializer(RedisSerializer.json());
redisTemplate.setHashValueSerializer(RedisSerializer.json());
// 返回
return redisTemplate;
}
}
- 引入 Jackson 依赖
<!--Jackson依赖-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.11.4</version>
</dependency>
3.案例
- 添加 User 实体类
package com.fc.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
private String name;
private Integer age;
}
- Demo
package com.fc;
import com.fc.entity.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.RedisTemplate;
@SpringBootTest
public class RedisDemoApplicationTest2 {
// 注入 RedisTemplate
@Autowired
private RedisTemplate<String, Object> redisTemplate;
@Test
void testString() {
redisTemplate.opsForValue().set("name", "小白");
Object name = redisTemplate.opsForValue().get("name");
System.out.println(name);
}
@Test
void testSaveUser() {
redisTemplate.opsForValue().set("user", new User("小白", 23));
User user = (User) redisTemplate.opsForValue().get("user");
System.out.println(user);
}
}
4.StringRedisTemplate
- 从上述 Demo 的运行结果可以看到,为了在反序列化时知道对象的类型,Json 序列化会将类的 class 类型写入 json 结果中存入 Redis,会带来额外的内存开销
- 为了节省内存空间,我们并不会使用 json 序列化器来处理 value,而是统一使用 String 序列化器,要求只能存储 String
类型的 key 和 value。当需要存储 Java 对象时,手动完成对象的序列化和反序列化 - spring 提供了一个 StringRedisTemplate 类,其 key 和 value 的序列化方式默认为 String 方式
引入 fastjson 依赖
<!--fastjson依赖-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.62</version>
</dependency>
- Demo
package com.fc;
import com.alibaba.fastjson.JSON;
import com.fc.entity.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.StringRedisTemplate;
@SpringBootTest
public class RedisDemoApplicationTest3 {
// 注入 StringRedisTemplate
@Autowired
private StringRedisTemplate stringRedisTemplate;
@Test
void testSaveUser() {
User user = new User("小白", 23);
// 序列化
stringRedisTemplate.opsForValue().set("user", JSON.toJSONString(user));
String user1 = stringRedisTemplate.opsForValue().get("user");
// 反序列化
User user2 = JSON.parseObject(user1, User.class);
System.out.println(user2);
}
}
RedisTemplate中API使用
- pom.xml依赖
<!--springboot-Redis-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!--Redis-->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
<version>2.0.6.RELEASE</version>
</dependency>
<!--jedis-->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
首先使用@Autowired注入RedisTemplate(后面直接使用,就不特殊说明)
@Autowired
private RedisTemplate redisTemplate;
基础
1.String类型相关操作
2.Hash类型相关操作
3.Set类型相关操作
4.List类型相关操作
5.Zset类型的相关操作