上一篇文章讲了 Redis 的应用场景。
这一篇直接给大家 Spring Boot 项目最常用的 Redis 代码模板,可以直接复制到项目中使用。
一、缓存模板
public User getUser(Long userId){
String key = "user:info:"+userId;
Object cache = redisTemplate.opsForValue().get(key);
if(cache != null){
return (User) cache;
}
User user = userMapper.selectById(userId);
redisTemplate.opsForValue().set(key,user,30,TimeUnit.MINUTES);
return user;
}
二、验证码模板
public void saveCode(String phone,String code){
String key = "sms:code:"+phone;
redisTemplate.opsForValue()
.set(key,code,5,TimeUnit.MINUTES);
}
校验:
public boolean checkCode(String phone,String code){
String key = "sms:code:"+phone;
String cache = (String) redisTemplate.opsForValue().get(key);
return code.equals(cache);
}
三、限流模板
public boolean limit(String key,int max){
Long count = redisTemplate.opsForValue().increment(key);
if(count == 1){
redisTemplate.expire(key,1,TimeUnit.MINUTES);
}
return count <= max;
}
四、分布式锁模板(RedisTemplate)
public boolean tryLock(String key){
return Boolean.TRUE.equals(
redisTemplate.opsForValue()
.setIfAbsent(key,"1",30,TimeUnit.SECONDS)
);
}
释放锁:
redisTemplate.delete(key);
五、Redisson 分布式锁模板
推荐生产使用。
RLock lock = redissonClient.getLock("lock:order:"+orderId);
lock.lock();
try{
//业务逻辑
}finally{
lock.unlock();
}
六、排行榜模板
public void addScore(String user,int score){
redisTemplate.opsForZSet()
.incrementScore("rank:user",user,score);
}
获取前10名:
Set<ZSetOperations.TypedTuple<Object>> rank =
redisTemplate.opsForZSet()
.reverseRangeWithScores("rank:user",0,9);
七、延迟队列模板
添加任务:
redisTemplate.opsForZSet()
.add("delay:task",taskId,System.currentTimeMillis()+60000);
获取任务:
Set<Object> tasks =
redisTemplate.opsForZSet()
.rangeByScore("delay:task",0,System.currentTimeMillis());
八、Set 去重模板
redisTemplate.opsForSet()
.add("sign:20260318",userId);
判断是否存在:
redisTemplate.opsForSet()
.isMember("sign:20260318",userId);
最后
Redis 真正需要掌握的其实只有:
- 5种数据结构
- 10种应用场景
然后配合 Spring Boot 使用,就已经可以应对绝大多数企业项目。