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. 对于高频访问的数据,考虑使用本地缓存进一步提升性能
相关推荐
运维小杨1 小时前
Redis主从复制搭建
数据库·redis·缓存
会编程的林俊杰4 小时前
Redis线程模型讨论
redis·缓存
头发那是一根不剩了5 小时前
信创缓存中间件TongRDS(Redis平替)安装、接入SpringBoot全流程
redis·缓存·中间件·tongrds
天若有情6736 小时前
【单片机】【分布式】从单机到分布式:Redis如何成为架构升级的关键力量
redis·分布式·架构
潇凝子潇6 小时前
Redis 存在哪些问题
数据库·redis·缓存
运维小杨7 小时前
Redis哨兵模式搭建
数据库·redis·缓存
lixzest19 小时前
Redis实现数据传输简介
数据库·redis·缓存
Chase_______1 天前
redis快速入门及使用
java·数据库·redis·学习·spring·缓存
l_c-l-o-u-d_21 天前
第十九周-文档数据库MongoDB、消息队列和微服务
数据库·redis·mongodb
典孝赢麻崩乐急1 天前
Redis学习------缓存穿透
redis·学习·缓存