Redis学习笔记~关于空间换时间的查询案例

回到目录空间与时间空间换时间是在数据库中经常出现的术语,简单说就是把查询需要的条件进行索引的存储,然后查询时为O(1)的时间复杂度来快速获取数据,从而达到了使用空间存储来换快速的时间响应!对于redis这个k/v存储系统来说,复杂的查询不是它所建议的,它的优势在于通过key快速定位数据,它定位数据的速度与数据多少没有直接关系,无论是1万还是1亿数据,它定位的时间复杂度都是O(1),而在实际使用中,可能不简单使用key定位数据就够了,可能还需要数据里的某个属性去定位数据,这种情况第一感觉不能用redis,或者说,不能用k/v存储系统了,但这不是我们应该说的,我们要的是解决方案,换个角度去思考,我们是否可以把那个属性拿出来当新的key,把原来的key当作它的value呢,答案是肯定的,这就是用空间到换时间,只需要两个查询就可以搞定了!上面是一个100万的hash集合,key是用户id,value是一个用户实体,我们通过RedisClient.RedisManager.Instance.GetDatabase().HashGet("VoteList",id)很方便的可以拿到对应的用户实体!我...

urlretrieve关于循环下载的一个案例

#-*-coding:cp936-*-#python27#xiaodeng#urlretrieve关于循环下载的一个案例importurllibdefdown_list(stock_list):#传入list!!!forsidinstock_list:url='http://table.finance.yahoo.com/table.csv?s='+sidfname=sid+'.csv''''文件的格式是一种,属于纯文本文件注意,for循环和url的相对位置注意def函数传入的一个list数据'''print'download%sform%s'%(fname,url)urllib.urlretrieve(url,fname)if__name__=='__main__':stock_list=['300001.sz','300002.sz']down_list(stock_list)#返回结果:'''>>>download300001.sz.csvformhttp://table.finance.yahoo.com/table.csv?s=300001.szdownlo...

python模块之HTMLParser之穆雪峰的案例(理解其用法原理)

#-*-coding:utf-8-*-#python27#xiaodeng#python模块之HTMLParser之穆雪峰的案例(理解其用法原理)#http://www.cnblogs.com/xiaowuyi/archive/2012/10/15/2721658.html#常见做法:首先,我们需要定义一个新的HTMLParser类,以覆盖handle_starttag()方法,我们将使用这个方法来显示所有标签的HRef属性值。fromHTMLParserimportHTMLParserclassMyHTMLParser(HTMLParser):defhandle_starttag(self,tag,attrs):#print('<开始标签:%s>'%tag)#print'---------someimg--------'iftag=='img':#printattrs#[('src','python-logo.png'),('alt','ThePythonlogo')]fork,vinattrs:printk,velse:passdefhandle_endtag(self...

新浪API及调用案例

百度分享:http://pan.baidu.com/s/1uSmku...
代码星球 代码星球·2020-07-14

性感女神图片爬虫

#-*-coding:utf-8-*-#python27#xiaodeng#性感女神图片爬虫importurllib,urllib2,jsonurl='http://apis.baidu.com/dajuncloud/goddess/goddesses?'#注意?号不要漏掉data={'tuid':12}#12表示查询序号为12的值data=urllib.urlencode(data)MyUrl=url+data#拼接url地址req=urllib2.Request(MyUrl)#要用urllib2,urllib没有Request方法#我的apikey#请求参数(header)req.add_header('apikey','75ea5c11d0461f15791c1398a05369b7')resp=urllib2.urlopen(req)#要用urllib2content=resp.read()content=json.loads(content)forkeyincontent:printkey,':',content[key] ...
代码星球 代码星球·2020-07-14

一个关于类的案例

#-*-coding:utf-8-*-#python27#xiaodeng#http://blog.chinaunix.net/uid-22521242-id-4081674.html#一个关于类的案例classPeople():#定义基本属性name=''age=0#定义私有属性,私有属性无法在类的外部直接访问__weight=0#定义构造方法def__init__(self,n,a,w):self.name=nself.age=aself.__weight=wdefspeak(self):printself.name,self.ageif__name__=='__main__':p=People('xiaodeng',28,150)p.speak()#xiaodeng28 ...
代码星球 代码星球·2020-07-14

面向对象编程案例04--访问控制

#-*-coding:utf-8-*-#python27#xiaodeng#面向对象编程案例04--访问控制#如果要让内部属性不被外部所访问,怎么做?#在属性的名称前加上两个下划线__即可,在python中,实例变量名下面如果加上__开头,就变成了一个私有变量private#只有内部可以访问,而外部不能去访问#demo#01classStudent():def__init__(self,name,age):self.__name=nameself.__age=agedefprintAge(self):print'%s:%s'%(self.__name,self.__age)if__name__=="__main__":bart=Student('xiaodeng',28)#外部的代码不能随意修改对象内部的状态,这样通过访问限制的保护、代码更加健壮#bart.__name#出现错误无法访问私有属性bart.printAge()#02#如果获得__name属性呢?给Student类新增getName和getAge方法##############修改上面的案例################...

面向对象编程案例03---继承之高级部分

#-*-coding:utf-8-*-#python27#xiaodeng#file:BaseModelTest.py#模块名classBaseClass():def__init__(self,name,age):self.name=nameself.age=age#print'__init__()'defspeak(self,name):print'baseclassisspeak:%s'%self.nameif__name__=="__main__":b=BaseClass("xiaodeng",28)b.speak("python")  #-*-coding:utf-8-*-#python27#xiaodeng#面向对象编程案例03---继承之高级部分#http://www.cnblogs.com/Joans/archive/2012/11/09/2757368.html#类和对象面向对象编程的两个方面。类创建一个实例,对象就是这个类的实例#初始化方法__init__可以理解为构造,有点类似于java的this#继承:面向对象编程带来的好处之一就是代码的重...

