仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 524|回复: 8
打印 上一主题 下一主题

[CentOS(社区)] 给大家带来python经由过程redis-py,redisco操作redis

[复制链接]
若相依 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-14 20:47:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
欢迎大家来到仓酷云论坛!1.装置redis



1.1、预备部门:

甚么是redis?
Redis是REmoteDIctionaryServer的缩写。一个非关系型数据库
为何要用redis?
1,由于redis快,Redisisprettyfast!,110000SETs/second,81000GETs/second
2,省去了庞杂的SQL。
3,可以省去memcache了。


1.2、下载,解压和编译:


  1. $wgethttp://redis.谷歌code.com/files/redis-2.6.13.tar.gz$tarxzfredis-2.6.13.tar.gz$cdredis-2.6.13$make
复制代码
为何没用尺度的Linux装置三板斧呢?官方维基是如许说的:Rediscanrunjustfinewithoutaconfigurationfile(whenexecutedwithoutaconfigfileastandardconfigurationisused).WiththedefaultconfigurationRediswilllogtothestandardoutputsoyoucancheckwhathappens.Later,youcanchangethedefaultsettings.
1.3、运转redis


编译的可履行文件在src目次中,应用以下敕令运转Redis:
  1. $src/redis-server
复制代码


1.4、衔接Redis


你可以用内置客户端衔接Redis:
  1. $src/redis-cliredis>setfoobarOKredis>getfoo"bar"
复制代码
1.5、设置装备摆设redis



在运转redis前,我们要设置装备摆设一下。redis的设置装备摆设文件在你的装置目次里。名为:redis.conf。
简略说几点redis.conf:
redis默许不是用守护过程的,假如须要更改,把daemonizeno改成daemonizeyes。(测试的时刻可以不改,看看打印信息。)
假如对redis默许6379端口不爽的,可以更改port6379
假如想把数据文件放到一个指定文件夹,更改dir/opt/data/
默许是dir./也就是默许放到装置目次下。
衔接超不时间,timeout300,没甚么改头……
dir是数据文件路径。默许在装置目次下。
*上面的设置装备摆设二选一,详见本文正文部门2。
######SNAPSHOTTING######内存快照方法:
默许的内存快照战略是,
在900秒(15分钟)内,至多有1次数据变革;
或许300秒内,有至多10次数据变革;
或许60秒内,有至多1000次数据变革;时光+数据变革次数,配合影响内存快照的涌现。
######APPENDONLYMODE######AOF方法
appendfsynceverysec每秒同步。这里可以正文失落,翻开上面的选项appendfsyncno
其他的设置装备摆设,conf外面的正文写的挺清晰,我就不多空话了。人人看着本身配就好了。
正文:
▲redis的默许端标语是6379,(据redis的作者antirez的博文说,6379在是手机按键上MERZ对应的号码,而MERZ取自意年夜利女乐AlessiaMerz的名字。而MERZ历久以来被antirez及其同伙看成愚昧的代名词。)
▲Redis有两种存储方法,默许是snapshot方法,完成办法是准时将内存的快照(snapshot)耐久化到硬盘,这类办法缺陷是耐久化之后假如涌现crash则会丧失一段数据。是以在完善主义者的推进下作者增长了aof方法。aof即appendonlymode,在写入内存数据的同时将操作敕令保留到日记文件。
参考:
nosql发热友集散地:
http://blog.nosqlfan.com
redis熟悉的几个误区:
http://blog.nosqlfan.com/html/868.html
自创:
http://shopscor.javaeye.com/blog/792817


2.装置redis-py



运转
翻开Python说明器:
>>>importredis
>>>r=redis.Redis(host=localhost,port=6379,db=0)#假如设置了暗码,就加上password=暗码
>>>r.set(foo,bar)#或许写成r[foo]=bar
True
>>>r.get(foo)
bar
>>>r.delete(foo)
True
>>>r.dbsize()#库里有若干key,若干条数据
0
>>>r[test]=OK!

>>>r.save()#强行把数据库保留到硬盘。保留时壅塞
True

