SpringBoot依赖之Spring Data Redis 实现HyperLogLog类型

概念

Spring Data Redis (Access+Driver)
  • 依赖名称: Spring Data Redis (Access+Driver)
  • 功能描述: Advanced and thread-safe Java Redis client for synchronous, asynchronous, and reactive usage. Supports Cluster, Sentinel, Pipelining, Auto-Reconnect, Codecs and much more.
  • 中文释义:用于同步、异步和反应式使用的高级且线程安全的 Java Redis 客户端。支持集群、哨兵、管道、自动重新连接、编解码器等。

项目学习代码地址

操作演示:

Spring Boot 项目中使用 Spring Data Redis 实现(HyperLogLog)

接下来我们演示在 Spring Boot 项目中使用 Spring Data Redis 实现(HyperLogLog)操作,我们可以在之前的项目代码基础上扩展 Redis 服务类和控制器类,以支持对 Redis 列表的常见操作。以下是具体的实现步骤。

为了在 Spring Boot 项目中使用 Spring Data Redis 实现位图(HyperLogLog)操作,我们可以在之前的项目代码基础上扩展 Redis 服务类和控制器类,以支持对 Redis 列表的常见操作。以下是具体的实现步骤。

1. 更新 Redis 服务类

RedisService 类中添加列表相关的方法。

package com.dependencies.springdataredis;

import org.springframework.data.redis.core.*;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class RedisService {

    private final RedisTemplate<String, Object> redisTemplate;
    private final HyperLogLogOperations<String, Object> hyperLogLogOperations;

    public RedisService(RedisTemplate<String, Object> redisTemplate) {
        this.redisTemplate = redisTemplate;
        this.hyperLogLogOperations = redisTemplate.opsForHyperLogLog();
    }

     // HyperLogLog操作
    public void addToHyperLogLog(String key, String value) {
        hyperLogLogOperations.add(key, value);
    }
    
    public long countInHyperLogLog(String key) {
        return hyperLogLogOperations.size(key);
    }
}
2. 更新控制器类

RedisController 中添加处理HyperLogLog操作的端点。

package com.dependencies.springdataredis;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * @author zhizhou   2024/8/20 12:02
 */
@RestController
public class RedisController {

    private final RedisService redisService;

    public RedisController(RedisService redisService) {
        this.redisService = redisService;
    }

  // HyperLogLog操作
    @GetMapping("/hyperloglog/add")
    public String addToHyperLogLog(@RequestParam String key, @RequestParam String value) {
        redisService.addToHyperLogLog(key, value);
        return "Value added to HyperLogLog";
    }
    
    @GetMapping("/hyperloglog/count")
    public long countInHyperLogLog(@RequestParam String key) {
        return redisService.countInHyperLogLog(key);
    }
}
3. 验证测试:

我们启动项目以后,就通过以下的额 URL 测试 Redis 列表的功能:

HyperLogLog 操作:

  • 添加成员到 HyperLogLog: http://localhost:8080/hyperloglog/add?key=myLoglog&value=value1
  • 获取 HyperLogLog 的基数估算: http://localhost:8080/hyperloglog/count?key=myLoglog
4. 总结

HyperLogLog 是一种用于基数统计的概率数据结构,虽然它无法存储实际的元素,但能在非常小的空间内计算大量数据的基数。

使用场景: 独立访问统计,在大规模数据场景下,使用 HyperLogLog 可以高效统计独立 IP 的访问量、独立用户的数量等。我在实际的开发中看到同事用到该类型统计不能类型商品入库数量等相关维度的柱形图。研究研究还是蛮有意思的。

可以关注我,一起学习,一起为程序员职业生涯蓄能。

你可能感兴趣的:(微服务架构设计,spring,spring,boot,redis)