Redis 五种数据结构
Redis 五种数据结构在 Spring Boot 中的使用方法
Redis 提供了五种主要数据结构:String(字符串)、List(列表)、Hash(哈希)、Set(集合)和 Sorted Set(有序集合)。在 Spring Boot 中,可以通过 StringRedisTemplate
或 RedisTemplate
来操作这些数据结构。
1. String(字符串)
String 是最基本的 Redis 数据类型,可以存储字符串、整数或浮点数。
@Autowired
private StringRedisTemplate stringRedisTemplate;// 设置值
stringRedisTemplate.opsForValue().set("user:1:name", "张三");
stringRedisTemplate.opsForValue().set("user:1:age", "30");// 获取值
String name = stringRedisTemplate.opsForValue().get("user:1:name");
String age = stringRedisTemplate.opsForValue().get("user:1:age");// 设置过期时间
stringRedisTemplate.expire("user:1:name", 60, TimeUnit.SECONDS);// 自增操作
stringRedisTemplate.opsForValue().increment("counter");
stringRedisTemplate.opsForValue().increment("counter", 5);
2. List(列表)
List 是简单的字符串列表,按照插入顺序排序,可以在头部或尾部添加元素。
// 从左侧插入元素
stringRedisTemplate.opsForList().leftPush("messages", "hello");
stringRedisTemplate.opsForList().leftPush("messages", "world");// 从右侧插入元素
stringRedisTemplate.opsForList().rightPush("messages", "goodbye");// 获取列表范围
List<String> messages = stringRedisTemplate.opsForList().range("messages", 0, -1);// 获取列表长度
Long size = stringRedisTemplate.opsForList().size("messages");// 弹出元素
String leftPop = stringRedisTemplate.opsForList().leftPop("messages");
String rightPop = stringRedisTemplate.opsForList().rightPop("messages");
3. Hash(哈希)
Hash 是键值对集合,适合存储对象。
// 设置单个字段
stringRedisTemplate.opsForHash().put("user:1", "name", "李四");
stringRedisTemplate.opsForHash().put("user:1", "age", "25");// 设置多个字段
Map<String, String> userMap = new HashMap<>();
userMap.put("email", "lisi@example.com");
userMap.put("phone", "13800138000");
stringRedisTemplate.opsForHash().putAll("user:1", userMap);// 获取单个字段
String name = (String) stringRedisTemplate.opsForHash().get("user:1", "name");// 获取所有字段
Map<Object, Object> user = stringRedisTemplate.opsForHash().entries("user:1");// 删除字段
stringRedisTemplate.opsForHash().delete("user:1", "phone");
4. Set(集合)
Set 是 String 类型的无序集合,集合成员是唯一的。
// 添加元素
stringRedisTemplate.opsForSet().add("tags", "java", "redis", "spring");// 获取所有成员
Set<String> tags = stringRedisTemplate.opsForSet().members("tags");// 判断是否是成员
boolean isMember = stringRedisTemplate.opsForSet().isMember("tags", "java");// 获取集合大小
Long size = stringRedisTemplate.opsForSet().size("tags");// 移除元素
stringRedisTemplate.opsForSet().remove("tags", "redis");// 集合运算
stringRedisTemplate.opsForSet().add("tags1", "java", "redis", "spring");
stringRedisTemplate.opsForSet().add("tags2", "java", "mysql", "hibernate");
Set<String> intersect = stringRedisTemplate.opsForSet().intersect("tags1", "tags2"); // 交集
Set<String> union = stringRedisTemplate.opsForSet().union("tags1", "tags2"); // 并集
Set<String> diff = stringRedisTemplate.opsForSet().difference("tags1", "tags2"); // 差集
5. Sorted Set(有序集合)
Sorted Set 类似于 Set,但每个成员都关联一个分数,用于排序。
// 添加元素(带分数)
stringRedisTemplate.opsForZSet().add("leaderboard", "player1", 100);
stringRedisTemplate.opsForZSet().add("leaderboard", "player2", 85);
stringRedisTemplate.opsForZSet().add("leaderboard", "player3", 95);// 获取元素分数
Double score = stringRedisTemplate.opsForZSet().score("leaderboard", "player1");// 获取排名(从低到高)
Long rank = stringRedisTemplate.opsForZSet().rank("leaderboard", "player1");// 获取排名(从高到低)
Long reverseRank = stringRedisTemplate.opsForZSet().reverseRank("leaderboard", "player1");// 获取范围内的元素(按分数从低到高)
Set<String> topPlayers = stringRedisTemplate.opsForZSet().range("leaderboard", 0, 2);// 获取范围内的元素(按分数从高到低)
Set<String> topPlayersRev = stringRedisTemplate.opsForZSet().reverseRange("leaderboard", 0, 2);// 获取分数范围内的元素
Set<String> players = stringRedisTemplate.opsForZSet().rangeByScore("leaderboard", 90, 100);// 增加分数
stringRedisTemplate.opsForZSet().incrementScore("leaderboard", "player2", 10);
通用操作
// 判断key是否存在
Boolean exists = stringRedisTemplate.hasKey("user:1");// 删除key
stringRedisTemplate.delete("user:1");// 设置过期时间
stringRedisTemplate.expire("user:1", 60, TimeUnit.SECONDS);// 获取剩余生存时间
Long ttl = stringRedisTemplate.getExpire("user:1");
以上就是在 Spring Boot 中使用 StringRedisTemplate 操作 Redis 五种基本数据结构的方法。根据不同的业务场景选择合适的数据结构,可以大大提高应用的性能和开发效率。