redis----------redis-storage-------------pika

本文探讨Redis存储系统,包括纯内存模式、内存+磁盘的redis-storage以及完全磁盘存储的Pika。重点介绍了如何通过自定义工具包在redis-storage中实现DS_SET和DS_GET命令,扩展其在磁盘存储上的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

redis:内存级别

redis-storage:内存+磁盘   支持ds_set指令,将数据直接放入磁盘

pika:磁盘  

 

自定义redis-storage使用工具包,添加ds_set,ds_get方法,实质上是redis服务内部支持了DS_GET,DS_SET命令;

自行编写的相关源码参照jedis的源码进行增加了部分源码


CommonCodisPool.class--------------自己编写的class
public String ds_set(byte[] key, byte[] value) {
    Jedis jedis = null;
    try {
        jedis = pool.getResource();
        return jedis.ds_set(key, value);
    } catch (Exception ex) {
        LOGGER.error("Redis异常:{}", ExceptionUtils.getStackTrace(ex));
        throw new RedisException(100, "Redis异常", ex);
    } finally {
        returnResource(jedis);
    }
}
BinaryJedis.class------------参照jedis源码改写【添加部分源码】
public String ds_set(byte[] key, byte[] value) {
    this.checkIsInMultiOrPipeline();
    this.client.ds_set(key, value);
    return this.client.getStatusCodeReply();
}
BinaryClient.class---------参照jedis源码改写【添加部分源码】
public void ds_set(byte[] key, byte[] value) {
//增加DS_SET传输指令,用于直接存方于磁盘上
    this.sendCommand(Command.DS_SET, new byte[][]{key, value});
}
Connection.class
protected Connection sendCommand(Command cmd, byte[]... args) {
    try {
        this.connect();
        Protocol.sendCommand(this.outputStream, cmd, args);
        ++this.pipelinedCommands;
        return this;
    } catch (JedisConnectionException var6) {
        JedisConnectionException ex = var6;

        try {
            String errorMessage = Protocol.readErrorLineIfPossible(this.inputStream);
            if (errorMessage != null && errorMessage.length() > 0) {
                ex = new JedisConnectionException(errorMessage, ex.getCause());
            }
        } catch (Exception var5) {
            ;
        }

        this.broken = true;
        throw ex;
    }
}

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值