C# Redis缓存过期实现延迟通知实战演练

一、场景描述

在实际开发过程中经常会遇到一些有时效性数据的业务场景,比如订单支付处理超时提醒。当用户在商城上进行下单支付,我们假设如果8小时没有进行支付,那么就后台自动对该笔交易的状态修改为订单关闭取消,同时给用户发送一份邮件提醒。那么我们应用程序如何实现这样的需求场景呢?可能大家都会想到的是最简单粗暴的办法:通过定时任务轮询方式单独创建新启一个线程去检测当前任务,这种实现方式实时刷新效率较低同时也这样对服务器压力比较大。我们是否有更好的方式去实现呢?这里说的是用Redis去实现这样的一个功能。

1.1、本次分享课程适合人群如下:

1、有一定的NET开发基础并对Redis技术有一定了解和认识。

2、喜欢阿笨的干货分享课程的童鞋们。

1.2、一句话总结今天我们要学习的目标和成果?

C#如何通过Redis 的key过期事件通知机制来实现订单过期自动取消和提醒。

如果您对本次分享课程感兴趣的话,那么请跟踪阿笨一起学习吧。废话不多说,直接上干货,我们不生产干货,我们只是干货的搬运工。

二、思路讲解

2.1、解决方案

2.2、具体实现步骤

三、实现步骤

Redis缓存过期事件通知

四、思考与总结

4.1、总结

4.2、思考

其实还有另外一种比较好的解决方案就是通过RabbitMQ的DLX(Dead-Letter-Exchange)来实现,如果到时候大家感兴趣的话,也可以关注一下阿笨的最新分享课程《C#RabbitMQ延迟队列功能实战项目演练》。

俗话说的好:师父领进门修行在个人,希望大家在学习的道路上一直坚持下去!

原文地址:https://www.cnblogs.com/51net/p/10392207.html

时间: 2024-11-06 16:04:27

C# Redis缓存过期实现延迟通知实战演练的相关文章

Redis缓存过期处理与内存淘汰机制

Redis对已过期的key如何处理? 设置了expire的key缓存过期了,但是服务器的内存还是会被占用,这是因为redis所基于的两种删除策略. redis有两种策略: (主动)定时删除 定时随机的检查过期的key,如果过期则清理删除.(每秒检查次数在redis.conf中的hz配置) (被动)惰性删除 当客户端请求一个已经过期的key的时候,那么redis会检查这个key是否过期,如果过期了,则删除,然后返回一个nil.这种策略对cpu比较友好,不会有太多的损耗,但是内存占用会比较高. 所以

ServiceStack.Redis 缓存过期,并未失效的暂时解决办法

服务器:Redis版本运行环境如图,生产环境是全内存运行. 客户端NuGet 引入:ServiceStack.Redis 加入缓存代码: /// <summary> /// Set /// </summary> /// <typeparam name="T">类型</typeparam> /// <param name="key">键</param> /// <param name=&qu

SpringBoot2整合Redis缓存

遵循SpringBoot三板斧 第一步加依赖 <!-- Redis --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <!-- redis依赖commons-pool 这个依赖一定要添加 --> <

Redis 小白指南(三)- 事务、过期、消息通知、管道和优化内存空间

Redis 小白指南(三)- 事务.过期.消息通知.管道和优化内存空间 简介 <Redis 小白指南(一)- 简介.安装.GUI 和 C# 驱动介绍> 讲的是 Redis 的介绍,以及如何在 Windows 上安装并使用,一些 GUI 工具和自己简单封装的 RedisHelper. <Redis 小白指南(二)- 聊聊五大类型:字符串.散列.列表.集合和有序集合>讲的是 Redis 中最核心的内容,最常用的就是和数据类型打交道. 目录 事务 过期时间 消息通知 管道 优化内存空间

Redis 小白指南(三)- 事务、Watch 命令、过期、消息通知、管道、优化内存空间

Redis 小白指南(三)- 事务.Watch 命令.过期.消息通知.管道.优化内存空间 简介 目录 事务 Watch 命令 过期时间 排序 消息通知 管道 优化内存空间 事务 事务是一组命令的集合,事务和命令一样都是 Redis 的最小执行单位.即一个事务中的命令,要么都执行,要么都不执行.可以思考关系型数据库中的事务特性 ACID: (1)原子性(Atomicity):在事务结束时,其中包含的更新处理要么全部执行,要么完全不执行. (2)一致性(Consistency):事务中包含的处理,要

Redis 利用锁机制来防止缓存过期产生的惊群现象-转载自 http://my.oschina.net/u/1156660/blog/360552

首先,所谓的缓存过期引起的“惊群”现象是指,在大并发情况下,我们通常会用缓存来给数据库分压,但是会有这么一种情况发生,那就是在一定时间 内生成大量的缓存,然后当缓存到期之后又有大量的缓存失效,导致后端数据库的压力突然增大,这种现象就可以称为“缓存过期产生的惊群现象”! 以下代码的思路,就是利用“锁机制”来防止惊群现象.先看代码: class KomaRedis{ private $redis; //redis对象 private static $_instance = null; private

Redis Key过期通知

概述 键空间通知使得客户端可以通过订阅频道或模式, 来接收那些以某种方式改动了 Redis 数据集的事件.如Redis数据库中键的过期事件也是通过订阅功能实现.本文主要基于Azure PaaS Redis演示相关功能的具体实现. 配置 因为开启键空间通知功能需要消耗一些 CPU , 所以在默认配置下, 该功能处于关闭状态.因为Azure Redis屏蔽了部分指令,不能直接使用cli指令设置notify-keyspace-events参数,目前可以通过Azure Portal管理门户直接设置.注意

Auzre微软云Redis后台StackExchange.Redis使用KeySpaceNotification实现缓存过期前操作/处理一些事件

https://github.com/rustd/RedisSamples/blob/master/HelloWorld/KeySpaceNotifications.cs 懂的可以直接看上面官方提供的demo代码就明白怎么用了 Auzre上面需要设置keyspace notifications with "Kxg" 然后在项目启动的时候订阅,比如使用的是Nancy,就在Boostrapper启动里加上订阅程序 个人示例代码: var db = CacheManager.Connecti

java操作Redis缓存设置过期时间

关于Redis的概念和应用本文就不再详解了,说一下怎么在java应用中设置过期时间. 在应用中我们会需要使用redis设置过期时间,比如单点登录中我们需要随机生成一个token作为key,将用户的信息转为json串作为value保存在redis中,通常做法是: //生成token String token = UUID.randomUUID().toString(); //把用户信息写入redis jedisClient.set(REDIS_USER_SESSION_KEY + ":"