修改redis改key值不改过期时间

文章讨论了在实现图片验证码时遇到的问题,即如何使用Redis管理用户在30秒内错误输入次数不超过3次的限制。提出了三种策略:一是通过获取并保持原有的过期时间;二是利用SETRANGE命令更新值和过期时间;三是利用Redis的自增功能更新数字值。作者指出了每种方法的优缺点,如第一种方法可能存在时间偏差,第二种方法实用但复杂,第三种方法适用于数字值但限制较多。

今天在做图片验证码的时候遇到一个问题。用redis的生命周期来存放,用户输入错误次数。

三十秒内输错三次就,等待三十分钟。

那么问题来了,如果说第一次输入错误,应该是 key为用户用,value 为 次数2 ex就为30秒

,但是第二次 set把值改为2时,生命周期就会被覆盖。如果不加过期时间就是一个有效,加了那就是重新给了30秒。

第一种方法:

第二次输入错误的时候,用tll 取出第一次的过期时间,继续设置为第二次的过期时间。

第二种:

使用SETRANGE命令
用 value 参数覆写(overwrite)给定 key 所储存的字符串值,从偏移量 offset 开始。

>SET greeting "111111"
"OK"
>ttl greeting
"-1"
>EXPIRE greeting 30
"1"
>ttl greeting
"25"
>SETRANGE greeting 0 "222222"
"6"
>GET greeting
"222222"
>ttl greeting
"16"
 

第三种:

如果你的value值为数字,nice可以进行实现自增操作,不改变生命周期。

总结:

第一种:    不适用,中间的存在偏差,但已经很小了。
方案是可行,但不够完美。

第二种:  很实用,但是不好理解。

第三种:  是做自增操作,那就意味着你的值只能是数字,也不能指定自增的值,不能满足任何场景。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值