python 面向对象编程案例01

#-*-coding:utf-8-*-#python27#xiaodeng#面向对象编程案例01classBehave():def__init__(self,name):self.name=namedefonce(self):print"self.name-->",self.namedefrename(self,newName):#重新赋值属性的def方法self.name=newNamedefrepeat(self,N):#repeat-重复#新创建一个方法,其中调用once方法foriinrange(N):self.once()#beehive=Behave("xiaodeng")beehive.repeat(4)beehive.rename("FengMei")beehive.once()printbeehive.name#点号后面可以接属性名或方法名()均可#重复赋值属性beehive.name="Ilovechina"beehive.once()#返回值有一个None,原因是once构造函数只有print没有return语句#类的自带方法#__len__printbee...

js 中对于this 的理解的 经典案例

functionFoo(){getName=function(){console.log(1);};returnthis;}Foo.getName=function(){console.log(2);};Foo.prototype.getName=function(){console.log(3);};vargetName=function(){console.log(4);};functiongetName(){console.log(5);}Foo.getName();//2getName();//4Foo().getName();//1getName();//1newFoo.getName();//2newFoo().getName();//3newnewFoo().getName();//3 ...

UserAgent判断浏览器类型或爬虫类型

###浏览器-------------------------------IEMozilla/4.0(compatible;MSIE8.0;WindowsNT6.1;WOW64;Trident/4.0;SLCC2;.NETCLR2.0.50727;.NETCLR3.5.30729;.NETCLR3.0.30729;MediaCenterPC6.0;.NET4.0C;.NET4.0E;InfoPath.3)-ChromeMozilla/5.0(WindowsNT6.1;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/55.0.2883.87Safari/537.36Mozilla/5.0(Linux;Android6.0.1;Nexus5XBuild/MMB29P)AppleWebKit/537.36(KHTML,likeGecko)Chrome/41.0.2272.96MobileSafari/537.36-FirefoxMozilla/5.0(WindowsNT10.0;WOW64;rv:51.0)Gecko/20100101Firef...

MYSQL CASE用法及案例

表数据案例演示SELECTpay_method,card_type_id,CASEcard_type_idWHEN'135'THEN"微信"WHEN'175'THEN'支付宝'WHEN'1'THEN'中金'WHEN'2'THEN'建行'ELSE'未知'END支付方式FROM`payment_method`查询结果...
开发笔记 开发笔记·2020-07-12

Python 用Redis简单实现分布式爬虫

Redis通常被认为是一种持久化的存储器关键字-值型存储,可以用于几台机子之间的数据共享平台。连接数据库 注意:假设现有几台在同一局域网内的机器分别为Master和几个Slaver Master连接时host为localhost即本机的ip_db=redis.Reds(host='localhost',port=6379,db=0)Slaver连接时的host也为Master的ip,端口port和数据库db不写时为默认值6379、0_db=redis.Redis(host='192.168.235.80')Redis含列表、集合,字符串等几种数据结构,具体详细的几种数据结构的操作命令可查看Redis官网http://redis.io/commands,下面是对集合进行操作的一些命令_db.sadd(key,*values)#插入指定values到集合中并返回新插入的的值的数量_db.spop(self.key)#随机从集合中的得到一个元素将其从集合中删除并作为返回值返回_db.smembers(self.key)#返回集合的所有元素_db.delete(key)#删...

五十一 Python分布式爬虫打造搜索引擎Scrapy精讲—scrapyd部署scrapy项目

scrapyd模块是专门用于部署scrapy项目的,可以部署和管理scrapy项目下载地址:https://github.com/scrapy/scrapyd建议安装pip3installscrapyd首先安装scrapyd模块,安装后在Python的安装目录下的Scripts文件夹里会生成scrapyd.exe启动文件,如果这个文件存在说明安装成功,我们就可以执行命令了启动scrapyd服务在命令输入:scrapyd如图说明启动成功,关闭或者退出命令窗口,因为我们正真的使用是在指定的启动目录下启动服务的 指定启动服务目录后启动服务重新打开命令,cd进入要指定服务的目录后,执行命令scrapyd启动服务此时可以看到启动目录里生成了dbs目录 dbs目录里是空的什么都没有  此时我们需要安装scrapyd-client模块scrapyd-client模块是专门打包scrapy爬虫项目到scrapyd服务中的下载目录:https://github.com/scrapy/scrapyd-client建议安装pip3installscrapyd-clie...

五十 Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)用Django实现我的搜索以及热门搜索

第三百七十一节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)用Django实现我的搜索以及热门 我的搜素简单实现原理我们可以用js来实现,首先用js获取到输入的搜索词设置一个数组里存放搜素词,判断搜索词在数组里是否存在如果存在删除原来的词,重新将新词放在数组最前面如果不存在直接将新词放在数组最前面即可,然后循环数组显示结果即可热门搜索实现原理,当用户搜索一个词时,可以保存到数据库,然后记录搜索次数,利用redis缓存搜索次数最到的词,过一段时间更新一下缓存 备注:Django结合Scrapy的开源项目可以学习一下django-dynamic-scraperhttps://github.com/holgerd77/django-dynamic-scraper 补充默认的elasticsearch(搜索引擎)只能搜索1万条数据,在大就会报错了设置方法步骤一:打开项目的索引库地址,将该索引先关闭,否则设置操步骤二无法提交步骤二:打开复合查询,填入如下信息,记得选择PUT方式提交,credit_trace_...
首页上一页...1819202122...下一页尾页