一.思路分析

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. Redis大 key的发现与删除方法全解析

    个推作为国内第三方推送市场的早期进入者,专注于为开发者提供高效稳定的推送服务,经过9年的积累和发展,服务了包括新浪.滴滴在内的数十万APP.由于我们推送业务对并发量.速度要求很高,为此,我们选择了高性 ...

  2. .py与.pyc文件区别

    原来Python的程序中,是把原始程序代码放在.py文件里,而Python会在执行.py文件的时候.将.py形式的程序编译成中间式文件(byte-compiled)的.pyc文件,这么做的目的就是为了 ...

  3. Docker入门-数据挂载

    Docker数据管理 在容器中管理数据主要有两种方式: 数据卷(Volumes) 挂载主机目录(Bind mounts) 数据卷 数据卷是一个可供一个或多个容器使用的特殊目录,它绕过UFS,可以提供很 ...

  4. grep家族、sed、awk

    一.grep家族 grep是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来. 在上一次的博客中已经使用过egrep通过正则表达式来匹配正确IP地址,这里的用法就不多说了. f ...

  5. Singletom 单例

    class Singletom { //最差写法.构造方法是public的,有可能会被new出多个,那就不是单例了. public Singletom(){ } public static Singl ...

  6. vuefor循环

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  7. 线性回归linear regression(python脚本实现)

    python机器学习-乳腺癌细胞挖掘(博主亲自录制视频) https://study.163.com/course/introduction.htm?courseId=1005269003&u ...

  8. Exceptionless安装的一些坑

    零.参考网站: https://www.cnblogs.com/zgshi/p/9152196.html 博客园上介绍.基本上介绍了如何安装和放到IIS上面. https://www.cnblogs. ...

  9. 封装cookie,自定义过期时间,domain,path

    在使用Cookie进行存储的时候,遇到了许多不可思议的bug,特地标识出来,以作总结. 是这样一个项目,登录是放在官网进行操作的,而登录进入的是后台,后台和官网属于同一域名的不同目录,那么常规进行co ...

  10. 【miscellaneous】监狱安防系统智能视频监控系统设计方案

    1监狱安防新需求 随着司法监狱管理系统内视频监控系统的日益发展,现有的被动式人工监控这一传统模式已无法满足新形势下的监管工作需求,尤其是现在靠轮询的视频监控方式,无法对突发恶性事件做到第一时间的防御和 ...