redis功能清单

文章目录

  • Redis高级功能使用说明
    • 功能清单
    • [1. 分布式锁](#1. 分布式锁)
      • [1.1 功能描述](#1.1 功能描述)
      • [1.2 使用方法](#1.2 使用方法)
      • [1.3 测试接口](#1.3 测试接口)
    • [2. 消息发布订阅](#2. 消息发布订阅)
      • [2.1 功能描述](#2.1 功能描述)
      • [2.2 使用方法](#2.2 使用方法)
      • [2.3 测试接口](#2.3 测试接口)
    • [3. 接口限流](#3. 接口限流)
    • [4. 排行榜实现](#4. 排行榜实现)
      • [4.1 功能描述](#4.1 功能描述)
      • [4.2 使用方法](#4.2 使用方法)
      • [4.3 测试接口](#4.3 测试接口)
    • [5. 用户行为分析](#5. 用户行为分析)
      • [5.1 功能描述](#5.1 功能描述)
      • [5.2 使用方法](#5.2 使用方法)
      • [5.3 测试接口](#5.3 测试接口)
    • [6. 注意事项](#6. 注意事项)
    • [7. 性能优化建议](#7. 性能优化建议)

Redis高级功能使用说明

本文档介绍了系统中集成的Redis高级功能及其使用方法。

功能清单

  1. 分布式锁
  2. 消息发布订阅
  3. 接口限流
  4. 排行榜实现
  5. 多维度用户行为分析

1. 分布式锁

1.1 功能描述

分布式锁用于在分布式环境中对共享资源进行同步访问控制,防止多个服务实例同时操作同一资源导致的数据不一致问题。

1.2 使用方法

java 复制代码
@Autowired
private RedisLockUtil lockUtil;

public void doBusinessWithLock() {
    String lockKey = "业务唯一标识";
    String requestId = UUID.randomUUID().toString(); // 请求唯一标识
    
    boolean locked = lockUtil.tryLock(lockKey, requestId, 30); // 尝试获取锁,30秒超时
    if (locked) {
        try {
            // 执行需要加锁的业务逻辑
            doSomething();
        } finally {
            // 释放锁
            lockUtil.releaseLock(lockKey, requestId);
        }
    } else {
        // 获取锁失败的处理逻辑
    }
}

1.3 测试接口

  • GET /redis/lock/test - 测试分布式锁功能

2. 消息发布订阅

2.1 功能描述

消息发布订阅用于实现应用内的事件通知和组件间通信,支持一对多的消息推送。

2.2 使用方法

发布消息
java 复制代码
@Autowired
private RedisPubSubUtil pubSubUtil;

// 发布消息
pubSubUtil.publish("channel:name", "消息内容");
订阅消息

系统默认订阅了"user:actions"频道,订阅逻辑在UserActionSubscriber类中实现。

如需订阅新的频道,需要修改RedisPubSubConfig配置类:

java 复制代码
@Bean
public RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory,
                                             MessageListenerAdapter myListenerAdapter) {
    RedisMessageListenerContainer container = new RedisMessageListenerContainer();
    container.setConnectionFactory(connectionFactory);
    // 添加新的订阅
    container.addMessageListener(myListenerAdapter, new PatternTopic("my:channel"));
    return container;
}

2.3 测试接口

  • POST /redis/publish?channel=user:actions&message=test - 发布测试消息

3. 接口限流

3.1 功能描述

接口限流用于防止API被恶意频繁调用或突发流量冲击,保护系统稳定性。

3.2 使用方法

方式一:直接使用工具类
java 复制代码
@Autowired
private RedisRateLimiter rateLimiter;

public void doSomething() {
    String key = "限流标识"; // 可以是接口名、用户ID等
    boolean allowed = rateLimiter.isAllowed(key, 60, 100); // 60秒内最多允许100次请求
    
    if (allowed) {
        // 正常处理业务
    } else {
        // 触发限流,拒绝请求
        throw new RuntimeException("请求过于频繁");
    }
}
方式二:使用注解(推荐)
java 复制代码
@RestController
public class MyController {

    @RateLimit(period = 60, count = 100, limitType = LimitType.IP)
    @GetMapping("/api/test")
    public Result test() {
        // 业务逻辑
        return Result.success();
    }
}

支持的限流类型:

  • IP:根据客户端IP限流
  • USER:根据用户ID限流(暂未实现用户识别)
  • INTERFACE:根据接口限流

3.3 测试接口

  • GET /redis/ratelimit/test?key=testKey - 测试限流功能

4. 排行榜实现

4.1 功能描述

基于Redis的Sorted Set实现各种排行榜功能,如热门用户、热门商品等。

4.2 使用方法

java 复制代码
@Autowired
private RedisRankingUtil rankingUtil;

// 添加或更新分数
rankingUtil.addScore("ranking:hot:products", productId, score);

// 增加分数
rankingUtil.incrementScore("ranking:hot:products", productId, incrementScore);

// 获取排行榜前N名
List<Map<String, Object>> topN = rankingUtil.getTopN("ranking:hot:products", 10);

// 获取指定成员排名
Long rank = rankingUtil.getRank("ranking:hot:products", productId);

// 获取指定成员分数
Double score = rankingUtil.getScore("ranking:hot:products", productId);

4.3 测试接口

  • GET /redis/ranking/test - 测试排行榜功能

5. 用户行为分析

5.1 功能描述

记录和分析用户行为数据,如页面访问、点赞、评论等,实现用户热度统计和行为分析。

5.2 使用方法

java 复制代码
@Autowired
private UserBehaviorAnalysisUtil behaviorUtil;

// 记录用户被查看
behaviorUtil.recordUserView(userId, viewerId);

// 记录用户行为
behaviorUtil.recordUserAction("like", targetId, userId);

// 获取用户热度
long dailyHeat = behaviorUtil.getUserDailyHeat(userId);
long monthlyHeat = behaviorUtil.getUserMonthlyHeat(userId);

// 获取热门用户排行
List<Map<String, Object>> hotUsers = behaviorUtil.getHotUsersRanking(10);

// 获取行为统计
Map<String, Long> stats = behaviorUtil.getDailyActionStats();

5.3 测试接口

  • GET /redis/behavior/view/{userId}?viewerId=1 - 记录用户被查看并返回热度数据
  • GET /redis/behavior/stats - 获取行为统计数据

6. 注意事项

  1. Redis连接配置在application.yml中设置
  2. 大规模数据存储时注意设置合理的过期时间,避免内存占用过大
  3. 分布式锁使用时确保加锁和解锁操作都能正确执行,建议使用try-finally结构
  4. 限流策略需根据业务特点和系统承载能力合理设置

7. 性能优化建议

  1. 使用Redis连接池,合理配置最大连接数
  2. 批量操作使用Pipeline提高性能
  3. 使用合适的数据结构,避免不必要的数据转换
  4. 定期清理过期数据,减轻Redis服务器负担
  5. 对于高频访问的数据,考虑使用本地缓存进一步提升性能
相关推荐
段帅龙呀3 小时前
Redis构建缓存服务器
服务器·redis·缓存
用户83249514173211 小时前
Spring Boot 实现 Redis 多数据库切换(多数据源配置)
redis
傲祥Ax16 小时前
Redis总结
数据库·redis·redis重点总结
都叫我大帅哥1 天前
Redis AOF持久化深度解析:命令日志的终极生存指南
redis
都叫我大帅哥1 天前
Redis RDB持久化深度解析:内存快照的魔法与陷阱
redis
Hello.Reader1 天前
Redis 延迟监控深度指南
数据库·redis·缓存
ybq195133454311 天前
Redis-主从复制-分布式系统
java·数据库·redis
马里奥Marioぅ1 天前
Redis主从切换踩坑记:当Redisson遇上分布式锁的“死亡连接“
redis·分布式锁·redisson·故障转移
Hello.Reader1 天前
Redis 延迟排查与优化全攻略
数据库·redis·缓存
东窗西篱梦2 天前
Redis集群部署指南:高可用与分布式实践
数据库·redis·分布式