关于redis的python客户端程序
来源:互联网 发布:淘宝手机店铺宝贝分类 编辑:程序博客网 时间:2024/05/13 05:45
redis也算是一个老东西了,2012就已经广泛使用了,目前公司实习的时候,整体的项目架构也使用redis存储hot news之类的,最近乘着放假,把源代码分析了一遍,大概的写一下。
阅读代码的时候,主要分成两个看:
- redis-py : python 写的客户端
- hiredis : c语言实现的客户端
为了提升python的客户端运行速度,当然首先选择hiredis啦,主要涉及到HiredisParser和PythonParser 两个部分,HiredisParser使用的底层的connection、 io、response 则是由hiredis提供的。
>
先看纯python代码 :
- 为了提升多个客户端的性能,使用了分布式的共享锁,主要是两个类: Lock 和 LuaLock(这个使用的是lua脚本实现的)
- 通信使用了socket进行,自己实现了 SocketBuffer , 读socket,并且放入缓冲,提升性能( SocketBuffer = 来源是socket的缓冲设计)。
- 而真正的socket的管理,是connection进行处理的,connection保存了socket的host、pid 、keep alive等性质,继承connection的还有SSLConnection( 基于握手的connection)、UnixDomainSocketConnection(基于unix域的连接), 显然,为了提升新能,ConnectionPool可以更好的复用connection,降低create和delete的开销,还有线程安全的实现 BlockingConnectionPool。
- 获取socket数据并进行命令解析的,是PythonParser和HiredisParser,读取数据,并按规定解析到相应的数据
- redis客户端: StrictRedis 和 Redis(后向兼容而设计的),提供命令接口
- PubSub : 提供redis的发布、订阅模型,def listen(self)使用了一个循环,进行监听,采用yield 生成器模型, class PubSubWorkerThread(threading.Thread):
- Pipeline : 批处理,class BasePipeline(object)、class StrictPipeline(BasePipeline, StrictRedis)(空的实现) 、class Pipeline(BasePipeline, Redis)(空的实现)
诶, 代码不是自己写的,讲起来毕竟简单(talk is cheap, show me the code),并且并没有使用例子跟进
再看一下,hiredis的实现:
dapters/: 各种网络库的redis适配,比如 redis官方的ae 、linux通用库glib、ivykis 、libev 、libuv、libevent、macosx 、qt
dict : 哈希字典, 冲突采用链址解决
net : 关于网络的函数的处理
sds : 对字符串的处理,避免了长度等耗时操作以及’\0’的截断, 看一下定义
struct sdshdr {
int len;
int free;
char buf[];
};
async :异步处理相关,像回调函数链表、redis异步连接的上下文等
read : 读取相关, redisReader 和 redisReaderTask 优化读取操作
hiredis : redisReply、 redisContext相关的连接的操作代码是工作的时候,粗粗的浏览的一下,具体的代码运行,还没有理解的很透彻,后面需要慢慢嚼。
徐建海
0 0
- 关于redis的python客户端程序
- python的redis客户端性能
- Redis的Python客户端redis-py
- Redis的Python客户端redis-py
- Redis的Python客户端redis-py
- Redis的Python客户端redis-py
- redis的python客户端redis-py
- 关于JAVA的redis客户端的实现
- redis客户端程序实例
- Redis的Python客户端redis-py安装使用说明文档
- redis☞ python客户端
- Python简单的多客户端聊天室程序
- 关于cocos2dx客户端程序的自动更新解决方案
- 关于cocos2dx客户端程序的自动更新解决方案
- 关于cocos2dx客户端程序的自动更新解决方案
- 关于cocos2dx客户端程序的自动更新解决方案
- python 上安装redis客户端
- redis python客户端(redis-py)分析
- hdoj 2087 剪花布条 【kmp(变形题)】
- ioS开发之UI基础--UIScrollView的基本使用
- Condition
- Codeforces 567E President and Roads 【最短路】
- c++primer之类(类的静态成员)
- 关于redis的python客户端程序
- Unity热更新专题(一)热更新简介
- 什么是守护线程?
- 如何高效学习
- hdu 5425 Rikka with Tree II
- 购物结算功能
- 读书笔记之UNIX环境高级编程(16)
- Centos7 使用总结
- Android学习之自定义view——TopBar