一、Redis 五种基本数据类型及使用场景
数据类型 | 特点 | 典型应用场景 |
---|---|---|
String(字符串) | 最基本类型,可存储文本、数字或二进制数据 | 缓存、计数器(如PV)、分布式锁 |
Hash(哈希) | 类似Map,存储字段-值对 | 存储对象(如用户信息)、商品属性 |
List(列表) | 有序元素集合,支持双向操作 | 消息队列、最新消息列表、历史记录 |
Set(集合) | 无序唯一元素集合 | 标签系统、共同好友、抽奖去重 |
Sorted Set(有序集合) | 元素关联分数,按分数排序 | 排行榜、延迟队列、优先级任务 |
二、Spring Boot 中 Redis 的增删改查操作
1:字符串
@Autowired
private StringRedisTemplate stringRedisTemplate;
// 增/改
stringRedisTemplate.opsForValue().set("key", "value"); // SET key value
stringRedisTemplate.opsForValue().set("counter", "0"); // 初始化计数器
// 查
String value = stringRedisTemplate.opsForValue().get("key"); // GET key
Long count = stringRedisTemplate.opsForValue().increment("counter"); // INCR counter
// 删
stringRedisTemplate.delete("key"); // DEL key
2:hash
// 增/改
stringRedisTemplate.opsForHash().put("user:1", "name", "Alice"); // HSET user:1 name Alice
stringRedisTemplate.opsForHash().put("user:1", "age", "25"); // HSET user:1 age 25
// 查
String name = (String) stringRedisTemplate.opsForHash().get("user:1", "name"); // HGET user:1 name
Map<Object, Object> user = stringRedisTemplate.opsForHash().entries("user:1"); // HGETALL user:1
// 删
stringRedisTemplate.opsForHash().delete("user:1", "age"); // HDEL user:1 age
stringRedisTemplate.delete("user:1"); // DEL user:1
3:list
// 增(左推入)
stringRedisTemplate.opsForList().leftPush("tasks", "task1"); // LPUSH tasks task1
// 查(获取范围)
List<String> tasks = stringRedisTemplate.opsForList().range("tasks", 0, -1); // LRANGE tasks 0 -1
// 删(右弹出)
String task = stringRedisTemplate.opsForList().rightPop("tasks"); // RPOP tasks
4:set
// 增
stringRedisTemplate.opsForSet().add("tags", "java", "redis"); // SADD tags java redis
// 查(判断存在)
boolean exists = stringRedisTemplate.opsForSet().isMember("tags", "java"); // SISMEMBER tags java
// 删
stringRedisTemplate.opsForSet().remove("tags", "redis"); // SREM tags redis
5:sorted set
// 增(带分数)
stringRedisTemplate.opsForZSet().add("leaderboard", "PlayerA", 100); // ZADD leaderboard 100 PlayerA
// 查(按分数倒序取前三)
Set<String> top3 = stringRedisTemplate.opsForZSet().reverseRange("leaderboard", 0, 2); // ZREVRANGE leaderboard 0 2
// 删
stringRedisTemplate.opsForZSet().remove("leaderboard", "PlayerA"); // ZREM leaderboard PlayerA