从0到1手写缓存cache之实现list命令
22 Jun 2024 |- 抽取公关逻辑到接口command
- 支持不同命令都能从传入参数中获取键值。
它的实现类就是各个命令。
- 通过commands注册所有命令
- 通过Reply封装redis返回数据类型
包括整形、错误、简单字符串、复杂字符串和数组。
- LPUSH命令的实现
- 实现command接口
- 重写name方法
- 实现执行逻辑exec:获取参数和值,在缓存中实现具体逻辑,返回int类型结果。
在cache中lpush逻辑如下,借用LinkedList的addFirst实现。
底层使用Map作为缓存数据结构, CacheEntry封装值的类型
- LPOP命名的实现
- 实现command接口
- 重写name方法
- 实现执行逻辑exec:获取参数和值,在缓存中实现具体逻辑,返回bulkString类型结果。
在cache中缓存的具体逻辑实现如下,借用LinkedList的removeFirst实现。
- 测试
通过redis客户端都可以实现命令lpush/lpop/rpush/rpop/lindex/lrange/llen。
- REDIS 协议规范 https://redis.com.cn/topics/protocol.html在 RESP 中,数据的类型依赖于首字节:单行字符串(Simple Strings): 响应的首字节是 “+”错误(Errors): 响应的首字节是 “-“整型(Integers): 响应的首字节是 “:”多行字符串(Bulk Strings): 响应的首字节是”$“数组(Arrays): 响应的首字节是 “*“RESP协议的不同部分总是以 “\r\n” (CRLF**) 结束。
源码:https://github.com/midnight2104/midnight-cache