日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
SpringBoot?AOP?Redis如何實(shí)現(xiàn)延時(shí)雙刪功能

在SpringBoot中,我們可以使用AOP(面向切面編程)和Redis來(lái)實(shí)現(xiàn)延時(shí)雙刪功能,具體步驟如下:

1、引入依賴

在項(xiàng)目的pom.xml文件中添加SpringBoot AOP和Redis相關(guān)依賴:


    
    
        org.springframework.boot
        springbootstarteraop
    
    
    
        org.springframework.boot
        springbootstarterdataredis
    

2、配置Redis

在application.properties文件中配置Redis連接信息:

spring.redis.host=localhost
spring.redis.port=6379

3、創(chuàng)建Redis工具類

創(chuàng)建一個(gè)Redis工具類,用于操作Redis:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;
import java.util.concurrent.TimeUnit;
@Component
public class RedisUtil {
    @Autowired
    private StringRedisTemplate stringRedisTemplate;
    /**
     * 設(shè)置鍵值對(duì)并設(shè)置過(guò)期時(shí)間
     * @param key 鍵
     * @param value 值
     * @param time 過(guò)期時(shí)間(秒)
     * @return true表示設(shè)置成功,false表示設(shè)置失敗
     */
    public boolean set(String key, String value, long time) {
        try {
            stringRedisTemplate.opsForValue().set(key, value);
            stringRedisTemplate.expire(key, time, TimeUnit.SECONDS);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }
}

4、創(chuàng)建AOP切面類

創(chuàng)建一個(gè)AOP切面類,用于處理延時(shí)雙刪邏輯:

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import java.util.concurrent.*;
@Aspect
@Component
public class DelayDoubleDeleteAspect {
    @Autowired
    private RedisUtil redisUtil;
    private static final ExecutorService executor = Executors.newSingleThreadExecutor(); // 單線程執(zhí)行器,模擬延時(shí)任務(wù)隊(duì)列
    private static final ConcurrentHashMap> futureMap = new ConcurrentHashMap<>(); // 存儲(chǔ)延時(shí)任務(wù)的Future對(duì)象,用于取消任務(wù)和獲取任務(wù)結(jié)果
    private static final int DELAY_TIME = 5000; // 延時(shí)時(shí)間(毫秒),根據(jù)實(shí)際需求調(diào)整
    private static final int RETRY_COUNT = 3; // 重試次數(shù),根據(jù)實(shí)際需求調(diào)整
    private static final long RETRY_DELAY_TIME = 1000; // 重試間隔時(shí)間(毫秒),根據(jù)實(shí)際需求調(diào)整
    private static final long REMOVE_TIMEOUT = 10000; // 刪除超時(shí)時(shí)間(毫秒),根據(jù)實(shí)際需求調(diào)整
    private static final String REMOVE_SUCCESS_KEY = "REMOVE_SUCCESS"; // 刪除成功的標(biāo)識(shí)鍵,可以根據(jù)實(shí)際需求修改
    private static final String REMOVE_FAILURE_KEY = "REMOVE_FAILURE"; // 刪除失敗的標(biāo)識(shí)鍵,可以根據(jù)實(shí)際需求修改
    private static final String FAILURE_REASON_KEY = "FAILURE_REASON"; // 失敗原因的標(biāo)識(shí)鍵,可以根據(jù)實(shí)際需求修改
    private static final String FAILURE_COUNTER_KEY = "FAILURE_COUNTER"; // 失敗次數(shù)的標(biāo)識(shí)鍵,可以根據(jù)實(shí)際需求修改
    private static final String FAILURE_COUNTER_PREFIX = "FAILURE_COUNTER:"; // 失敗次數(shù)前綴,可以根據(jù)實(shí)際需求修改
    private static final String FAILURE_REASONS = "FAILURE_REASONS"; // 失敗原因列表的標(biāo)識(shí)鍵,可以根據(jù)實(shí)際需求修改,可以是一個(gè)JSON字符串或者一個(gè)列表等數(shù)據(jù)結(jié)構(gòu)來(lái)存儲(chǔ)多個(gè)失敗原因信息,如果使用JSON字符串,可以使用Jackson庫(kù)來(lái)解析;如果使用列表,可以使用Java內(nèi)置的List類型。

新聞名稱:SpringBoot?AOP?Redis如何實(shí)現(xiàn)延時(shí)雙刪功能
URL地址:http://www.5511xx.com/article/dhsjjse.html