Skip to content

Commit bd0e375

Browse files
committed
refactor(set):优化SET命令的序列化实现
- 将FAST_HEADER数组替换为单一HEADER字节数组 - 移除基于键长度的快速写入逻辑- 简化RESP协议头的写入过程 - 统一使用动态长度写入方式处理键值对 - 提升代码可读性和维护性
1 parent a3fc217 commit bd0e375

2 files changed

Lines changed: 4 additions & 23 deletions

File tree

src/main/java/tech/smartboot/redisun/cmd/SetCommand.java

Lines changed: 3 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -45,19 +45,7 @@ public class SetCommand extends Command {
4545
private static final BulkStrings CONSTANTS_EX = BulkStrings.of("EX");
4646
private static final BulkStrings CONSTANTS_PX = BulkStrings.of("PX");
4747
private static final BulkStrings CONSTANTS_PXAT = BulkStrings.of("PXAT");
48-
// private static final byte[] HEADER = new byte[]{RESP.RESP_DATA_TYPE_ARRAY, '3', '\r', '\n', RESP.RESP_DATA_TYPE_BULK, '3', '\r', '\n', 'S', 'E', 'T', '\r', '\n', RESP.RESP_DATA_TYPE_BULK};
49-
private static final byte[][] FAST_HEADER = new byte[][]{
50-
{RESP.RESP_DATA_TYPE_ARRAY, '3', '\r', '\n', RESP.RESP_DATA_TYPE_BULK, '3', '\r', '\n', 'S', 'E', 'T', '\r', '\n', RESP.RESP_DATA_TYPE_BULK, '0', '\r', '\n'},
51-
{RESP.RESP_DATA_TYPE_ARRAY, '3', '\r', '\n', RESP.RESP_DATA_TYPE_BULK, '3', '\r', '\n', 'S', 'E', 'T', '\r', '\n', RESP.RESP_DATA_TYPE_BULK, '1', '\r', '\n'},
52-
{RESP.RESP_DATA_TYPE_ARRAY, '3', '\r', '\n', RESP.RESP_DATA_TYPE_BULK, '3', '\r', '\n', 'S', 'E', 'T', '\r', '\n', RESP.RESP_DATA_TYPE_BULK, '2', '\r', '\n'},
53-
{RESP.RESP_DATA_TYPE_ARRAY, '3', '\r', '\n', RESP.RESP_DATA_TYPE_BULK, '3', '\r', '\n', 'S', 'E', 'T', '\r', '\n', RESP.RESP_DATA_TYPE_BULK, '3', '\r', '\n'},
54-
{RESP.RESP_DATA_TYPE_ARRAY, '3', '\r', '\n', RESP.RESP_DATA_TYPE_BULK, '3', '\r', '\n', 'S', 'E', 'T', '\r', '\n', RESP.RESP_DATA_TYPE_BULK, '4', '\r', '\n'},
55-
{RESP.RESP_DATA_TYPE_ARRAY, '3', '\r', '\n', RESP.RESP_DATA_TYPE_BULK, '3', '\r', '\n', 'S', 'E', 'T', '\r', '\n', RESP.RESP_DATA_TYPE_BULK, '5', '\r', '\n'},
56-
{RESP.RESP_DATA_TYPE_ARRAY, '3', '\r', '\n', RESP.RESP_DATA_TYPE_BULK, '3', '\r', '\n', 'S', 'E', 'T', '\r', '\n', RESP.RESP_DATA_TYPE_BULK, '6', '\r', '\n'},
57-
{RESP.RESP_DATA_TYPE_ARRAY, '3', '\r', '\n', RESP.RESP_DATA_TYPE_BULK, '3', '\r', '\n', 'S', 'E', 'T', '\r', '\n', RESP.RESP_DATA_TYPE_BULK, '7', '\r', '\n'},
58-
{RESP.RESP_DATA_TYPE_ARRAY, '3', '\r', '\n', RESP.RESP_DATA_TYPE_BULK, '3', '\r', '\n', 'S', 'E', 'T', '\r', '\n', RESP.RESP_DATA_TYPE_BULK, '8', '\r', '\n'},
59-
{RESP.RESP_DATA_TYPE_ARRAY, '3', '\r', '\n', RESP.RESP_DATA_TYPE_BULK, '3', '\r', '\n', 'S', 'E', 'T', '\r', '\n', RESP.RESP_DATA_TYPE_BULK, '9', '\r', '\n'},
60-
};
48+
private static final byte[] HEADER = new byte[]{RESP.RESP_DATA_TYPE_ARRAY, '3', '\r', '\n', RESP.RESP_DATA_TYPE_BULK, '3', '\r', '\n', 'S', 'E', 'T', '\r', '\n', RESP.RESP_DATA_TYPE_BULK};
6149
private static final byte[] PART = new byte[]{'\r', '\n', RESP.RESP_DATA_TYPE_BULK};
6250
// 要设置的键
6351
private final String key;
@@ -114,15 +102,8 @@ public void writeTo(WriteBuffer writeBuffer) throws IOException {
114102
}
115103
byte[] keyBytes = key.getBytes();
116104
byte[] valBytes = value.getBytes();
117-
if (keyBytes.length < FAST_HEADER.length) {
118-
writeBuffer.write(FAST_HEADER[keyBytes.length]);
119-
} else {
120-
byte[] header = FAST_HEADER[0];
121-
writeBuffer.write(header, 0, header.length - 3);
122-
RESP.writeInt(writeBuffer, keyBytes.length);
123-
}
124-
// writeBuffer.write(HEADER);
125-
// RESP.writeInt(writeBuffer, keyBytes.length);
105+
writeBuffer.write(HEADER);
106+
RESP.writeInt(writeBuffer, keyBytes.length);
126107
writeBuffer.write(keyBytes);
127108
writeBuffer.write(PART);
128109
RESP.writeInt(writeBuffer, valBytes.length);

src/main/java/tech/smartboot/redisun/resp/RESP.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ public abstract class RESP<T> implements Serialization {
5656
public static final byte RESP_DATA_TYPE_ATTRIBUTE = '|'; // 属性 (RESP3)
5757
public static final byte RESP_DATA_TYPE_PUSH = '>'; // 推送消息 (RESP3)
5858

59-
protected static final byte[][] FAST_INT_WRITE = new byte[100][];
59+
private static final byte[][] FAST_INT_WRITE = new byte[100][];
6060

6161
static {
6262
for (int i = 0; i < FAST_INT_WRITE.length; i++) {

0 commit comments

Comments
 (0)