您的位置:首页 > 数据库 > Memcache

关于memcached redis编程

2013-12-04 22:17 225 查看
我对memcached的理解是,当一个客户端超过两个端口对某一个服务器上面的memcached进行访问的话,此时服务器对客户端两个端口的程序是作为一个整体来对待的,比如端口a在客户端a

set value 0 0 4

1234

此时在端口b

get value

取出来的值是1234

memcached编程

memcached是基于libevent的基础上编写出来的

所以我们可以基于libevent直接编程

也可以使用基于libevent的libmemcached接口来编程

当然也可以直接对memcached来编程,如果想对memcached直接编程的话,需要有些细节要掌握,要不就可能出现错误

1 #include <iostream>
2 #include <stdlib.h>
3 #include <stdio.h>
4 #include <unistd.h>
5 #include <fcntl.h>
6 #include <sys/socket.h>
7 #include <string.h>
8 #include <arpa/inet.h>
9 using namespace std;
10
11 int f1(){
12 struct sockaddr_in ser;
13 int sock;
14 int fd;
15 char buf[100];
16 sock = socket(AF_INET,SOCK_STREAM,0);
17 bzero(&ser,sizeof(ser));
18 ser.sin_family = AF_INET;
19 ser.sin_port = htons(11211);
20 ser.sin_addr.s_addr = inet_addr("127.0.0.1");
21 if(connect(sock,(struct sockaddr*)&ser,sizeof(struct sockaddr)) != 0){
22 cout << "socket error" << endl;
23 }
24 char buf1[]="set love 0 0 7\r\n";注意此时是先回车然后换行
25 char buf2[]="1234567\r\n";注意此时是先回车然后换行
26
27 char buf3[]="get love\r\n";注意此时是先回车然后换行
28
29 write(sock,buf1,sizeof(buf1)-1);此时的大小是只带字符时的大小,不需要最后的那个'\0'字符
30
31 write(sock,buf2,sizeof(buf2)-1);此时的大小是只带字符时的大小,不需要最后的那个'\0'字符
32
33 for(int i=0;i < 20;i ++){
34 write(sock,buf3,sizeof(buf3)-1);此时的大小是只带字符时的大小,不需要最后的那个'\0'字符
35 int n= read(sock,buf,100);
36 write(STDOUT_FILENO,buf,n);
37 sleep(1);
38 bzero(buf,n);
39 }
40 return 0;
41 }

42 int cmpcmd(char* cmd){
43 if(strncmp("get",cmd,3) == 0){
44 return 1;
45 }else if(strncmp("bget",cmd,4) == 0){
46 return 2;
47 }else if(strncmp("gets",cmd,4) == 0){
48 return 3;
49 }else if(strncmp("set",cmd,3) == 0){
50 return 4;
51 }else if(strncmp("replace",cmd,7) == 0){
52 return 5;
53 }else if(strncmp("add",cmd,3) == 0){
54 return 6;
55 }else if(strncmp("append",cmd,6) ==0){
56 return 7;
57 }else if(strncmp("prepend",cmd,7) == 0){
58 return 8;
59 }else if(strncmp("stat",cmd,4) == 0){
60 return 9;
61 }else if(strncmp("delete",cmd,6) == 0){
62 return 10;

63 }else if(strncmp("flush_all",cmd,9) == 0){

64 return 11;
65 }else if(strncmp("version",cmd,7) == 0){
66 return 12;
67 }else if(strncmp("quit",cmd,3) == 0){
68 return 13;
69 }
70 return -1;
71 }
72 int f2(){
73 struct sockaddr_in ser;
74 int sock;
75 int fd;
76 char buf[100];
77 sock = socket(AF_INET,SOCK_STREAM,0);
78 bzero(&ser,sizeof(ser));
79 ser.sin_family = AF_INET;
80 ser.sin_port = htons(11211);
81 ser.sin_addr.s_addr = inet_addr("127.0.0.1");
82 if(connect(sock,(struct sockaddr*)&ser,sizeof(struct sockaddr)) != 0){
83 cout << "socket error" << endl;
84 }
85 char method[8];
86 unsigned int flags=0;
87 unsigned int time =0;
88 char *cmd = (char*)malloc(100);
89 char *value = (char*)malloc(200);
90 int n=-1;
91 int len =-1;
92 int length =-1;
93 while(1){
94 cout << "set add replace append prepend" << endl;
95 n = read(STDIN_FILENO,cmd,100);
96 if(n <0)
97 continue;
98 while((length = read(sock,buf,100)) <0){
99 write(STDOUT_FILENO,buf,length);
100 }
101 bzero(buf,100);
102 int ret = cmpcmd(cmd);
103 if(ret <8 && ret > 3){
104 len = read(STDIN_FILENO,value,100);
105 if(len <0){
106 continue;
107 }
108 while((length = read(sock,buf,100)) >0){
109 write(STDOUT_FILENO,buf,length);
110 }
111 bzero(buf,100);
112 }
113 }
114 return 0;
115 }
116 int main(){
117 f1();
118 f2();
119 return 0;
120 }

运行结果

STORED (一个stored,后面全是value之类的)
VALUE love 0 7
1234567
END
VALUE love 0 7
1234567
END
VALUE love 0 7
1234567
END
VALUE love 0 7
1234567
END
VALUE love 0 7
1234567
END

redis编程

1 #include <iostream>
2 #include <stdlib.h>
3 #include <stdio.h>
4 #include <unistd.h>
5 #include <fcntl.h>
6 #include <sys/socket.h>
7 #include <string.h>
8 #include <arpa/inet.h>
9 using namespace std;
10 int f1(){
11 struct sockaddr_in ser;
12 int sock;
13 int fd;
14 char buf[100];
15 sock = socket(AF_INET,SOCK_STREAM,0);
16 bzero(&ser,sizeof(ser));
17 ser.sin_family = AF_INET;
18 ser.sin_port = htons(6379);
19 ser.sin_addr.s_addr = inet_addr("127.0.0.1");
20 if(connect(sock,(struct sockaddr*)&ser,sizeof(struct sockaddr)) != 0){
21 cout << "socket error" << endl;
22 }
23 char buf1[]="set chy chengying\r\n";
24 char buf2[]="get chy\r\n";
25 int n=-1;
26 int len = -1;
27 fcntl(sock,F_SETFL,O_NONBLOCK);
28 for(int i=0;i < 10;i ++){
29 n = write(sock,buf1,sizeof(buf1)-1);
30 if(n <0){
31 continue;
32 }else if(n >0){
33 while((len = read(sock,buf,100)) >0){
34 write(STDOUT_FILENO,buf,len);
35 }
36 }
37 n = write(sock,buf2,sizeof(buf2)-1);
38 if(n <0){
39 continue;
40 }else if(n >0){
41 while((len = read(sock,buf,100)) >0){
42 write(STDOUT_FILENO,buf,len);
43 }
44 }
45 sleep(1);
46 }
47 }
48
49 int main(){
50 f1();
51
52
53 return 0;
54 }

运行结果是

+OK
$9
chengying
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: