python实现简单redis客户端(1)

目的:
(1)学习各种数据库客户端的原理:
连接数据库服务器的端口,发送协议,受到应答
(2)redis协议
Redis 的通信协议是基于文本的,且以行为划分,每行以 \r\n 结束。每一行都有一个消息头,消息头共分为5种分别如下:

+ 表示一个正确的状态信息,具体信息是当前行 + 后面的字符;

- 表示一个错误信息,具体信息是当前行-后面的字符;

* 表示消息体总共有多少行,不包括当前行,* 后面是具体的行数;

$ 表示下一行数据长度,不包括换行符长度 \r\n, $ 后面则是对应的长度的数据;

: 表示返回一个数值,:后面是相应的数字节符;

让我们举一个例子,通过命令SET key value,设置 key 的值为 value。该命令对应的协议内容为:

*3\r\n$3\r\nSET\r\n$3\r\nkey\r\n$4\r\nvalue\r\n

当 Redis 服务器收到以上协议内容并执行成功后,则会返回如下协议

+OK\r\n

到当我们解析以上协议时,只需要根据不同的消息头做不同的解析就可以了。

from socket import *

class RedisClient:
    def __init__(self):
        self.client=socket(AF_INET, SOCK_STREAM)
    def connect(self):
        self.client.connect(('127.0.0.1',6379))
    def set(self,key,value):
        lenk=len(key)
        lenv=len(value)
        data='*3\r\n$3\r\nSET\r\n${0}\r\n{1}\r\n${2}\r\n{3}\r\n'.format(lenk,key,lenv,value)
        print data
        self.client.send(data.encode('utf8'))
        data=self.client.recv(1024)
        print(data.decode('utf8'))

    def get(self,key):
        lenk=len(key)
        data='*2\r\n$3\r\nGET\r\n${0}\r\n{1}\r\n'.format(lenk,key)
        print data
        self.client.send(data.encode('utf8'))
        data=self.client.recv(1024)
        print(data.decode('utf8'))



if __name__ == '__main__':
    client=RedisClient()
    client.connect()
    client.set('dog','1')
    client.get('dog')

支持py2.7
效果截图:
这里写图片描述

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值