Redis 五种数据结构

发布于:2025-06-19 ⋅ 阅读:(10) ⋅ 点赞:(0)

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 五种基本数据结构的方法。根据不同的业务场景选择合适的数据结构,可以大大提高应用的性能和开发效率。


网站公告

今日签到

点亮在社区的每一天
去签到