基于hiredis的投票系统实现
2016-05-04 19:47
661 查看
基于hiredis的投票系统实现
本系统主要实现了简单投票功能,比如:读者给自己喜欢的文章投票,书籍就能得到相应的投票,并且积分也能增长,可以为后续的推荐系统做基础。每一个用户只能投一票,多余的票无效。对于文章,可以使用散列进行储存,假设有title,votes,scores,published_date四个key:
article:id | |||
---|---|---|---|
title | votes | scores | published_date |
voted:article:id | |
---|---|
article:id | reader |
char *command = (char*)malloc(sizeof(char)*256); sprintf(command,"SMEMBERS voted:%s",article:id); redisReply *reply = (redisReply*)redisCommand(conn,command); int size = reply->elements; //获取当前投票的人数 int i = 0; while(i<size) { redisReply r = reply->element[i++][0]; if(!strcmp(reader,r.str))//如果读者已经投过票,就直接退出 { break; } else { if(i!=size) continue; else //如果该读者没有投过票,就进行投票 { //执行投票 } } }
读者投过票后,散列article:id中存储的votes和scores的值都需要改变,并且Redis对于double类型,直接转换为sds类型进行操作,而votes的类型是int,为了减少代码量,使用同一个函数获取votes和scores的值。
char* findValue(redisContext *conn, char *article, char *key) { char *command = (char*)malloc(sizeof(char)*256); sprinf(command,"HGET %s %s",article,key); redisReply *reply = redisCommand(conn,command); if(reply->type==REDIS_REPLY_STRING) return reply->str; else if(reply->type==REDIS_REPLY_INTEGER) //如果要获取的值是数值,那么直接转换为字符串 { char *str = (char*)malloc(sizeof(char)*999999); sprintf(str,"%l",reply->integer); return str; } }
投票部分就比较简单,只需要将投票的用户加入(SADD)到集合中,votes增加(HINCRBY),scores增加(HSET)即可。
相关文章推荐
- windows下hiredis配置
- redis C++ API
- reds 2 之 hiredis
- 基于hiredis的聊天客户端
- 编译hiredis遇到的问题
- hiredis之坑爹的异步调用
- Centos7 安装Redis和Hiredis
- Linux下安装Redis
- 十分简单的redis使用说明及性能测试
- 十分简单的redis使用说明及性能测试
- hiredis中lua脚本调用
- hiredis应用
- Windows下使用hiredis各种常见问题(折磨死人了)
- Redis简单入门
- redis 值 hiredis (c/c++)
- libhiredis.so.0.13: cannot open shared object file: No such file or director
- Hiredis安装使用及浅析和一个利用Hiredis实现的简单类
- 基于Hiredis异步API的聊天系统实现
- C/C++调用redisAPI接口
- c语言操作redis数据库