memcached mysql缓存_memcached做数据库缓存

最近研究memcache小有成果,把经验分享出来。

白话:很早就听说memcache了,一直没搞懂,后来又看到redis很火,可以用来做缓存,研究了半天也没搞懂咋个做缓存,后来也不纠结了,继续学习python,当对python基础有一定掌握后,渐渐明白如何用redis或memcache做数据库的缓存。原理很简单,memcache和redis都是在内存开辟一堆空间,用键-》值来保存数据,在python称作字典,具体流程如此图

da98edf08c88fc4baa1c63b101a6a12b.png

当用户第一次通过web应用程序,去读取数据库,返回数据值的时候,web应用服务器会做两个动作,第一个动作,返回给用户,第二个动作会写入memcache,当第二个用户去访问相同的数据时,程序代码前添加if判断语句,如果memcache有需要的数据,直接从memcache取。

可能表达的还不够清楚,我们通过代码来测试下。我用的环境是python+django

----查询代码def sql(request):

#连接memcache

mc = memcache.Client(['127.0.0.1:1111'])

#用sql查询语句作为memcahe的键

key2 = 'select * from zuoze'

key2 = md5(key2)

#数据库查询zuoze表的数据

sql1 = "select * from zuoze"

#判断sql键有没有在memcache,就从mysql取数据,并写入memcache

if not mc.get(key2):

#import MySQLdb

#连接mysql数据库

db = MySQLdb.connect('127.0.0.1','admin','wanwan','T')

cursor = db.cursor()

cursor.execute(sql1)

#绑定sql数据到变量results

results = cursor.fetchall()

#同时把sql查询数据,写入memcache

mc.set(key2,results)

print "go mysql!!"

db.close()

return render_to_response("sql.html",{'results':results})

#直接从memcache取数据

else:

results = mc.get(key2)

print "go memcache!!!"

return render_to_response("sql.html",{'results':results})

----更新缓存的两种办法,转至论坛高手的回答:

{常规做法有两种:1.数据有改变则在更新数据库的同时更新memcache2.数据有改变则数据库有一个字段来标识更新时间,例如update_time。当有查询时候,把memcache里的update_time与数据库的update_time比较。如果发生变化则更新memcache超期时间设置,应根据数据访问的频繁度和内存大小来权衡一下。memcache内存申请后,映像中不会被释放。它是通过 如果有一部分数据超时,则新写入的数据覆盖超时数据来完成重复使用的。那么理论上来讲,内存使用情况是数据被memcache占用最多的那一刻!}

---实验用的第一种。def upsql(request):

if request.method == 'POST':

xing = request.POST.get('xing',None)

name = request.POST.get('name',None)

mail = request.POST.get('email',None)

shuji_id = request.POST.get('mail',None)

db = MySQLdb.connect('127.0.0.1','admin','wanwan','T')

cursor = db.cursor()

sql = "insert into zuoze(id,xing,name,email,shuji_id) values ('','%s','%s','%s','%s')" % (xing,name,mail,shuji_id)

cursor.execute(sql)

db.commit()

#插入数据或更新数据后,重新更新memcache数据

mc = memcache.Client(['127.0.0.1:1111'])

key2 = 'select * from zuoze'

key3 = md5(key2)

cursor.execute(key2)

results = cursor.fetchall()

mc.set(key3,results)

db.close()

return HttpResponse('ok!')

return render_to_response("upsql.html")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/303524.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

掌握Python爬虫基础,仅需1小时!

随着互联网的发展,google、百度等搜索引擎让我们获取信息愈加方便。但需求总会不断涌现,纯粹地借助百度等收集信息是远远不够的,因此编写爬虫爬取信息的重要性就越发凸显。比如有人为了炒股,专门爬取了多种股票信息;也…

我看ITIL在中国(六):如何建立有中国特色的IT运维管理平台【二】

在开始筹划建设有“中国特色的IT运维管理平台”之前,先来看看我们目前面临的情况: 随着信息化建设的不断深入,各种企业的核心业务都逐步地迁移到IT平台上来,对IT管理的要求也越来越高,IT需要管理,向IT管理要…

史上首次!世界杯使用视频裁判

2018年6月16日18时,法国队在喀山中央球场迎来了他们本届世界杯的首场比赛,对手是澳大利亚队。比赛进行到第56分钟,格列兹曼接到队友的直塞球,单刀杀入禁区,澳大利亚后卫里斯登铲球,但并没有碰到皮球&#x…

二分查找和折半插入排序一块说说-很合适~~~

前言上一篇在聊时间复杂度和空间复杂度时,没有按指定格式显示(明明预览的时候没问题的),强迫症的我稍微优化了一下重新发布,目的就是让小伙伴看着舒服。上次聊到的直接插入排序在比较有序数据和待插入数据时,是通过依次遍历的方式…

用Python更加了解微信好友

用了微信几年了,微信号有也不少了,但是真正了解自己的好友吗?好友最多的城市是哪个?好友男女比例是多少?好友签名都是什么?今天我们来充分了解自己的微信好友。运行平台: Windows Python版本&a…

