如何添加redis自定义命令
Redis凭借高性能、轻量级的优良特性,成为互联网公司的标准缓存。有时候我们想添加一些自定义命令,主要针对Redis大量使用的场景,比如抢购场景。 ,保证多个Redis命令的事务性。如果没有良好的原子性保证,很容易出现数据不一致的情况。
虽然官方给出了事务计划,但是如果需要根据某个命令的返回值进行判断才能进行下一步,则事务计划将无法来应对它。
今天我们通过一个实际案例来介绍一下如何添加Redis命令。该命令主要用于防刷场景:
是经常需要禁止某个IP或者某个用户一段时间,如果不用这个命令,解决办法如下:
先incr,然后判断是否为1。如果为1,设置过期时间。可以看到,高并发时如果第一个发起incr请求的客户端挂掉了,key不会过期。
今天要写的命令是用来保证这次交易的,服务器端保证如果key的值为1,则设置过期时间。
命令用法如下:
incexpire key expireTime maxNum
key:要处理的key< /p>
expireTime:过期时间,单位为秒。如果写10,则表示该密钥将在10秒后过期;
maxNum:表示会增加多少,直到不再增加为止。如果设置为10,则会返回最大值为11,返回11表示已经超出;
2.写入命令
1.下载redis代码
文中使用的Redis版本是3.2。 11;
下载代码并切换到3.2.11分支
git clone https://github.com/antirez/ redis
2.编写代码添加命令
1)在src/server.c中的redisCommandTable结构中添加新命令
struct redisCommand redisCommandTable[] ={
redisCommandTable是一个数组,每一项代表一条redis命令,第一项代表命令名称,第二项是实际处理的函数,第三项是参数个数,其他的先不详细讨论了。
2) 在 src/server.h 中添加函数声明:
void incrExpireCommand(client *c);< p>3) 然后添加一个新文件为ljh.c(自己命名)并添加以下代码:
#include "server.h"< /p> pre>4) 添加新文件e ljh.o 在 src/Makefile
REDIS_SERVER_OBJ=adlist.o Quicklist.o ae.o anet.o dict.o server.o sds.o zmalloc .o lzf_c.o lzf_d.o pqsort.o zipmap.o sha1.o ziplist.orelease.onetworking执行效果如下
可以看到,key1增加到11后就停止增加,10秒后又变成1。
最后,我们还是要问自己,在我们的场景中是否有必要添加Redis命令。如有必要,一定要把握好各层之间的职责,不要让Redis结束处理业务;一般来说,中间件层一般处理比较通用的功能。越低的层应该越稳定,变化越少,这是正常情况。
以上就是如何添加redis自定义命令。读完之后你有没有学到什么?如果您想了解更多相关内容,请关注行业资讯。钍感谢您的阅读。
2. 本站积分货币获取途径以及用途的解读,想在本站混的好,请务必认真阅读!
3. 本站强烈打击盗版/破解等有损他人权益和违法作为,请各位会员支持正版!
4. 编程技术 > 如何添加redis自定义命令