设为首页 收藏本站
查看: 537|回复: 0

[经验分享] Redis 内存管理与事件处理

[复制链接]

尚未签到

发表于 2017-12-21 19:54:26 | 显示全部楼层 |阅读模式
From 5304020683078273c1bc6cc9666dab95efa18607 Mon Sep 17 00:00:00 2001  
From: luoxn28
<luoxn28@163.com>  
Date: Fri,
30 Jun 2017 04:43:47 -0700  
Subject: [PATCH] add own command: random num
  

---  src
/server.c   |  3 ++-  src
/server.h   |  1 +  src
/t_string.c | 44 ++++++++++++++++++++++++++++++++++++++++++++  3 files changed, 47 insertions(+), 1 deletion(-)
  
diff --git a/src/server.c b/src/server.c
  
index 609f396..e040104 100644
  
--- a/src/server.c
  
+++ b/src/server.c
  
@@ -296,7 +296,8 @@ struct redisCommand redisCommandTable[] = {
  {"pfdebug",pfdebugCommand,-3,"w",0,NULL,0,0,0,0,0},
  {"post",securityWarningCommand,-1,"lt",0,NULL,0,0,0,0,0},
  {"host:",securityWarningCommand,-1,"lt",0,NULL,0,0,0,0,0},
  
-    {"latency",latencyCommand,-2,"aslt",0,NULL,0,0,0,0,0}
  
+    {"latency",latencyCommand,-2,"aslt",0,NULL,0,0,0,0,0},
  
+    {"random",randomCommand,2,"rF",0,NULL,1,1,1,0,0}
  };
  struct evictionPoolEntry *evictionPoolAlloc(void);
  
diff --git a/src/server.h b/src/server.h
  
index 3fa7c3a..427ac92 100644
  
--- a/src/server.h
  
+++ b/src/server.h
  
@@ -1485,6 +1485,7 @@ void setnxCommand(client *c);
  void setexCommand(client *c);
  void psetexCommand(client *c);
  void getCommand(client *c);
  
+void randomCommand(client *c);
  void delCommand(client *c);
  void existsCommand(client *c);
  void setbitCommand(client *c);
  
diff --git a/src/t_string.c b/src/t_string.c
  
index 8c737c4..df4022d 100644
  
--- a/src/t_string.c
  
+++ b/src/t_string.c
  
@@ -173,6 +173,50 @@ void getCommand(client *c) {
  getGenericCommand(c);
  }
  
+static bool checkRandomNum(char *num)
  
+{
  
+    char *c = num;
  
+
  
+    while (*c != '\0') {
  
+        if (!(('0' <= *c) && (*c <= '9'))) {
  
+            return false;
  
+        }
  
+        c++;
  
+    }
  
+
  
+    return true;
  
+}
  
+
  
+/**
  
+ * command: random n
  
+ * return a random num < n, if n <= 0, return 0
  
+ * @author: luoxiangnan
  
+ */
  
+void randomCommand(client *c)
  
+{
  
+    char buff[64] = {0};
  
+    int num = 0;
  
+    robj *o = NULL;
  
+
  
+    if (!checkRandomNum(c->argv[1]->ptr)) {
  
+        o = createObject(OBJ_STRING, sdsnewlen("sorry, it's not a num :(",
  
+                           strlen("sorry, it's not a num :(")));
  
+        addReplyBulk(c, o);
  
+        return;
  
+    }
  
+
  
+    sscanf(c->argv[1]->ptr, "%d", &num);
  
+    if (num > 0) {
  
+        num = random() % num;
  
+    } else {
  
+        num = 0;
  
+    }
  
+
  
+    sprintf(buff, "%s %d", "redis: ", num);
  
+    o = createObject(OBJ_STRING, sdsnewlen(buff, strlen(buff)));
  
+    addReplyBulk(c, o);
  
+}
  
+
  void getsetCommand(client *c) {
  if (getGenericCommand(c) == C_ERR) return;
  c->argv[2] = tryObjectEncoding(c->argv[2]);
  
--
  
1.8.3.1

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-426596-1-1.html 上篇帖子: Spring-Session+Redis实现session共享 下篇帖子: Spring Boot 集成 Redis 实现缓存机制
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表