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. 对于高频访问的数据,考虑使用本地缓存进一步提升性能
相关推荐
野犬寒鸦4 小时前
Redis核心数据结构操作指南:字符串、哈希、列表详解
数据结构·数据库·redis·后端·缓存·哈希算法
cui_win7 小时前
深入理解 Redis 哨兵模式
运维·redis·哨兵·哨兵故障
林晓lx7 小时前
[学习笔记] 从零开始虚拟化搭建数据库服务器
数据库·redis·笔记·centos
清幽竹客7 小时前
理解 Redis 事务-20 (MULTI、EXEC、DISCARD)
数据库·redis
龙哥·三年风水7 小时前
openresty+lua+redis把非正常访问的域名加入黑名单
redis·lua·openresty
一只在学习的瓶子11 小时前
windows中Redis、MySQL 和 Elasticsearch启动并正确监听指定端口
windows·redis·mysql
Uranus^12 小时前
深入解析Spring Boot与Redis的集成实践
spring boot·redis·缓存·分布式锁
Code哈哈笑13 小时前
Java 连接并操作 Redis 万字详解:从 Jedis 直连到 RedisTemplate 封装,5 种方式全解析
java·spring boot·redis·后端·jedis·redistemplate
結城13 小时前
如何用Spring Cache实现对Redis的抽象
java·redis·spring