首页 > 数据库 >Redis过期回调一场灾难性之旅(redis过期回调的坑)

Redis过期回调一场灾难性之旅(redis过期回调的坑)

时间:2023-09-02 12:31:48浏览次数:31  
标签:函数 过期 redis Redis key 回调

Redis过期回调:一场灾难性之旅

Redis是一个流行的NoSQL数据库系统,被广泛应用于各种场景中。然而,在使用Redis时,我们经常会遇到一些问题,其中之一就是过期键回调问题。过期回调是指在Redis中,当一个键被设置了过期时间后,如果在过期时间到达之前这个键被更新了,那么原来设置的过期时间就会失效。这种情况下,我们需要一种方法来处理这个过期事件。

Redis提供了一种过期回调的机制,可以在某个键过期时触发一个回调函数。具体地说,在调用SET命令的时候,我们可以给这个键设置一个过期时间,同时也可以给这个键设置一个回调函数,当这个键过期时,Redis就会自动调用这个回调函数。这个功能非常强大,可以让我们在Redis中实现各种高级场景。

然而,在实际使用中,我们往往会遇到一些灾难性的问题。其中一个就是在使用过期回调的时候,我们可能会遭遇到无法预料的错误。

Redis过期回调一场灾难性之旅(redis过期回调的坑)_Redis

问题一:过期回调函数不被触发

在使用过期回调函数的时候,首要问题就是回调函数是否能被触发。很多开发者都在使用过期回调函数的时候遇到过这个问题。通常情况下,过期回调函数都是可以正常触发的,但是在一些特殊情况下,我们可能会遇到回调函数无法触发的问题。这个问题的根本原因通常是由于Redis的网络通信机制造成的。我们可以使用以下代码来检测一下回调函数是否正常触发。

def callback_function(key):
    print("key %s expired" % key)
    
redis = redis.Redis(host='localhost', port=6379)

redis.set('my_key', 'value')
redis.expire('my_key', 10)
redis.setex('other_key', 10, 'value', callback_function)

问题二:过期回调函数被触发但是没有执行

在使用过期回调函数的时候,另一个问题是回调函数是否能被执行。通常情况下,我们的回调函数都是可以正常执行的,但是也有一些情况下,我们可能会遇到回调函数被触发但是不执行的问题。这个问题通常是由于回调函数内部有死循环或者阻塞操作造成的。我们可以使用以下代码来检测一下回调函数是否正常执行。

def callback_function(key):
    print("key %s expired" % key)
    # 死循环操作
    while True:
        pass
    # 阻塞操作
    time.sleep(60)
    
redis = redis.Redis(host='localhost', port=6379)
redis.set('my_key', 'value')
redis.expire('my_key', 10)
redis.setex('other_key', 10, 'value', callback_function)

问题三:过期回调函数执行异常

在使用过期回调函数的时候,最令人头疼的问题之一就是回调函数是否能执行异常。如果我们的回调函数执行异常,可能会导致整个Redis服务崩溃。这个问题通常是由于回调函数的实现问题或者回调函数执行环境问题造成的。我们可以使用以下代码来检测一下回调函数是否能执行异常,并确保Redis服务不会崩溃。

def callback_function(key):
    print("key %s expired" % key)
    # 引发异常
    a = 1 / 0
    
redis = redis.Redis(host='localhost', port=6379)

redis.set('my_key', 'value')
redis.expire('my_key', 10)
redis.setex('other_key', 10, 'value', callback_function)

在使用Redis过期回调的过程中,我们需要牢记一些基本的规则。我们要确保回调函数是一个简洁、可靠的函数,不涉及任何复杂的计算或者阻塞操作。我们需要使用监控工具,检测回调函数是否正常运行。如果回调函数出现问题,我们应该尽快依照错误信息进行处理,避免Redis服务崩溃。在遵循这些规则的前提下,Redis过期回调可以成为我们实现高级场景的利器。