--------------------------------
>>>r.flushdb()#删除以后数据库的一切数据
True

>>>a=r.get(chang)
>>>a#由于是Noen对象,甚么也不显示!
>>>dir(a)
[__class__,__delattr__,__doc__,__format__,__getattribute__,__hash__,__init__,__new__,__reduce__,__reduce_ex__,__repr__,__setattr__,__sizeof__,__str__,__subclasshook__]

>>>r.exists(chang)#看能否存在这个键值
False

>>>r.keys()#列出一切键值。(这时候候曾经存了4个了)
[aaa,test,bbb,key1]


importredis

r=redis.Redis(host=’localhost’,port=6379,db=0)

r[test]=‘test’#或许可以r.set(‘test’,‘test’)设置key

r.get(‘test’)#获得test的值

r.delete(‘test’)#删除这个key

r.flushdb()#清空数据库

r.keys()#列出一切key

r.exists(‘test’)#检测这个key能否存在

r.dbsize()#数据库中若干个条数


附注A:
来看一下redis.Redis的init()函数界说:
__init__(self,host=localhost,port=6379,db=0,password=None,socket_timeout=None,connection_pool=None,charset=utf-
8,errors=strict,decode_responses=False,unix_socket_path=None)

最新的redis2.6.0参加了衔接池,详细用法可以看做者博客。

附注B:
其他敕令API,请参照redis-Python作者的博客,写的挺清晰了:
https://github.com/andymccurdy/redis-py


3.redisco

redisco:
1)纯pyhton开辟而成,你可以直接看它的源码(github地址:https://github.com/iamteem/redisco).
2)带有redis的一切功效,由于它是基于redis这个官方的库上开辟而成的.
3)可以以django自带orm的方法将数据存入redis,而且供给了年夜多半和django的orm雷同的查询功效.




其实我重要就是要引见下面的第三点,redisco的model(django里也叫知名字)类,它供给的这类能让数据以相似python外部的dict或许class的情势存储到redis里,如许我们对redis的应用就接近nosql数据库了(由于redis自带耐久化存储的功效)。


手把手教程典范教程开端:


创立一个你要存进redis的模子,你可以懂得为是mysql里的表,须要继续models.Model类


Python代码



  • fromrediscoimportmodels
  • classPerson(models.Model):
  • name=models.Attribute(required=True)
  • created_at=models.DateTimeField(auto_now_add=True)
  • fave_colors=models.ListField(str)

类外面支撑的一切数据类型以下:


ModelAttributes


AttributeStoresunicodestrings.Ifusedforlargebodiesoftext,turnindexingofthisfieldoffbysettingindexed=True.IntegerFieldStoresanint.Intsarestringifiedusingunicode()beforesavingtoRedis.CounterAnIntegerFieldthatcanonlybeaccessedviaModel.incrandModel.decr.DateTimeFieldCanstoreaDateTimeobject.SavedintheRedisstoreasafloat.DateFieldCanstoreaDateobject.SavedinRedisasafloat.FloatFieldCanstorefloats.BooleanFieldCanstorebools.SavedinRedisas1sand0s.ReferenceField可以援用其他的model.Model类,好比可以在一个通信录类里增长一个字段它的类型是人物这个类他们都继续model.Model类但可以相互援用如许你就能够直接经由过程通信录.人物如许的方法挪用(以后的文章会具体引见)ListField列表类型,应用跟python的list一样可以将python里的unicode,int,float和其他redisco.model类放出来生成一个Person类的数据
  1. >>person=Person(name="hupu")
复制代码
由于name是必填字段所以必需要给


然后挪用save办法就存储到redis里去了。

  1. >>person.save()
复制代码
  1. True
复制代码
前往True就是胜利了。




查询方才存出来的数据,跟django的orm真的很像
>>conchita=Person.objects.filter(name=hupu)[0]


查询一切的Person
>>all_person=Person.objects.all()


查询age年夜于某5岁


>>all_person=Person.objects.zfilter(age__gt=5)小于就是字段名__lt规模就是字段名__in=(0,5)


查询规模的都是一个list别忘了[0]来取得一个成果


