一.思路分析

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类型数据的更多相关文章

  1. [置顶] Redis String类型数据常用的16条命令总结

    Redis String类型数据常用的16条命令总结 描述:String 类型是最简单的类型,一个Key对应一个Value,String类型是二进制安全的.Redis的String可以包含任何数据,比 ...

  2. ***Redis hash是一个string类型的field和value的映射表.它的添加、删除操作都是O(1)(平均)。hash特别适合用于存储对象

    http://redis.readthedocs.org/en/latest/hash/hset.html HSET HSET key field value   (存一个对象的时候key存) 将哈希 ...

  3. Redis hash 是一个 string 类型的 field 和 value 的映射表.它的添加、删除操作都是 O(1)(平均)。

    2.3 hashes 类型及操作 Redis hash 是一个 string 类型的 field 和 value 的映射表.它的添加.删除操作都是 O(1)(平均).hash 特别适合用于存储对象.相 ...

  4. C#操作json类型数据

    将对象序列化为 JavaScript 对象表示法 (JSON),并将 JSON 数据反序列化为对象. 此类不能继承. // msdn 例子: namespace SL_DataContractJson ...

  5. Java String类型数据的字节长度

    问题描述: 向Oracle数据库中一varchar2(64)类型字段中插入一条String类型数据,程序使用String.length()来进行数据的长度校验,如果数据是纯英文,没有问题,但是如果数据 ...

  6. tablib.Dataset()操作exl类型数据之“类方法”研究

    #tablib.Dataset()操作exl类型数据之“类方法”研究 import tablib #初始化 data=tablib.Dataset() #设置列标题 data.headers=('na ...

  7. [redis] redis 对string类型数据操作

    package com.xwolf.java.redis; import org.junit.Before; import org.junit.Test; import redis.clients.j ...

  8. redis 的使用 (基础, key操作, string类型操作)

    使用redis set 类型: 没有重复元素 list 链表类型 有重复累型 sort set 类型 没有重复元素 1.1 存储数据 读取数据 // 数据储存在 内存中 set name laowen ...

  9. 使用Jedis操作Redis-使用Java语言在客户端操作---String类型

    前提:需要引入Jedis的jar包. /** * 我的redis在Linux虚拟机Centos7中,192.168.222.129是我虚拟机的ip地址. */ private static Jedis ...

随机推荐

  1. python学习之路(21)

    偏函数 Python的functools模块提供了很多有用的功能,其中一个就是偏函数(Partial function).要注意,这里的偏函数和数学意义上的偏函数不一样. 在介绍函数参数的时候,我们讲 ...

  2. nginx负载均衡 之集群概念与负载均衡

    集群介绍 为什么要用集群

  3. 套接字之recvmsg系统调用

    recvmsg系统调用允许用户指定msghdr结构来接收数据,可以将数据接收到多个缓冲区中,并且可以接收控制信息:接收信息过程与其他接收系统调用核心一致,都是调用传输层的接收函数进行数据接收: SYS ...

  4. springboot学习问题一:启动springboot报错端口被占用解决办法

    一:问题 二:分析原因 springboot启动默认端口为8080,现在提示被占用,那我们可以修改springboot的启动端口,换一个未被占用的端口即可 三:解决方法 打开application.p ...

  5. SpringBoot&Dubbo&Zookeeper远程调用项目搭建

    序言 Dubbo一款分布式服务框架,作为阿里巴巴SOA服务化治理方案的核心框架,通过高性能和透明化的RPC实现服务的远程调用,对服务的负载均衡以及项目的耦合性提供很强的解决方式;具体Dubbo的介绍和 ...

  6. 如何在DELL R420上部署EXSI虚拟化(服务器上的安装)

    <VMware ESXi>是一款虚拟化软件.软件支持windows平台客户端界面管理,客户端界面与正常使用的虚拟机WMware Workstation界面功能类似VMware ESXI 服 ...

  7. Dubbo HA 高可用

    一.zookeeper 宕机 现象:zookeeper 注册中心宕机,还可以消费 dubbo 暴露的服务 健壮性  监控中心宕掉不影响使用,只是丢失部分采样数据  数据库宕掉后,注册中心仍能通过缓 ...

  8. GetRGB下载

    下载地址:https://pan.baidu.com/s/11EyUPa2WxhIgdsTRZtj_eg 07年6-8月做的,用于屏幕取色. 2019年8月30日13点50分

  9. U盘无法拷贝大于4G的文件解决办法汇总

    U盘主要有三种格式: FAT32: 缺点:单个文件不能超过4GB,不支持512MB以下容量的U盘 备注:如果U盘容量达8GB以上,发现4GB文件拷不进去的话,可以考虑换用NTFS或ExFAT格式了 ● ...

  10. java:异常机制(try,catch,finally,throw,throws,自定义异常)

    * String类中的格式化字符串的方法: * public static String format(String format, Object... args):使用指定的格式字符串和参数返回一个 ...