标签:函数,过期,redis,Redis,key,回调
From: https://blog.51cto.com/u_16205813/7319022

相关文章

  • redis常用数据类型(转)
    转载:https://blog.csdn.net/u014453898/article/details/112292028redis有5种常用数据类型,string,list,set,zset,hash一、应用string:缓存,限流,计数器,分布式锁,分布式sessionhash:存储用户信息,用户主页访问量,组合查询list:微博关注人时间轴列表,简单队列set:赞,踩,标......
  • Redis高可用集群之水平扩展(3.2)
    Redis3.0以后的版本虽然有了集群功能,提供了比之前版本的哨兵模式更高的性能与可用性,但是集群的水平扩展却比较麻烦,今天就来带大家看看redis高可用集群如何做水平扩展,原始集群(见下图)由6个节点组成,6个节点分布在三台机器上,采用三主三从的模式1、启动集群#启动整个集群/usr......
  • Redis核心数据结构与高性能原理(1)
    Redis安装下载地址:http://redis.io/download安装步骤:#安装gccyuminstallgcc#把下载好的redis-5.0.3.tar.gz放在/usr/local文件夹下,并解压wgethttp://download.redis.io/releases/redis-5.0.3.tar.gztar-zxvfredis-5.0.3.tar.gzcdredis-5.0.3#进入到解压好的......
  • Redis HyperLogLog与事务&Redis 7.0前瞻(7)
    Redis高级数据结构HyperLogLogHyperLogLog(Hyper[ˈhaɪpə(r)])并不是一种新的数据结构(实际类型为字符串类型),而是一种基数算法,通过HyperLogLog可以利用极小的内存空间完成独立总数的统计,数据集可以是IP、Email、ID等。如果你负责开发维护一个大型的网站,有一天产品经理要网站......
  • Redis队列Stream&Redis多线程详解(8)
    Redis目前最新版本为Redis-6.2.6,考虑到实际的情况,本次课程会以CentOS7下Redis-6.2.4版本进行讲解。下载地址:https://redis.io/download安装运行Redis很简单,在Linux下执行上面的4条命令即可,同时前面的课程已经有完整的视频讲解,请到网盘中下载观看,并自行安装。如安装过程出......
  • 手摸手4-springboot整合redis,实现自动文档
    (目录)手摸手4-springboot整合redis,实现自动文档引入依赖<!--redis相关--><dependency><groupId>org.apache.commons</groupId><artifactId>commons-pool2</artifactId></dependency><......
  • .Net6.0 Redis操作其一List篇
    今天在写字典表时为了优化就用了redis,然后其中就又用到了redis中的一个LIst添加和读取的操作首先Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sortedset:有序集合)。今天讲的是其中之一lIst(列表)Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加......
  • 为什么创建 Redis 集群时会自动错开主从节点?
    哈喽大家好,我是咸鱼在《一台服务器上部署Redis伪集群》这篇文章中,咸鱼在创建Redis集群时并没有明确指定哪个Redis实例将担任master,哪个将担任slave/usr/local/redis-4.0.9/src/redis-trib.rbcreate--replicas1192.168.149.131:6379192.168.149.131:26379192.168.1......
  • springboot 集成 redisson
    1.maven依赖<dependency> <groupId>org.redisson</groupId> <artifactId>redisson</artifactId> <version>3.10.1</version> </dependency>2.添加配置和注入beanimportorg.redisson.Redisson;importorg.redisso......
  • smartbi token回调获取登录凭证漏洞(二)
    2023年8月8日Smartbi官方又修复了一处权限绕过漏洞。该漏洞是上一个特定场景下设置Token回调地址漏洞的绕过,未经授权的攻击者可利用该漏洞,获取管理员token,完全接管管理员权限。于是研究了下相关补丁并进行分析。0x01分析过程阅读相关补丁,可知此次漏洞与/smartbix/api/monitor/set......