Redis数据结构与应用场景:String、Hash、List、Set、ZSet
Redis数据结构与应用场景:String、Hash、List、Set、ZSet
Redis是高性能的键值对数据库,深入理解其应用场景对后端工程师至关重要。
一、Redis基础
Redis的多种数据结构是其强大的基础,理解各数据结构的特性和应用场景对合理使用Redis至关重要
1.1 数据结构
# String
SET key value
GET key
INCR counter
# Hash
HSET user:1 name "Tom"
HGET user:1 name
HGETALL user:1
# List
LPUSH queue "task1"
RPUSH queue "task2"
LPOP queue
# Set
SADD tags "java" "redis"
SMEMBERS tags
# ZSet
ZADD ranking 100 "user1"
ZRANGE ranking 0 -1 WITHSCORES
二、应用场景
2.1 缓存
// 缓存穿透防护
public User getUserById(Long id) {
String key = "user:" + id;
User user = redisTemplate.opsForValue().get(key);
if (user == null) {
user = userMapper.selectById(id);
if (user == null) {
// 缓存空值,防止穿透
redisTemplate.opsForValue().set(key, "", 5, TimeUnit.MINUTES);
} else {
// 缓存热点数据
redisTemplate.opsForValue().set(key, user, 30, TimeUnit.MINUTES);
}
}
return user;
}
2.2 分布式锁
public boolean tryLock(String key, String value, long expireTime) {
return redisTemplate.opsForValue()
.setIfAbsent(key, value, expireTime, TimeUnit.SECONDS);
}
public void unlock(String key, String value) {
String currentValue = redisTemplate.opsForValue().get(key);
if (value.equals(currentValue)) {
redisTemplate.delete(key);
}
}
三、常见面试题
Q1: Redis和Memcached的区别?
答案:
- Redis支持持久化,Memcached不支持
- Redis支持多种数据结构,Memcached只支持String
- Redis支持主从复制,Memcached不支持
- Redis性能略低,但功能更强大
Q2: 如何解决缓存雪崩?
答案:
1. 加互斥锁
2. 缓存预热
3. 双层缓存策略
4. 设置随机过期时间
四、总结
掌握Redis对提升系统性能至关重要:
✅ 核心要点
- 理解数据结构和使用场景
- 掌握缓存设计模式
- 了解分布式锁实现
进阶方向
- 阅读Redis源码
- 学习Redis Cluster
- 实践项目应用

浙公网安备 33010602011771号