redis 模拟jedis 操作string类型数据
一.思路分析
redis数据传输遵循resp协议,只需要按照resp协议并通过socket传递数据到redis服务器即可
resp数据格式:

二.具体实现
package com.ahd.jedis; import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket; /***
* 模拟jedis对redis进行操作
*/
public class MyJedis {
private Socket socket; public MyJedis(String url,Integer port) throws IOException {
socket=new Socket(url,port);
} public static void main(String[] args) throws IOException {
MyJedis myJedis=new MyJedis("127.0.0.1",6379); //myJedis.set("sex","sdf");
//myJedis.get("sex");
myJedis.del("sex");
} /***
* 模拟set string类型
* @param key
* @param value
*/
public void set(String key,String value) throws IOException {
StringBuffer stringBuffer=new StringBuffer();
//getBytes 是因为key和value可能是中文,直接获取长度会出错
stringBuffer.append("*3"+"\r\n")
.append("$3"+"\r\n").append("SET"+"\r\n")
.append("$"+key.getBytes().length+"\r\n").append(key+"\r\n")
.append("$"+value.getBytes().length+"\r\n").append(value+"\r\n");
OutputStream outputStream = socket.getOutputStream(); System.out.println(stringBuffer);
outputStream.write(stringBuffer.toString().getBytes()); } /***
* 模拟get String
* @param key
* @return
*/
public String get(String key) throws IOException {
StringBuffer stringBuffer=new StringBuffer();
//getBytes 是因为key和value可能是中文,直接获取长度会出错
stringBuffer.append("*2"+"\r\n")
.append("$3"+"\r\n").append("get"+"\r\n")
.append("$"+key.getBytes().length+"\r\n").append(key+"\r\n");
//1. 将命令传递到redis
OutputStream outputStream = socket.getOutputStream();
outputStream.write(stringBuffer.toString().getBytes()); //2. 接收redis的响应结果
InputStream inputStream = socket.getInputStream();
byte[] b=new byte[2048];
inputStream.read(b); return new String(b);
} /***
* 指定key 删除
* @param key
* @return
* @throws IOException
*/
public void del(String key) throws IOException {
StringBuffer stringBuffer=new StringBuffer();
//getBytes 是因为key和value可能是中文,直接获取长度会出错
stringBuffer.append("*2"+"\r\n")
.append("$3"+"\r\n").append("del"+"\r\n")
.append("$"+key.getBytes().length+"\r\n").append(key+"\r\n");
//1. 将命令传递到redis
OutputStream outputStream = socket.getOutputStream();
outputStream.write(stringBuffer.toString().getBytes());
outputStream.flush();
} }
三.运行结果

redis 模拟jedis 操作string类型数据的更多相关文章
- [置顶] Redis String类型数据常用的16条命令总结
Redis String类型数据常用的16条命令总结 描述:String 类型是最简单的类型,一个Key对应一个Value,String类型是二进制安全的.Redis的String可以包含任何数据,比 ...
- ***Redis hash是一个string类型的field和value的映射表.它的添加、删除操作都是O(1)(平均)。hash特别适合用于存储对象
http://redis.readthedocs.org/en/latest/hash/hset.html HSET HSET key field value (存一个对象的时候key存) 将哈希 ...
- Redis hash 是一个 string 类型的 field 和 value 的映射表.它的添加、删除操作都是 O(1)(平均)。
2.3 hashes 类型及操作 Redis hash 是一个 string 类型的 field 和 value 的映射表.它的添加.删除操作都是 O(1)(平均).hash 特别适合用于存储对象.相 ...
- C#操作json类型数据
将对象序列化为 JavaScript 对象表示法 (JSON),并将 JSON 数据反序列化为对象. 此类不能继承. // msdn 例子: namespace SL_DataContractJson ...
- Java String类型数据的字节长度
问题描述: 向Oracle数据库中一varchar2(64)类型字段中插入一条String类型数据,程序使用String.length()来进行数据的长度校验,如果数据是纯英文,没有问题,但是如果数据 ...
- tablib.Dataset()操作exl类型数据之“类方法”研究
#tablib.Dataset()操作exl类型数据之“类方法”研究 import tablib #初始化 data=tablib.Dataset() #设置列标题 data.headers=('na ...
- [redis] redis 对string类型数据操作
package com.xwolf.java.redis; import org.junit.Before; import org.junit.Test; import redis.clients.j ...
- redis 的使用 (基础, key操作, string类型操作)
使用redis set 类型: 没有重复元素 list 链表类型 有重复累型 sort set 类型 没有重复元素 1.1 存储数据 读取数据 // 数据储存在 内存中 set name laowen ...
- 使用Jedis操作Redis-使用Java语言在客户端操作---String类型
前提:需要引入Jedis的jar包. /** * 我的redis在Linux虚拟机Centos7中,192.168.222.129是我虚拟机的ip地址. */ private static Jedis ...
随机推荐
- IDM非补丁破解方法
参考 http://tieba.baidu.com/p/3878377959 备份文章 在网络和共享中心中打开防火墙 高级设置->出站规则->新建规则 打开新建规则向导. 程序-> ...
- 揭开HTTPS的神秘面纱
摘自:https://www.cnblogs.com/hujingnb/p/11789728.html 揭开HTTPS的神秘面纱 在说HTTP前,一定要先介绍一下HTTP,这家伙应该不用过多说明了 ...
- 详讲KMP算法
两个字符串: 模式串:ababcaba 文本串:ababcabcbababcabacaba KMP算法作用:快速在文本串中匹配到模式串 如果是穷举法的方式: 大家有发现,这样比效率很低的. 所以就需要 ...
- mybatis 中的 update 返回值
摘自:https://www.jianshu.com/p/80270b93082a 如果定义一个如下的update函数,那么这个函数的返回值到底是啥意思呢?是受影响的行数吗? 验证之前我们先看看数据库 ...
- spark streaming 1: SparkContex
StreamingContext 和SparkContex的用途是差不多的,作为spark stream的入口,提供配置.生成DStream等功能. 总体来看,spark stream包括如下模块: ...
- vue中limitBy,filterBy,orderBy的用法
1.limitBy的用法 <body> <div id="box"> <ul> <li v-for="val in arr | ...
- Node.js读取文件相对路径写法注意
首先看一下文件的存放结构: 我们现在希望在上面标记的JS文件里面读取html里面的内容,我们的代码如下: var fs=require("fs"); fs.readFile('te ...
- python 2.7 error: Microsoft Visual C++ 9.0 is required
参考:https://stackoverflow.com/questions/43645519/microsoft-visual-c-9-0-is-required 解决方法: 下载并安装Micros ...
- Prometheus存储模型分析
Prometheus是时下最为流行的开源监控解决方案,我们可以很轻松地以Prometheus为核心快速构建一套包含监控指标的抓取,存储,查询以及告警的完整监控系统.单个的Prometheus实例就能实 ...
- 查询处理Oracle锁表的问题
--以下几个为相关表SELECT * FROM v$lock;SELECT * FROM v$sqlarea;SELECT * FROM v$session;SELECT * FROM v$proce ...