如何添加redis自定义命令

分类:编程技术 时间:2024-02-20 15:14 浏览:0 评论:0
0
本文将详细讲解如何添加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自定义命令。读完之后你有没有学到什么?如果您想了解更多相关内容,请关注行业资讯。钍感谢您的阅读。

1. 本站所有资源来源于用户上传或网络,仅作为参考研究使用,如有侵权请邮件联系站长!
2. 本站积分货币获取途径以及用途的解读,想在本站混的好,请务必认真阅读!
3. 本站强烈打击盗版/破解等有损他人权益和违法作为,请各位会员支持正版!
4. 编程技术 > 如何添加redis自定义命令

用户评论