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的关键。