Redis increment 函數(shù)處理并發(fā)序列號(hào)案例
1. 創(chuàng)建Spring Boot項(xiàng)目
首先,創(chuàng)建一個(gè)新的Spring Boot項(xiàng)目。你可以使用Spring Initializr(https://start.spring.io/)來(lái)生成項(xiàng)目結(jié)構(gòu)。選擇以下依賴(lài):
- Spring Web
- Spring Data Redis
- Lombok(可選,用于簡(jiǎn)化代碼)
2. 配置application.yml
在你的 ?application.yml?文件中添加Redis配置:
spring:
cache:
type: GENERIC
redis:
host: ${sy.redis.ip}
password:
port: ${sy.redis.port}
database: ${sy.redis.database}3. 創(chuàng)建緩存配置類(lèi)
創(chuàng)建一個(gè)配置類(lèi)來(lái)手動(dòng)配置基于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 {
@Bean
public CacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {
RedisCacheConfiguration cacheConfiguration = RedisCacheConfiguration.defaultCacheConfig()
.entryTtl(Duration.ofMinutes(10)) // 設(shè)置緩存過(guò)期時(shí)間
.disableCachingNullValues()
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer()));
return RedisCacheManager.builder(redisConnectionFactory)
.cacheDefaults(cacheConfiguration)
.build();
}
}4. 創(chuàng)建服務(wù)類(lèi)
創(chuàng)建一個(gè)服務(wù)類(lèi)來(lái)使用Redis的 ?INCR?方法生成每天的序號(hào)
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 {
@Autowired
private StringRedisTemplate redisTemplate;
public long getDailySequence() {
String dateStr = DateUtils.format(new Date(), "yyyy-MM-dd");
String key = "dailySequence_" + dateStr;
// 執(zhí)行 increment 操作
Long applicantNumber = redisTemplate.opsForValue().increment(key);
// 設(shè)置過(guò)期時(shí)間為2天,不設(shè)置默認(rèn)永久
redisTemplate.expire(key, 2, TimeUnit.DAYS);
//redisTemplate.expire(key) // 查詢(xún)key的過(guò)期時(shí)間。
//-1: 表示鍵存在但沒(méi)有設(shè)置過(guò)期時(shí)間。
//-2: 表示鍵不存在。
//返回秒:如上面返回值是 172780,這意味著該鍵將在大約 172780 秒(約 48 小時(shí))后過(guò)期。
return applicantNumber;
}
}5. 創(chuàng)建控制器
創(chuàng)建一個(gè)控制器來(lái)暴露獲取每天序號(hào)的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 {
@Autowired
private SequenceService sequenceService;
@GetMapping("/daily-sequence")
public String getDailySequence() {
long sequence = sequenceService.getDailySequence();
return "Daily sequence: " + sequence;
}
}6. 啟動(dòng)類(lèi)
確保你的啟動(dòng)類(lèi)包含 ?@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);
}
}到此這篇關(guān)于Redis increment 函數(shù)處理并發(fā)序列號(hào)的文章就介紹到這了,更多相關(guān)Redis increment 序列號(hào)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Redis官方ORM框架比RedisTemplate更優(yōu)雅
這篇文章主要為大家介紹了Redis官方ORM框架比RedisTemplate更優(yōu)雅的使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07
聊一聊redis奇葩數(shù)據(jù)類(lèi)型與集群知識(shí)
現(xiàn)在越來(lái)越多的項(xiàng)目都會(huì)利用到redis,多實(shí)例redis服務(wù)比單實(shí)例要復(fù)雜的多,這里面涉及到定位、容錯(cuò)、擴(kuò)容等技術(shù)問(wèn)題,下面這篇文章主要給大家介紹了關(guān)于redis奇葩數(shù)據(jù)類(lèi)型與集群知識(shí)的相關(guān)資料,需要的朋友可以參考下2022-01-01
一次關(guān)于Redis內(nèi)存詭異增長(zhǎng)的排查過(guò)程實(shí)戰(zhàn)記錄
這篇文章主要給大家分享了一次關(guān)于Redis內(nèi)存詭異增長(zhǎng)的排查過(guò)程實(shí)戰(zhàn)記錄,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Redis具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-07-07
Redis+aop實(shí)現(xiàn)接口防刷(冪等)的解決方案
在高并發(fā)場(chǎng)景下,可能會(huì)因?yàn)榫W(wǎng)絡(luò)或者服務(wù)器原因,造成延遲,同時(shí)就是有可能會(huì)有人用腳本大量訪問(wèn)你的接口,造成資源崩潰,所以本文給大家介紹了Redis+aop實(shí)現(xiàn)接口防刷(冪等)的解決方案,需要的朋友可以參考下2024-03-03
Redis數(shù)據(jù)類(lèi)型之散列類(lèi)型hash命令學(xué)習(xí)
這篇文章主要為大家介紹了Redis數(shù)據(jù)類(lèi)型之散列類(lèi)型hash命令學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07

