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. 对于高频访问的数据,考虑使用本地缓存进一步提升性能
相关推荐
boonya1 小时前
Redis核心原理与面试问题解析
数据库·redis·面试
上官浩仁2 小时前
springboot redisson 缓存入门与实战
spring boot·redis·缓存
没有bug.的程序员2 小时前
Redis Stream:轻量级消息队列深度解析
java·数据库·chrome·redis·消息队列
AAA修煤气灶刘哥4 小时前
缓存这「加速神器」从入门到填坑,看完再也不被产品怼慢
java·redis·spring cloud
小马爱打代码5 小时前
面试题:Redis要点总结(进阶)
redis
络75 小时前
Redis 非缓存核心场景及实例说明
数据库·redis·缓存
ClouGence6 小时前
Redis 双向同步如何避免循环?【附实操演示】
redis
爬山算法9 小时前
Redis(50) Redis哨兵如何与客户端进行交互?
数据库·redis·交互
YS_Geo9 小时前
Redis 深度解析:数据结构、持久化与集群
数据结构·数据库·redis
牛奶咖啡1310 小时前
Nginx+Tomcat集群Redis共享session方案
redis·nginx·tomcat·redisson·分布式session共享方案·分布式session实现·jdk1.8环境安装