Spring Boot 与 Redis 的集成可以使用 Redis 提供的五种基本数据类型来解决不同的使用场景。以下是每种类型及其使用场景和示例代码。
1. String
使用场景:缓存简单的键值对,如计数器、字符串缓存等。
示例:
@Autowired
private StringRedisTemplate stringRedisTemplate;
public void stringExample() {
// 设置一个键值对
stringRedisTemplate.opsForValue().set("key", "value");
// 获取值
String value = stringRedisTemplate.opsForValue().get("key");
System.out.println("Value: " + value);
// 自增操作
stringRedisTemplate.opsForValue().increment("counter", 1);
}
2. Hash
使用场景:存储对象,如用户信息,每个对象可以存储多个字段。
示例:
@Autowired
private RedisTemplate<String, Object> redisTemplate;
public void hashExample() {
// 设置哈希字段
redisTemplate.opsForHash().put("user:1001", "name", "John");
redisTemplate.opsForHash().put("user:1001", "age", 30);
// 获取哈希字段
String name = (String) redisTemplate.opsForHash().get("user:1001", "name");
Integer age = (Integer) redisTemplate.opsForHash().get("user:1001", "age");
System.out.println("Name: " + name + ", Age: " + age);
}
3. List
使用场景:消息队列、最新消息列表等。
示例:
@Autowired
private RedisTemplate<String, Object> redisTemplate;
public void listExample() {
// 从左侧推入列表
redisTemplate.opsForList().leftPush("messages", "Hello");
redisTemplate.opsForList().leftPush("messages", "World");
// 获取列表长度
Long size = redisTemplate.opsForList().size("messages");
// 弹出最左侧元素
String message = (String) redisTemplate.opsForList().leftPop("messages");
System.out.println("Popped message: " + message);
}
4. Set
使用场景:存储无序唯一值集合,如标签、兴趣爱好等。
示例:
@Autowired
private RedisTemplate<String, Object> redisTemplate;
public void setExample() {
// 添加元素到集合
redisTemplate.opsForSet().add("tags", "spring", "redis", "java");
// 获取集合中的所有元素
Set<Object> tags = redisTemplate.opsForSet().members("tags");
// 判断某元素是否存在
boolean isMember = redisTemplate.opsForSet().isMember("tags", "spring");
System.out.println("Is 'spring' a tag? " + isMember);
}
5. ZSet (Sorted Set)
使用场景:排行榜、带权重的消息队列等。
示例:
@Autowired
private RedisTemplate<String, Object> redisTemplate;
public void zSetExample() {
// 添加元素到有序集合,并设置分数
redisTemplate.opsForZSet().add("leaderboard", "user1", 100);
redisTemplate.opsForZSet().add("leaderboard", "user2", 200);
// 获取有序集合中的元素,根据分数排序
Set<Object> leaderboard = redisTemplate.opsForZSet().range("leaderboard", 0, -1);
// 获取某个元素的分数
Double score = redisTemplate.opsForZSet().score("leaderboard", "user1");
System.out.println("Score of user1: " + score);
}
总结
在Spring Boot中通过RedisTemplate或StringRedisTemplate可以轻松操作Redis的五种基本类型。根据具体的业务需求选择合适的数据类型来存储和管理数据是使用Redis的关键。