Linux下配置DNS

Linux下配置DNS一、配置环境1.Linux操作系统版本:RedHat AS 52.网络环境设置:IP:192.168.1.1 NetMark:255.255.255.0 Getway:192.168.1.13.软件包的准备:1)bind-9.3.3-7.el5.i386.rpm …

python用pandas提取行列_python- pandas 不删除符合条件的行和列

我正在尝试建立一个回归模型,以便根据出现的单词来预测收视率(1-5)(回归本身并不一定表现良好,更多的是关于所采用的方法).我使用以下代码创建了一个词频矩阵:bow df.Review2.str.split().apply(pd.Series.value_counts)看起来像这样:我现在有兴趣删除在…

中国宜坚持发展自主操作系统

一直以来,我国IT产业存在“缺芯少魂”的问题,芯指的是芯片,魂指的是操作系统。操作系统是连接硬件和应用软件的媒介和桥梁。如果无法在操作系统方面实现安全可控,整个信息安全就无从谈起,而恰恰当下国内桌面操作系统市…

老板啥都懂,还天天套路我?!

今天我被老板叫到办公室进行了一场“推心置腹”的对话▼来源:特大号文章版权归原作者所有,转载仅供学习使用,不用于任何商业用途,如有侵权请留言联系删除,感谢合作。

如何提高电脑办公效能

其实你只要花一点点的时间,就可以使你的生活变得更好。在电脑办公上,记忆几个快捷键、安装一些实用的软件等绝对会让你的效率翻倍! 在此弥缝分享几条我常常使用到的技巧和软件: 熟练一些快捷键 熟练的快捷键越多,做事越…

BeetleX.Http.Clients访问https服务

最近在做数据分析平台,那在做这个产品的时最需要的自然是测试数据,自己去构建行业测试数据比较麻烦,看到有同行产品的演示数据当然不能错过。由于采集过程中使用到BeetleX.Http.Clients去抓取第三方的Https接口数据,所以顺便记录一…

这一次,用数据解读玩家行为,用实力拿下预测大奖!

如今,大数据落地应用已十分广泛,除了政务、金融、医疗、旅游等传统行业外,在游戏行业中的应用也逐渐受人瞩目。那么,当大数据遇上游戏产业,会产生哪些变革和创新呢?众所周知,全球游戏市场规模庞…

如何在 C# 中使用隐式和显式操作符

C# 有一个鲜为人知的特性是通过定义 显式和隐式操作符 实现类型之间的转换,这篇文章我们将会讨论如何使用这些 显式 和 隐式 操作符。什么是显式,什么是隐式 隐式类型转换 它是运行时自动帮你完成的,言外之意就是你不需要人为干预&#xff0c…

SUSE10下配置FTP服务

SUSE10 liuux下配置FTP和SUSE9有不同之处,大家请注意。下面为SUSE10下ftp服务配置具体步骤。 Linux 系统安装完成后,默认不会开启FTP 服务,需要在yast界面下进行手动启动: 说明:如果未安装FTP 包,则需要先行安装FTP 软…

java gzip 解压文件_Java实现文件压缩与解压[zip格式,gzip格式]

原文:http://www.cnblogs.com/visec479/p/4112881.html#3069573Java实现ZIP的解压与压缩功能基本都是使用了Java的多肽和递归技术,可以对单个文件和任意级联文件夹进行压缩和解压,对于一些初学者来说是个很不错的实例。zip扮演着归档和压缩两…

来看一场 AI 重建的 3D 全息世界杯比赛!

世界杯来了!央视名嘴白岩松调侃 “俄罗斯世界杯,中国除了足球队没去,其他的都去了”,这届世界杯,中国球迷购买球票的数量在所有国家中排名第 9,可见球迷对世界杯的热情。那么,除了准备好小龙虾在…

编译Linux 2.6内核

编译内核易如反掌。让人叹为观止的是,这实际上比编译和安装像glibc这样的系统级组伴还要简单。2.6内核提供了一套新工具,使编译内核更加容易,比早期发布的内核有了长足的进步。 2.3.1 配置内核 因为Linux源码随手可得,那就意味着在…

获取父线程 java_java子线程中获取父线程的threadLocal中的值

我们都知道线程本地变量表也就是ThreadLocal在我们做线程级的数据隔离时非常好用,但是有时候我们会想如何让子线程获取到父线程的ThreadLocal,其实在线程中除了ThreadLocal外还有InheritableThreadLocal,顾名思义,可继承的线程变量…

源码分享,送你一份Google Python class源码

几年前,Google推出Python课堂。Google Python课堂:https://developers.google.com/edu/python/小编也整理了一下Google Python课堂的源码,里面有四个例子。logpuzzle这个例子主要是利用urllib模块做一个图片拼接的小游戏,主要是从一大堆的网页里面解析分…

用YARP当网关

Yarp是微软开源的一个用.net实现的反向代理工具包,github库就叫reverse-proxy(反向代理)(吐槽一下微软起名字233333)nuget包preview9之前都叫Microsoft.ReverseProxy,preview10变成Yarp.ReverseProxy了放上…