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 ...
随机推荐
- 实现shape图层添加label
void CmapwingisTest2View::OnToolsAdd32780() { TCHAR szFilters[]= _T("SHP Files (*.shp)|*.shp||& ...
- MongoDB4和MysSQL5.7的读/写和事务处理速度简单对比
系统环境: Ubuntu 18.04 数据库 MysSQL5.7/MongoDB4.0 插入的数据为随机生产,不重复. MySQL使用的连接库是 sqlalchemyMongoDB使用的连接库是pym ...
- python连redis测试
python 版本 3.x执行环境需要安装redis模块: pip install redis 执行脚本前,有redis-cli中查询key值: 执行脚本: ********************* ...
- git 常用的分支技巧
分支branch作为git一个强大功能,在平时开发如果能够善加使用,定能成倍提升开发效率. 1.分支开发模式 主分支master上一般是稳定版本,需要保证随时都能发布. 所以,可以建立一个开发分支用于 ...
- while循环嵌套
<1>while嵌套的格式 while 条件1: 条件1满足时,做的事情1 条件1满足时,做的事情2 条件1满足时,做的事情3 ...(省略)... while 条件2: 条件2满足时,做 ...
- ORACLE官方全托管驱动 Oracle.ManagedDataAccess 12.1.0.1.0
以前用Oracle的时候,必须得装他臃肿的客户端,网上虽然也有提供直连Oracle的驱动,但也是要收费的,最近Oracle终于开窍了,提供了官方的全托管驱动. 这次是随Oracle ODAC 12c ...
- 阶段3 2.Spring_08.面向切面编程 AOP_5 切入点表达式的写法
写测试类来测试..也不需要整合JUnit了就是个普通的测试类. 我们要看就是有没有给我们真正的实现 记录日志 配置起作用了. 三个方法都调用一下 目前我们的配置只能对saveAccount增强 通常情 ...
- python之openpyxl生成excel文件
项目需要,需要自动生成PDF测试报告.经过对比之后,选择使用了reportlab模块. 项目背景:开发一个测试平台,供测试维护测试用例,执行测试用例,并且生成测试报告(包含PDF和excel),将生成 ...
- UML_2_浅谈UML的概念和模型之UML九种图
转载:https://my.oschina.net/zhumenzhongren/blog/667353 上文我们介绍了,UML的视图,在每一种视图中都包含一个或多种图.本文我们重点讲解UML每种图的 ...
- java:Oracle(table的增删改查,data的增删改查)
1.oracle命名规范:和Java的命名规范很像 1.严格区分大小写 2.所有的sql语句都要以';'结尾 3.所有的sql 都要使用空格区分:sqlplus空格/空格as空格sysdba回车 4. ...