首页 新闻 会员 周边 捐助

改进 EnyimMemcachedCore 支持 memcached touch 命令遇到的问题

0
悬赏园豆:30 [已解决问题] 解决于 2019-05-25 16:05

EnyimMemcachedCore 中主要修改的代码如下:

1)OpCode 中添加了

Touch = 0x1C

2)StoreOperation 中添加了

case StoreMode.Touch: op = OpCode.Touch; break;

3)StoreOperationBase 在添加了

case StoreCommand.Touch: sb.Append("touch "); break;

4)MemcachedClient 的 PerformStoreAsync 方法中添加了

if (mode == StoreMode.Touch)
{
    value = "";
}

运行 memcached 服务器返回错误 "Invalid arguments (4)"

tcp 抓包情况

请求:

Memcache Protocol, Unknown opcode (28) Request
    Magic: Request (128)
    Opcode: Unknown (28)
        [Expert Info (Warning/Undecoded): Unknown opcode: 28]
            [Unknown opcode: 28]
            [Severity level: Warning]
            [Group: Undecoded]
    Key Length: 71
    Extras length: 8
    Data type: Raw bytes (0)
    Reserved: 0
    [Value length: 0]
    Total body length: 79
    Opaque: 2
    CAS: 0
    Extras
        Unknown: 0000011200000014
    Key: store_unit_test_636943328034572374_133f5e42-54ce-41e2-bc65-c6a55f2d4d90

响应:

Memcache Protocol, Unknown opcode (28) Response
    Magic: Response (129)
    Opcode: Unknown (28)
        [Expert Info (Warning/Undecoded): Unknown opcode: 28]
            [Unknown opcode: 28]
            [Severity level: Warning]
            [Group: Undecoded]
    Key Length: 0
    Extras length: 0
    Data type: Raw bytes (0)
    Status: Invalid arguments (4)
        [Expert Info (Note/Response): Unknown opcode (28): Invalid arguments]
            [Unknown opcode (28): Invalid arguments]
            [Severity level: Note]
            [Group: Response]
    [Value length: 17]
    Total body length: 17
    Opaque: 2
    CAS: 0
    Value: Invalid arguments

请问如何解决?

dudu的主页 dudu | 高人七级 | 园豆:29542
提问于:2019-05-25 10:36
< >
分享
最佳答案
0

解决了,不应该基于 StoreOperation 实现,而是要基于 MutatorOperation

在 MutatorOperation.UpdateExtra() 方法中添加了下面的实现代码

if (mode == MutationMode.Touch)
{
    Span<byte> extra = stackalloc byte[4];
    BinaryPrimitives.WriteUInt32BigEndian(extra, this.expires);
    request.Extra = new ArraySegment<byte>(extra.ToArray());
}
dudu | 高人七级 |园豆:29542 | 2019-05-25 16:05
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册