当前位置: 首页 > news >正文

python django做的网站猎头公司的原则是

python django做的网站,猎头公司的原则是,信息流广告优化师,福州市住房和城乡建设局官网转载自 自己动手写一个能操作redis的客户端 引言 redis大家在项目中经常会使用到。官网也提供了多语言的客户端供大家操作redis,如下图所示 但是#xff0c;大家有思考过#xff0c;这些语言操作redis背后的原理么#xff1f;其实#xff0c;某些大神会说 只要按照redis…转载自  自己动手写一个能操作redis的客户端 引言 redis大家在项目中经常会使用到。官网也提供了多语言的客户端供大家操作redis,如下图所示 但是大家有思考过这些语言操作redis背后的原理么其实某些大神会说 只要按照redis的协议发送指定数据给redis监听返回值即可。 确实本质原理就是如上面那句话所说。博主也是以这种思路去看了一下JAVA端的开源组件jedis的源码然后取其精华写了一个段能操作redis的demo希望大家能有所收获。 jedis的github地址为: https://github.com/xetorthio/jedis 有兴趣的童鞋也可以自行去阅读。需要说明的是这毕竟不是源码分析系列文章不是带你去看jedis的源码。只是借鉴思路写一个能操作redis的程序。 正文 首先我先说一下操作思路如下图所示 说明一下上面的第四步就是我们自己要写的操作redis的小demo。 1、先写一个socket监听6379端口 这个程序很easy度娘一下出来一大把 import java.io.IOException; import java.io.InputStreamReader; import java.io.Reader; import java.net.ServerSocket; import java.net.Socket; public class SocketServer {public static void main(String[] args) throws IOException {ServerSocket server  new ServerSocket(6379);Socket socket  server.accept();byte[] chars  new byte[64];socket.getInputStream().read(chars);System.out.println(new String(chars));} }2、采用开源客户端操作一次redis 我这里用的是JAVA语言的jedis,大家自己也可以用其他的任意语言组件目的是为了采集客户端在操作redis时发送出的数据 import redis.clients.jedis.Jedis;public class RedisTest {public static void main(String[] args) {Jedis jedis  new Jedis(127.0.0.1, 6379);jedis.set(eat, I want to eat);} }3、看看socket监听到的数据 在这里运行一下第二步的代码查看第一步的代码输出的数据如下所示 *3 $3 SET $3 eat $13 I want to eat那么这组数据是什么含义呢 我们去官网进行查询。原来redis的客户端和服务端采取了一种RESP协议。相应文档地址如下 https://redis.io/topics/protocol RESP设计巧妙它的前景在于下面三个方面 Simple to implement.  Fast to parse.  Human readable. 那么、-、*、:、$这些符号是什么意思呢? 官网有这么一段话 In RESP, the type of some data depends on the first byte:  For Simple Strings the first byte of the reply is   For Errors the first byte of the reply is -  For Integers the first byte of the reply is :  For Bulk Strings the first byte of the reply is $  For Arrays the first byte of the reply is *  Additionally RESP is able to represent a Null value using a special variation of Bulk Strings or Array as specified later.  In RESP different parts of the protocol are always terminated with \r\n (CRLF). 翻译过来 1简单字符串Simple Strings, 以 加号 开头 2错误Errors, 以-减号 开头 3整数型Integer 以 : 冒号开头 4大字符串类型Bulk Strings, 以 $美元符号开头长度限制512M 5组类型Arrays以 *星号开头 并且协议的每部分都是以 \r\n (CRLF) 结尾的。 OK那我们刚才的那一串的数据的意思就是(没有看到\r\n是因为已经转义了所以无法看到) *3   数组包含3个元素分别是SET、eat、I want to eat $3   是一个字符串且字符串长度为3 SET  字符串的内容 $3   是一个字符串且字符串长度为3 eat  字符串的内容 $13  是一个字符串且字符串长度为13 I want to eat 字符串的内容提问如果是get命令那么传输的RESP的内容长什么样 比如有一个命令get eat,那么此时的内容如下所示 *2 $3 GET $3 eat没有\r\n是因为已经转义了所以没看到。其他的命令可以自行测试。 4、尝试构造一样的数据操作redis OK经过上面的铺垫。我们如果要对redis做一个set操作则构造set命令的RESP协议内容并且利用socket编程将这串内容发送给redis即可。这里用java的socket编程实现用其他语言也是一样的。 我们有一个类 RedisClient.java 代码如下 import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.Socket;import java.net.UnknownHostException;public class RedisClient {private Socket socket;                                     private OutputStream outputStream;private InputStream inputStream;public RedisClient(String host, int port){try {this.socket  new Socket(host,port);this.outputStream  this.socket.getOutputStream();this.inputStream  this.socket.getInputStream();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}public String set(final String key, String value) {StringBuilder sb  new StringBuilder();//虽然输出的时候会被转义然而我们传送的时候还是要带上\r\nsb.append(*3).append(\r\n);sb.append($3).append(\r\n);sb.append(SET).append(\r\n);sb.append($).append(key.length()).append(\r\n);sb.append(key).append(\r\n);sb.append($).append(value.length()).append(\r\n);sb.append(value).append(\r\n);byte[] bytes new byte[1024];try {outputStream.write(sb.toString().getBytes());inputStream.read(bytes);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}return new String(bytes);}public static void main(String[] args) {RedisClient redisClient  new RedisClient(127.0.0.1, 6379);String result  redisClient.set(eat, please eat);System.out.println(result);     } }上面的public String set(final String key, String value)方法中显示了我们假如需要对redis进行set操作需要传输的RESP协议的内容。记住一定要带\r\n字符作为结尾 OK运行上述代码你会发现你可以往redis中set数据了并且控制台输出如下 OK提问你自己会封装get命令么 总结 本文以一种循序渐进的方式带领大家写了一个能操作redis的demo希望大家有所收获。
http://www.zqtcl.cn/news/566300/

