只要按照redis的协议,发送指定数据给redis,监听返回值即可。
这个程序很easy,度娘一下出来一大把
importjava.io.IOException;importjava.io.InputStreamReader;importjava.io.Reader;importjava.net.ServerSocket;importjava.net.Socket;publicclassSocketServer{ publicstaticvoidmain(String[]args)throwsIOException{ ServerSocketserver=newServerSocket(6379); Socketsocket=server.accept(); byte[]chars=newbyte[64]; socket.getInputStream().read(chars); System.out.println(newString(chars)); }}2、采用开源客户端,操作一次redis我这里用的是JAVA语言的jedis,大家自己也可以用其他的任意语言组件,目的是为了采集客户端在操作redis时,发送出的数据
importredis.clients.jedis.Jedis;publicclassRedisTest{ publicstaticvoidmain(String[]args){ Jedisjedis=newJedis("127.0.0.1",6379); jedis.set("eat","Iwanttoeat"); }}3、看看socket监听到的数据在这里运行一下第二步的代码,查看第一步的代码输出的数据,如下所示
Simpletoimplement.Fasttoparse.Humanreadable.
那么+、-、*、:、$这些符号是什么意思呢官网有这么一段话
InRESP,thetypeofsomedatadependsonthefirstbyte:ForSimpleStringsthefirstbyteofthereplyis"+"ForErrorsthefirstbyteofthereplyis"-"ForIntegersthefirstbyteofthereplyis":"ForBulkStringsthefirstbyteofthereplyis"$"ForArraysthefirstbyteofthereplyis"*"AdditionallyRESPisabletorepresentaNullvalueusingaspecialvariationofBulkStringsorArrayasspecifiedlater.InRESPdifferentpartsoftheprotocolarealwaysterminatedwith"\r\n"(CRLF).
翻译过来(1)简单字符串SimpleStrings,以"+"加号开头(2)错误Errors,以"-"减号开头(3)整数型Integer,以":"冒号开头(4)大字符串类型BulkStrings,以"$"美元符号开头,长度限制512M(5)组类型Arrays,以"*"星号开头并且,协议的每部分都是以"\r\n"(CRLF)结尾的。
OK,那我们刚才的那一串的数据的意思就是(没有看到""\r\n",是因为已经转义了,所以无法看到):
*3数组包含3个元素,分别是SET、eat、Iwanttoeat$3是一个字符串,且字符串长度为3SET字符串的内容$3是一个字符串,且字符串长度为3eat字符串的内容$13是一个字符串,且字符串长度为13Iwanttoeat字符串的内容提问,如果是get命令,那么传输的RESP的内容长什么样?比如有一个命令geteat,那么此时的内容如下所示
*2$3GET$3eat没有\r\n是因为已经转义了,所以没看到。其他的命令,可以自行测试。
OK,经过上面的铺垫。我们如果要对redis做一个set操作,则构造set命令的RESP协议内容,并且利用socket编程,将这串内容发送给redis即可。这里用java的socket编程实现,用其他语言也是一样的。我们有一个类RedisClient.java代码如下
+OK提问,你自己会封装get命令么?
本文以一种循序渐进的方式带领大家写了一个能操作redis的demo,希望大家有所收获。