|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
欢迎大家来到仓酷云论坛!1.装置redis
1.1、预备部门:
甚么是redis?
Redis是REmoteDIctionaryServer的缩写。一个非关系型数据库
为何要用redis?
1,由于redis快,Redisisprettyfast!,110000SETs/second,81000GETs/second
2,省去了庞杂的SQL。
3,可以省去memcache了。
1.2、下载,解压和编译:
- $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.4、衔接Redis
你可以用内置客户端衔接Redis:- $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类的数据- >>person=Person(name="hupu")
复制代码 由于name是必填字段所以必需要给
然后挪用save办法就存储到redis里去了。
前往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教程讲得好,请记得点击右边漂浮的分享程序,把好文章分享给你的小伙伴们! |
|