相关文章:

  • 中学教材数字化学习资源的建设——教材配套网站的设计及发展趋势建网站 发信息 做推广
  • 怎么写网站建设方案书制做网站的公司
  • 服务网站 建设原则游戏服务器租用多少钱一年
  • 软件网站下载现在出入深圳最新规定
  • 长宁专业网站制作公司陕西网站建设哪家专业
  • 重庆做的好的房产网站衡水的网站建设
  • 宜春网站开发网页编辑器安卓版
  • 网站建设外包兼职建设工程合同可以分为
  • 我国网络营销现状分析重庆网站seo营销模板
  • 深圳建站公司网站免费推广预期效果
  • html5 国外网站后台网站要做权限前端还是后台做
  • 免费建自己的网站网站标题 关键词 描述之间的关系
  • 提供响应式网站建设wordpress怎么做背景图片
  • 相亲网与做网站做网站的目的与意义
  • 做网站字体大小网站建设是属于虚拟产品吗
  • 网站的内链怎么做校园网建设网站特色
  • 优化网站标题企业的网站一般做哪些维护
  • 聊天网站备案南阳定制网站制作价格低
  • 广州镭拓科技网站建设公司长春招聘
  • 视频网站app怎么做跨境贸易电子商务服务平台
  • 丽水网站seo餐饮vi设计案例
  • 娄底网站建设报价山东省住房和建设厅注册中心网站
  • 公司网站建设工作重点网站建设吉金手指专业11
  • vue做前台网站怎么做钓鱼网站吗
  • 个人建设网站如何定位烟台h5网站开发
  • 广州网站定制多少钱html5游戏开发
  • 使用angularjs的网站域名怎么解析到服务器
  • 地方门户网站盈利模式宝塔 wordpress
  • 西安网站备案软件开发基础教程
  • 有服务器做网站软件系统开发怎样容易