Vorwort
Der Designauftrag ist abgelaufen, Sie können sich nicht nur auf Redis verlassen, Sie brauchen eine Vertuschungsstrategie
Code-Implementierung:
import com.coolplay.trade.dto.req.CancelOrderReq; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; import org.springframework.data.redis.core.ZSetOperations; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.Set; import java.util.concurrent.TimeUnit; @Service @Slf4j public class OrderRedisDelayQueueOperator extends AbstractOrderScheduleDelayQueue { @Resource(name = "redisTemplate") private ZSetOperations<String, String> orderRedis; /** * 预售、现货生成订单15分钟后未支付,需要取消订单 */ private static final String DELAY_QUEUE_NAME = "order"; /** * 每1秒执行一次 */ @Override @Scheduled(cron = "0/1 * * * * ? ") public void orderEventProcess() { if (!redisLock.tryLock(this.getClass().getSimpleName(), TimeUnit.MILLISECONDS, 10, 100)) { return; } Set<String> dq = orderRedis.range(DELAY_QUEUE_NAME, 0L, Long.MAX_VALUE); if (CollectionUtils.isEmpty(dq)) { return; } for (String orderNo : dq) { Double xs = orderRedis.score(DELAY_QUEUE_NAME, orderNo); Double now = System.currentTimeMillis() * 1.0; if (xs <= now) { log.info("{} timed out", orderNo); super.threadPoolTaskExecutor.execute(() -> { CancelOrderReq req = new CancelOrderReq(); req.setOrderNo(orderNo); req.setCancelType(OrderActionEnum.TIME_OUT_CANCEL); orderService.cancelOrder(req); }); } else { //log.info("{} no time out", orderNo); //如果最小的都没有过期,剩余的则不用处理了 break; } } } public void addToRedis(String orderNo, long delayTime) { orderRedis.add(DELAY_QUEUE_NAME, orderNo, delayTime * 1.0); } public void removeFromRedis(String orderNo) { orderRedis.remove(DELAY_QUEUE_NAME, orderNo); } }
Eine Vertuschungsstrategie
/** * 取消订单--10分钟--20分钟执行一次 */ @XxlJob("cancelOrder20Minutes") public void cancelOrderTenMinutes() { log.info("*****[开始:下单十分钟以后系统自动取消订单]*****"); Date start = DateUtil.dateRoll(new Date(), Calendar.MINUTE,-20); Date end = new Date(); List<ClOrder> clorderList =clOrderMapper.selectListAllOrdrWaiting(start,end); if(ObjectUtil.isNotEmpty(clorderList)){ for(int i=0;i<clorderList.size();i++){ ClOrder clOrder = clorderList.get(i); if(ObjectUtil.isNotEmpty(clOrder)){ Date orderTime = clOrder.getOrderTime(); long between = cn.hutool.core.date.DateUtil.between(orderTime, new Date(), DateUnit.MINUTE); if(between>10){ ClOrder clOrderTemp = new ClOrder(); clOrderTemp.setOrderState("3"); clOrderTemp.setId(clOrder.getId()); clOrderTemp.setMemberId(clOrder.getMemberId()); String msg="您的订单已经取消,订单金额已发放至您的账户请查收~"; try { boolean b = orderService.cancelOrder(clOrderTemp,msg); if(!b){ log.info("[订单失效:定时任务兜底策略更新失败]**订单ID: {}",clOrderTemp.getId()); } log.info("[Redis订单取消订单失效,定时任务兜底策略生效]"); }catch (Exception e){ log.info("[订单失效:定时任务兜底策略更新失败]**订单ID: {}",clOrderTemp.getId()); e.printStackTrace(); } } } } } log.info("*****[结束:下单十分钟以后系统自动取消订单]*****"); }
Das obige ist der detaillierte Inhalt vonSo implementiert Redis das Löschen von Bestellungen nach Ablaufdatum. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Redis ist ein Open -Source -Speicherdatenstrukturspeicher, der als Datenbank, Cache und Message Broker verwendet wird und für Szenarien geeignet ist, in denen eine schnelle Reaktion und eine hohe Parallelität erforderlich sind. 1.Redis verwendet Speicher, um Daten zu speichern, und bietet mikrosekundenüberlesene und schreibgeschwindige. 2. Es unterstützt eine Vielzahl von Datenstrukturen wie Zeichenfolgen, Listen, Sammlungen usw.. 4. Verwenden Sie ein Single-Thread-Modell und die Multiplexing-Technologie, um Anforderungen effizient zu bearbeiten. 5. Leistungsoptimierungsstrategien umfassen den LRU -Algorithmus und der Clustermodus.

Die Funktionen von Redis enthalten hauptsächlich Cache, Sitzungsmanagement und andere Funktionen: 1) Die Cache-Funktion speichert Daten über den Speicher, um die Lesegeschwindigkeit zu verbessern, und eignet sich für hochfrequente Zugriffsszenarien wie E-Commerce-Websites. 2) Die Sitzungsverwaltungsfunktion teilt Sitzungsdaten in einem verteilten System und reinigt sie automatisch über einen Mechanismus für Ablaufzeiten. 3) Andere Funktionen wie Publish-Subscribe-Modus, verteilte Sperren und Zähler, geeignet für Echtzeit-Nachrichten-Push- und Multi-Thread-Systeme und andere Szenarien.

Zu den Kernfunktionen von Redis gehören Speicherspeicher- und Persistenzmechanismen. 1) Speicherspeicher bietet extrem schnelle Lesen und Schreibgeschwindigkeiten, die für Hochleistungsanwendungen geeignet sind. 2) Persistenz stellt sicher, dass Daten nicht durch RDB und AOF verloren gehen, und die Auswahl basiert auf den Anwendungsanforderungen.

