`
huangz
  • 浏览: 322085 次
  • 性别: Icon_minigender_1
  • 来自: 广东-清远
社区版块
存档分类
最新评论

OOREDIS:一个Pythonic的Redis库。

阅读更多

用Redis的朋友们应该会发现,Redis的很多客户端都只是Redis命令的一个简单包装。 

举个例子,在Redis的Python客户端redis-py中,设置一个String键的方法如下: 

 

>>> from redis import Redis 
>>> r = Redis 
>>> r.set('key_name', 'value') 


而要取得一个列表的所有元素,则要使用lrange命令: 

>>> r.lrange('list', 0, -1) 

 

这种操作方式有几个问题: 

1.大量的Redis命令聚在一起,妨碍了对客户端对象的使用。 

2.每次操作都要将将key name和命令参数(比如lrange的0和-1)显式地传入方法当中,容易出错。 

3.命令之间没有限制,可以互相覆盖而没有错误提示。 

比如你可以用set命令覆盖一个Redis列表,Redis本身不会报错。 

4.客户端没有利用到语言提供的方便机制。 

比如r.lrange('list', 0, -1)在Python中就没有for item in list语句来得直观。 

5.Redis只储存字符串值,虽然可以储存整数或浮点数,但每次取出值都要显式类型转换,很不方便。 

--- 

为了解决以上问题,更好地使用Redis,我用Python写了一个Redis库,基于redis-py,名叫ooredis。 

ooredis有以下目标: 

1.以Key对象为单位操作Redis的数据结构 


在ooredis中,Redis的函数被按类型及作用归为了一个个Python类,每个ooredis类有不同的操作。 

比如在ooredis中,将Redis的Hash类函数包裹成了Dict类型,它可以以类似Python内置dict类型的方式,操纵Redis数据。 

又比如,Redis的List类函数,在ooredis中被包裹成了List类型,它可以以类似Python内置list类型的方式,操纵Redis数据。 

如果ooredis类尝试覆盖不同类型的数据,ooredis将抛出异常。 

这样就解决了包括命名空间污染、跨类型覆盖等问题。 

2.提供一组Pythonic的API 


刚才我们说“以类型Python内置的dict类型的方式来操纵Redis的Hash类型数据“,我们还没详细说明这是什么意思。 

比如说,在ooredis中,你可以通过传给Dict类一个key name,之后就可以操纵这个Dict对象,来完成Redis中的各种命令,像这样: 

>>> form ooredis import * 
>>> project = Dict('ooredis-project') 
>>> project['name'] = 'ooredis' 
>>> project['version'] = 1.0 
>>> project['author'] = 'huangz' 


以上的语句就相当于执行Redis的命令: 

 

 

redis> HSET ooredis-poejct name ooredis 
redis> HSET ooredis-poejct  version 1.0 
redis> HSET ooredis-poejct  author huangz 


也可以用redis-py来完成上面的任务: 

>>> r.hset('ooredis-project', 'name', 'ooredis') 
>>> r.hset('ooredis-project', 'version', 1.0) 
>>> r.hset('ooredis-project', 'autohr', 'huangz) 

 
可以看到,使用Dict对象比单纯的Redis命令更直观。 

又比如在Dict对象中,你可以用Python内置类型set的全部命令:items、keys、values、pop,等等。 

>>> project.items() 
[('name', u'ooredis'), ('version', 1.0), ('author', u'huangz')] 
>>> 'version' in project 
True 
>>> project.pop('name') 
u'ooredis' 


不仅是Dict类,ooredis的所有类都大量使用了Python的魔法方法,致力于让Redis数据的操作更直观、清晰和Pythonic。 

3.提供方便的类型转换机制 


至于类型问题,ooredis通过使用传入TypeCase的方式,来对Redis数据进行类型转换。 

比如如果你需要一个只保存整数对象(int/long)类型的列表,只需要这样做就可: 

 

>>> numbers = List('numbers', type_case=IntTypeCase) 

 
如果你需要一个只接受Json对象的字典对象,只需要使用以下语句: 

>>> json_only_dict = Dict('json_dict', type_case=JsonTypeCase) 

 
其中IntTypeCase和JsonTypeCase都是ooredis默认提供的TypeCase类之一,ooredis总共提供了以下常用TypeCase:

 

  • GenericTypeCase,接受Python常量值,比如int,long,float,str和unicode。为了世界的和平与正义,传入的字符串值总被转换成unicode类型。 
  • IntTypeCase,接受int和long。 
  • FloatTypeCase,接受浮点数。 
  • StringTypeCase,接受str和unicode类型的值,而且总被转换成unicode。 
  • JsonTypeCase,接受所有可被转换成Json对象的值,比如Python的dict类型。 
  • SerializeTypeCase,使用Pickle的dumps和loads,可以对Python的class进行序列化。 

当然,除了以上的TypeCase之外,你也可以很方便地定义自己的TypeCase类,像如下代码: 

 

class MyTypeCase: 
    @staticmethod  
    def to_redis(value): 
        pass 
    @staticmethod  
    def to_python(value): 
        pass 

 

to_redis将值转换成Redis能接受的类型,to_python则将从Redis取出的数据转回原来的类型。 

--- 

好的,以上就是关于ooredis的基本介绍了,抱歉因为时间关系我不能写一篇更短的文章。 

如果你对ooredis有兴趣,可以访问以下地址,获得更多信息: 

ooredis的更详细介绍,幻灯(google docs,翻|墙): http://bit.ly/rbgn3Z  

ooredis的项目主页:项目主页


最后,祝情侣们七夕快乐,早生贵子。 

XD

分享到:
评论

相关推荐

    Python的Redis库ooredis.zip

    ooredis是一个Redis的Python库,基于redis-py,它主要有以下三个目标:  - 以Key对象为单位操作Redis的数据结构 - 提供一组Pythonic的API - 提供方便的类型转换机制  需求 ==== Python2.7Redis2.2redis-py...

    bast:一个 Pythonic 的现代 OpenGL 引擎

    韧皮 将是一个易于使用的 Pythonic 3D OpenGL 框架。 Bast 当前未处于可用状态。

    arcrest:一个Pythonic API,用于从ArcGIS Server使用REST服务

    这是一个Pythonic API,用于使用来自ArcGIS Server的REST服务。 这些是Python绑定,用于使用服务和通过其RESTful API管理ArcGIS 10.1服务器。 请注意,这些还不完整-并非所有REST API都已包装或实现。 如果您有想...

    cookiecutter-flask-pythonic:Flask的Pythonic入门样板

    "cookiecutter-flask-pythonic:Flask的Pythonic入门样板" 这个标题表明,这是一个基于Cookiecutter工具的Flask项目模板,旨在为初学者提供一个遵循Python最佳实践(Pythonic)的Flask应用起点。Pythonic指的是遵循...

    ANSYS二次开发:pyansys测试的一组结果文件rst

    这个项目最初是作为一个单独的包开始的pyansys,并且已经扩展到五个主要包: PyMAPDL:MAPDL 的 Pythonic 接口 PyAEDT : AEDT 的 Pythonic 接口 PyDPF-Core:使用数据处理框架 (DPF) 进行后处理。更复杂但更强大的后...

    qtpylib:QTPyLib,Pythonic算法交易

    QTPyLib,Pythonic算法交易 QTPyLib(QŤ的定量的PY rading马拉松库郭宝宏)是一个简单的,事件驱动的算法交易用Python编写的通过库,支持回测,以及纸张和现场交易的。 我开发QTPyLib是因为我想要一个简单但功能...

    PyPEF:PyPEF – Pythonic蛋白工程框架

    1亚琛工业大学生物技术研究所,德国沃林格·沃格3号,52074亚琛2 DWI-Leibniz互动材料研究所,德国亚琛Forckenbeckstraße50,52074 *通讯作者§平等贡献PyPEF:Pythonic蛋白工程框架一个用Python 3编写的框架,用于...

    MPh:ComsolMultiphysics:registered:的Pythonic脚本接口

    它带有一个现代的图形用户界面来设置仿真模型,可以从Matlab:registered:或通过其本机Java API编写脚本。 该库将Python缺失的强大功能带到了Comsol的世界。 它利用提供的通用Python到Java桥来访问本机API,并将其...

    PyLyricsRockAr:https的Pythonic实现

    PyLyricsJK: ://rock.com.ar/的Pythonic实现最初基于PyLyrics的实现

    prolog_relations:带有pythonic CLI的prolog中的家庭关系数据库

    在`prolog_relations`项目中,可能使用了类似的技术来创建一个友好的界面,允许用户通过简单的命令来查询和操作家庭关系数据库,例如: ```bash $ prolog_relations.py find parent john emily ``` 这将返回John的...

    结构:简单的Pythonic远程执行和部署

    Fabric是一个高级Python(2.7,3.4+)库,旨在通过SSH远程执行shell命令,从而返回有用的Python对象。 它建立在 (子过程命令执行和命令行功能)和 (SSH协议实现)的基础上,扩展了它们的API以相互补充并提供附加...

    Python库 | rkd.pythonic-2.4.1.dev161.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:rkd.pythonic-2.4.1.dev161.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    pyfaidx:高效的pythonic随机访问fasta子序列

    Samtools提供了一个函数“ faidx”(FAsta InDeX),该函数创建一个小的平面索引文件“ .fai”,从而允许快速随机访问索引的FASTA文件中的任何子序列,同时将文件中的最小量加载到内存中。 此python模块使用samtools...

    Python库 | rkd.pythonic-2.4.0.0b2.dev42.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:rkd.pythonic-2.4.0.0b2.dev42.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    Python库 | rkd.pythonic-2.4.0.0b2.dev86.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:rkd.pythonic-2.4.0.0b2.dev86.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    redistore:用于Redis的Pythonic界面

    用于Redis的简单python界面 安装 $ pip install redistore 用法 >> > import redistore >> > store = redistore . get ( host = 'localhost' , port = 6379 , db = 0 ) 现在,您可以使用类似dict的界面访问和存储...

    Bubu-Diploma-Generator:具有所有Pythonic知识的Kinnda文凭生成器

    "Bubu-Diploma-Generator" 是一个特定的项目,它使用了Python编程语言,专为创建文凭或证书设计。"Kinnda文凭生成器"表明这个工具可能模仿某种特定风格或者格式,使得生成的文凭看起来专业且符合预期的设计要求。这...

    PyPI 官网下载 | Pythonic-0.12.tar.gz

    资源"Pythonic-0.12.tar.gz"即为从PyPI官网获取的一个Python库,其版本号为0.12,通过tar.gz格式进行压缩,便于用户下载和安装。 首先,我们来探讨Pythonic这个库。在Python社区中,“Pythonic”一词通常用来形容...

    walrus-用于Redis的轻量级Python实用程序-Python开发

    walrus不会要求您学习一个新的库,而是对流行的redis-py客户端进行子类化和扩展,使其可以用作替代产品。 除了redis-py中的所有功能之外,walrus还增加了对一些较新命令的支持,包括对流和使用者组的全面支持。 海象...

    fab-classic:简单的Pythonic远程执行-Fabric 1.x的Fork

    fab-classic是Python(2.7或3.4+)库和命令行工具,用于简化SSH在应用程序部署或系统管理任务中的使用。 fab-classic是从派生的,旨在为已经以某种方式使用Fabric-1.x的项目添加仅错误修复和兼容性修补程序。 它包括...

Global site tag (gtag.js) - Google Analytics