最初提一点,redisco.model.Model类存储数据时,关于除Counter类型之外的一切类型字段有更改好比person.age=5将年纪改成5都要挪用person.save()办法能力更改胜利。




更多的功效可以看它的测试代码里的例子https://github.com/iamteem/redisco/blob/master/tests/models.py和https://github.com/iamteem/redisco首页的文档。

4.test

在Python下普通应用redis-py,或许在此基本上的redisco;
测试情况:
在100Mb/s局域网
办事器:redis2.4rc8/rhel6.0
客户端:Python2.7.2/Win7
0101importdatetime
0202
0303deftest1(string):
0404importredis
0505r=redis.StrictRedis(host=211.69.*,port=6379,db=1)
0606now=datetime.datetime.now()
0707foriinrange(0,10000):
0808r.set(i,string)
0909printdatetime.datetime.now()-now
1010
1111deftest2(string):
1212importredisco
1313fromredisco.containersimportHash,List,SortedSet,Set
1414r=redisco.connection_setup(host=211.69.*,port=6379,db=1)
1515h=Hash("h")
1616now=datetime.datetime.now()
1717foriinrange(0,10000):
1818h=string
1919printdatetime.datetime.now()-now
2020
2121if__name__=="__main__":
2222string="0"
2323test1(string)
2424test2(string)







成果:CPU不是瓶颈,年夜约1000写操作/s,比传输中的10W差的远了,看来收集IO是不小的瓶颈。并且不在于传输的数据量,而在于操作次数


redis设置装备摆设


上面是抄过去的设置装备摆设说明:
redis.conf设置装备摆设选项以下:

daemonize能否今后台过程运转,默许为no
pidfile如今后台过程运转,则需指定一个pid,默许为/var/run/redis.pid
bind绑定主机IP,默许值为127.0.0.1(正文)
port监听端口,默许为6379
timeout超不时间,默许为300(秒)
loglevel日记记载品级,有4个可选值,debug,verbose(默许值),notice,warning
logfile日记记载方法,默许值为stdout
databases可用数据库数,默许值为16,默许数据库为0
save<seconds><changes>指出在多长时光内,有若干次更新操作,就将数据同步到数据文件。这个可以多个前提合营,好比默许设置装备摆设文件中的设置,就设置了三个前提。
save9001

900秒(15分钟)内至多有1个key被转变
save30010300秒(5分钟)内至多有300个key被转变
save601000060秒内至多有10000个key被转变
rdbcompression存储至当地数据库时能否紧缩数据,默许为yes
dbfilename当地数据库文件名,默许值为dump.rdb
dir当地数据库寄存路径,默许值为./
slaveof<masterip><masterport>当本机为从办事时,设置主办事的IP及端口(正文)
masterauth<master-password>当本机为从办事时,设置主办事的衔接暗码(正文)
requirepass衔接暗码(正文)
maxclients最年夜客户端衔接数,默许不限制(正文)
maxmemory<bytes>设置最年夜内存,到达最年夜内存设置后,Redis会先测验考试消除已到期或行将到期的Key,当此办法处置后,任达到最年夜内存设置,将没法再停止写入操作。(正文)
appendonly能否在每次更新操作落后行日记记载,假如不开启,能够会在断电时招致一段时光内的数据丧失。由于redis自己同步数据文件是按下面save前提来同步的,所以有的数据会在一段时光内只存在于内存中。默许值为no
appendfilename更新日记文件名,默许值为appendonly.aof(正文)
appendfsync更新日记前提,共有3个可选值。no表现等操作体系停止数据缓存同步到磁盘,always表现每次更新操作背工动挪用fsync()将数据写到磁盘,everysec表现每秒同步一次(默许值)。
vm-enabled能否应用虚拟内存,默许值为no
vm-swap-file虚拟内存文件路径,默许值为/tmp/redis.swap,弗成多个Redis实例同享
vm-max-memory将一切年夜于vm-max-memory的数据存入虚拟内存,不管vm-max-memory设置多小,一切索引数据都是内存存储的(Redis的索引数据就是keys),也就是说,当vm-max-memory设置为0的时刻,实际上是一切value都存在于磁盘。默许值为0。