RedissServer-SideoperationsFerFunktionen und TiggersforexexecutingComplexoperationsontheserver.1) FunctionsAllowcustomoperationssinlua, JavaScript, Orredis 'scriptinguanguage, EnhancingScalability und Mains.2) TriggersenableAnlace-FunktionexectionexexecialtonexectureExexecialtonexecialtonexectureExexecialsoneOne

Redisisbothadatabaseandaserver.1) Asadatabase, itusesin-MemoryStorageForfastAccess, IdealForreal-TimeApplications und -Caching.2) Asaserver, IssupportSpub/SubsagingandLuaScriptingForreal-Timecommunicationandserver-Ssideoperationen.

Redis ist eine NoSQL -Datenbank, die eine hohe Leistung und Flexibilität bietet. 1) Speichern Sie Daten über Schlüsselwertpaare, die für die Verarbeitung großer Daten und hoher Parallelität geeignet sind. 2) Speicherspeicher- und Single-Thread-Modelle sorgen für schnelles Lesen und Schreiben und Atomizität. 3) Verwenden Sie RDB- und AOF-Mechanismen, um Daten zu bestehen, wodurch hohe Verfügbarkeit und Skalierung unterstützt werden.

Redis ist ein Speichersystem für Speicherdatenstruktur, das hauptsächlich als Datenbank, Cache und Message Broker verwendet wird. Zu den Kernmerkmalen gehören ein Einzel-Thread-Modell, E/A-Multiplexing, Persistenzmechanismus, Replikations- und Clustering-Funktionen. Redis wird üblicherweise in praktischen Anwendungen für Caching-, Sitzungsspeicher- und Nachrichtenwarteschlangen verwendet. Es kann seine Leistung erheblich verbessern, indem die richtige Datenstruktur ausgewählt, Pipelines und Transaktionen verwendet und überwacht und stimmt.

Der Hauptunterschied zwischen Redis- und SQL-Datenbanken besteht darin, dass Redis eine In-Memory-Datenbank ist, die für hohe Leistung und Flexibilitätsanforderungen geeignet ist. Die SQL -Datenbank ist eine relationale Datenbank, die für komplexe Abfragen und Datenkonsistenzanforderungen geeignet ist. Insbesondere 1) REDIS bietet Hochgeschwindigkeits-Datenzugriffs- und Caching-Dienste und unterstützt mehrere Datentypen, die für die Verarbeitung von Caching und Echtzeit geeignet sind. 2) Die SQL-Datenbank verwaltet Daten über eine Tabellenstruktur, unterstützt komplexe Abfragen und Transaktionsverarbeitung und eignet sich für Szenarien wie E-Commerce- und Finanzsysteme, die Datenkonsistenz erfordern.


Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

SecLists
SecLists ist der ultimative Begleiter für Sicherheitstester. Dabei handelt es sich um eine Sammlung verschiedener Arten von Listen, die häufig bei Sicherheitsbewertungen verwendet werden, an einem Ort. SecLists trägt dazu bei, Sicherheitstests effizienter und produktiver zu gestalten, indem es bequem alle Listen bereitstellt, die ein Sicherheitstester benötigen könnte. Zu den Listentypen gehören Benutzernamen, Passwörter, URLs, Fuzzing-Payloads, Muster für vertrauliche Daten, Web-Shells und mehr. Der Tester kann dieses Repository einfach auf einen neuen Testcomputer übertragen und hat dann Zugriff auf alle Arten von Listen, die er benötigt.

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Dreamweaver Mac
Visuelle Webentwicklungstools
