Redis介绍
Redis是将数据存储在内存中,Redis的速度非常快,也支持开发人员的大多数数据集,Redis提供了多种功能特性,可用作非关系型数据库、缓存中间件、消息中间件等。
整合Redis的步骤
-
1.在pom文件中添加Spring Data Redis依赖启动器
-
2.编写实体类
-
3.编写Repository接口
-
4.在全局配置文件application.properties中添加Redis数据库连接配置
-
5.编写单元测试进行接口方法测试以及整合测试
第一步,在pom.xml文件中添加SpringDataRedis 依赖启动器
第二步,安装Redis。
Redis Desktop Manager(Redis可视化工具)安装及使用详细教程_redisdesktopmanager-CSDN博客
服务启动不成功,显示端口号被占用了
在redius中配置用户名和密码
我去,环境变量刚才没配置好,一直进不去
图形化界面连接数据库
可以看到我们已经连接成功了。
第二步,配置文件中连接
字符串
错误原因:
一个@Autowired只能标记一个对象
完整代码:
@Test
void testString(){
ValueOperations<String,String> ops = redisTemplate.opsForValue();
// 这行代码的作用是获取 RedisTemplate 对象的 ValueOperations 操作对象,用于执行与 Redis 中 "String" 类型相关的操作。
ops.set("name","小林");
System.out.println(ops.get("name"));
//大概存储为一个字段一个value的形式
ops.set("age","18",30, TimeUnit.SECONDS);
//8秒过期
System.out.println(ops.get("age"));
}
效果:
对象
1.在实体类中加入@Data注解之后依旧要写构造方法,不然依旧会显示空
2.在实体类中要接入接口确保它可以被 JDK 的默认序列化机制正确处理
全部代码
package com.xyu.po;
import lombok.Data;
import java.io.Serializable; // 引入 Serializable 接口
@Data
public class User implements Serializable { // 实现 Serializable 接口
private String name;
private int age;
// 构造函数
public User(String name, int age) {
this.name = name;
this.age = age;
}
}
@Test
void class_1(){
ValueOperations<String, Object> ops = redisTemplate.opsForValue();
// 创建 User 对象
User user = new User("小六", 20);
// 存储到 Redis
ops.set("user_key", user);
// 从 Redis 获取数据
User retrievedUser = (User) ops.get("user_key");
// 打印输出
System.out.println("从 Redis 获取的 User: " + retrievedUser);
}
效果:
Hash 是一种非常常用的数据结构,允许存储多个字段和对应的值
全部代码
@Test
void Hash_1(){
HashOperations hash =redisTemplate.opsForHash();
hash.put("user:1000", "name", "John Doe");
hash.put("user:1000", "age", 30);
hash.put("user:1000", "email", "john@example.com");
// key: 这是 Redis 哈希表的键(也叫做哈希的名称)。它是你存储哈希表的标识符,可以理解为类似于数据库表的名字。例如,"user:1000" 表示用户 ID 为 1000 的哈希表。
// field: 这是哈希表中的字段名称。哈希表是由多个字段组成的,每个字段都对应一个值。可以理解为哈希表中的 "列"。例如,"name"、"age" 或 "email"。
// alue: 这是哈希表字段的值。它是你想要存储在该字段中的数据。例如,"John Doe"、30 或 "john@example.com"。
System.out.println(hash.get("user:1000", "name"));
}
}
效果
list数据
全部代码
@Test
void list(){
ListOperations listOperations =redisTemplate.opsForList();
listOperations.leftPush("myList", "a"); // 列表变为: ["a"]
listOperations.leftPush("myList", "b"); // 列表变为: ["b", "a"]
listOperations.leftPush("myList", "c"); // 列表变为: ["c", "b", "a"]
System.out.println(listOperations.range("myList",0,-1));
listOperations.leftPop("myList");
System.out.println(listOperations.size("myList"));
}
}
效果:
Set数据(不可以重复)
全部代码
@Test
void testSet() {
// 获取 Set 操作对象
SetOperations<String, String> ops = redisTemplate.opsForSet();
// 1. SADD 操作:添加元素到 Set
ops.add("user_set1", "小林", "小林2", "小林3");
ops.add("user_set2", "小林2", "小林3", "小林4");
// 2. SMEMBERS 操作:获取 Set 中的所有元素
System.out.println("user_set1 = " + ops.members("user_set1"));
System.out.println("user_set2 = " + ops.members("user_set2"));
// 3. SCARD 操作:获取 Set 的大小
System.out.println("size of user_set1 = " + ops.size("user_set1"));
System.out.println("size of user_set2 = " + ops.size("user_set2"));
// 4. SINTER 操作:计算两个 Set 的交集
System.out.println("交集 = " + ops.intersect("user_set1", "user_set2"));
// 5. SUNION 操作:计算两个 Set 的并集
System.out.println("并集 = " + ops.union("user_set1", "user_set2"));
// 6. SREM 操作:从 Set 中移除元素
ops.remove("user_set1", "小林2");
System.out.println("user_set1 after removal = " + ops.members("user_set1"));
}
效果:
ZSet(有序集合)是一个非常重要的数据结构,它是一个集合类型,每个元素都会关联一个分数(score),并且 Redis 会根据分数对集合中的元素进行自动排序。
代码
@Test
void testZSetOperations() {
// 获取 ZSet 操作对象
ZSetOperations<String, String> ops = redisTemplate.opsForZSet();
// 1. 添加元素到 ZSet(ZADD)
ops.add("user_scores", "小林", 90);
ops.add("user_scores", "小江", 80);
ops.add("user_scores", "小李", 70);
ops.add("user_scores", "小秋", 75);
// 2. 获取分数升序排列的元素(ZRANGE)
System.out.println("分数升序:" + ops.range("user_scores", 0, -1));
// 3. 获取分数降序排列的元素(ZREVRANGE)
System.out.println("分数降序:" + ops.reverseRange("user_scores", 0, -1));
// 4. 修改分数(ZINCRBY)
ops.incrementScore("user_scores", "小江", 10); // 小江增加 10 分
// 5. 获取修改后的 ZSet(ZRANGE)
System.out.println("修改后分数升序:" + ops.rangeWithScores("user_scores", 0, -1));
}
效果