当前位置: 首页 > news >正文

Redis increment 函数处理并发序列号

1. 创建Spring Boot项目

首先,创建一个新的Spring Boot项目。你可以使用Spring Initializr(https://start.spring.io/)来生成项目结构。选择以下依赖:

  • Spring Web
  • Spring Data Redis
  • Lombok(可选,用于简化代码)

2. 配置application.yml

在你的 ​application.yml​文件中添加Redis配置:

spring:cache:type: GENERICredis:host: ${sy.redis.ip}password:port: ${sy.redis.port}database: ${sy.redis.database}

3. 创建缓存配置类

创建一个配置类来手动配置基于Redis的缓存管理器:

import org.springframework.cache.CacheManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.RedisCacheConfiguration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializationContext;import java.time.Duration;@Configuration
public class CacheConfig {@Beanpublic CacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {RedisCacheConfiguration cacheConfiguration = RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofMinutes(10)) // 设置缓存过期时间.disableCachingNullValues().serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer()));return RedisCacheManager.builder(redisConnectionFactory).cacheDefaults(cacheConfiguration).build();}
}

4. 创建服务类

创建一个服务类来使用Redis的 ​INCR​方法生成每天的序号

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;import java.time.LocalDate;
import java.time.format.DateTimeFormatter;@Service
public class SequenceService {@Autowiredprivate StringRedisTemplate redisTemplate;public long getDailySequence() {String dateStr = DateUtils.format(new Date(), "yyyy-MM-dd");String key = "dailySequence_" + dateStr;// 执行 increment 操作Long applicantNumber = redisTemplate.opsForValue().increment(key);// 设置过期时间为2天,不设置默认永久redisTemplate.expire(key, 2, TimeUnit.DAYS);//redisTemplate.expire(key) // 查询key的过期时间。//-1: 表示键存在但没有设置过期时间。//-2: 表示键不存在。//返回秒:如上面返回值是 172780,这意味着该键将在大约 172780 秒(约 48 小时)后过期。return applicantNumber;}
}

5. 创建控制器

创建一个控制器来暴露获取每天序号的API:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class SequenceController {@Autowiredprivate SequenceService sequenceService;@GetMapping("/daily-sequence")public String getDailySequence() {long sequence = sequenceService.getDailySequence();return "Daily sequence: " + sequence;}
}

6. 启动类

确保你的启动类包含 ​@EnableCaching​注解以启用缓存功能:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;@SpringBootApplication
@EnableCaching
public class RedisIncrApplication {public static void main(String[] args) {SpringApplication.run(RedisIncrApplication.class, args);}
}


http://www.mrgr.cn/news/13883.html

相关文章:

  • PDF招生简章如何转二维码?
  • 《JavaEE进阶》----4.<SpringMVC①简介、基本操作>
  • 迅为2K1000开发板流畅运行Busybox、Buildroot、Loognix、QT5.12 系统
  • 每日一题,在线精讲 —— 零基础入门FPGA
  • BH1750光照传感器详解(STM32)
  • TCP丢失时重发为什么倍增重发等待时间(指数退避)
  • 【书生大模型实战营(暑假场)】进阶任务六 MindSearch CPU-only 版部署
  • 批量在多台Linux机器上安装OpenJDK
  • 正则表达式:Visual Basic中的强大文本处理工具
  • .net framework 4.8 开发windows系统服务
  • 《黑神话:悟空》是用什么编程语言开发的?
  • Java笔试面试题AI答之面向对象(5)
  • Python算法工程师面试整理-线性代数
  • 内存区域与内存溢出异常
  • 使用PyTorch AlexNet预训练模型对新数据集进行训练及预测
  • 中科亿海微SoM模组——中频信号采集存储卡
  • 探索社区O2O系统源码开发:构建智慧生活的桥梁
  • mac iterm2 rz sz 无法上传下载问题
  • 设计模式篇(DesignPattern - 创建型模式)
  • 【python】OpenCV—Multi Human Pose Estimation