#当dump.rdb数据库的时刻能否紧缩数据对象
rdbcompressionyes
#dump数据库的数据保留的文件名
dbfilenamedump.rdb
#Redis的任务目次
dir/var/lib/redis/
###########Replication#####################
#Redis的复制设置装备摆设
#slaveof<masterip><masterport>
#masterauth<master-password>

##############SECURITY###########
#requirepassfoobared

###############LIMITS##############
#最年夜客户端衔接数
#maxclients128
#最年夜内存应用率
#maxmemory<bytes>

##########APPENDONLYFILEMODE#########
#能否开启日记功效
appendonlyno
#刷新日记到disk的规矩
#appendfsyncalways
appendfsynceverysec
#appendfsyncno
################VIRTUALMEMORY###########
#能否开启VM功效
vm-enabledno
#vm-enabledyes
vm-swap-filelogs/redis.swap
vm-max-memory0
vm-page-size32
vm-pages134217728
vm-max-threads4
#############ADVANCEDCONFIG###############
glueoutputbufyes
hash-max-zipmap-entries64
hash-max-zipmap-value512
#能否重置Hash表
activerehashingyes

Redis官方文档对VM的应用提出了一些建议:当你的key很小而value很年夜时,应用VM的后果会比拟好.由于如许勤俭的内存比拟年夜.当你的key不小时,可以斟酌应用一些异常办法将很年夜的key酿成很年夜的value,好比你可以斟酌将key,value组分解一个新的value.最好应用linuxext3等对稀少文件支撑比拟好的文件体系保留你的swap文件.vm-max-threads这个参数,可以设置拜访swap文件的线程数,设置最好不要跨越机械的核数.假如设置为0,那末一切对swap文件的操作都是串行的.能够会形成比拟长时光的延迟,然则对数据完全性有很好的包管.



如果您觉得本篇CentOSLinux教程讲得好,请记得点击右边漂浮的分享程序,把好文章分享给你的小伙伴们!
只想知道 该用户已被删除
沙发
发表于 2015-1-16 23:01:15 | 只看该作者

给大家带来python经由过程redis-py,redisco操作redis

然我们对Linux的学习首先是通过对它的产生,发展,到今天仍然在不断完善开始的。
小魔女 该用户已被删除
板凳
发表于 2015-1-24 22:01:41 | 只看该作者
甚至目前许多应用软件都是基于它的。可是没有哪一个系统是十分完美的。
深爱那片海 该用户已被删除
地板
发表于 2015-2-2 15:57:29 | 只看该作者
永中office 2004增强版安装只需要默认安装即可使用并操作大多与win系统雷同,打印机的配置和管理,记录光盘等。
5#
发表于 2015-2-8 03:52:27 | 只看该作者
众所周知,目前windows操作系统是主流,在以后相当长的时间内不会有太大的改变,其方便友好的图形界面吸引了众多的用户。
海妖 该用户已被删除
6#
发表于 2015-2-24 18:38:16 | 只看该作者
当然你不需搭建所有服务,可以慢慢来。自己多动手,不要非等着别人帮你解决问题。
活着的死人 该用户已被删除
7#
发表于 2015-3-7 15:52:08 | 只看该作者
学习Linux,应该怎样学,主要学些什么,一位Linux热心学习者,一段学习Linux的风云经验,历时十二个小时的思考总结,近十位网络Linux学习者权威肯定,为您学习Linux指明方向。
兰色精灵 该用户已被删除
8#
发表于 2015-3-15 12:43:35 | 只看该作者
安装一个新的软件时先看README,再看INSTALL然后看FAQ,最后才动手安装,这样遇到问题就知道为什么。如果Linux说明文档不看,结果出了问题再去论坛来找答案反而浪费时间。
admin 该用户已被删除
9#
发表于 2015-3-22 02:11:14 | 只看该作者
对我们学习操作系统有很大的帮助,加深我们对OS的理解。?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 21:52

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表