[{"data":1,"prerenderedAt":70},["ShallowReactive",2],{"article-95":3},{"code":4,"msg":5,"data":6,"count":14},200,"查询成功",{"id":7,"title":8,"keywords":9,"description":10,"category_id":11,"content":12,"body_html":13,"thumb_up":14,"clicks":15,"sort":14,"remark":16,"status":17,"is_open":17,"is_deleted":14,"is_top":14,"is_recommend":14,"create_time":18,"update_time":19,"image_id":20,"url":13,"member_id":14,"cate_name":21,"prev":22,"next":25,"tags":28,"words":40,"read_time":41,"comments":42,"cover":43,"relevant":44},95,"Django启用memcache缓存","Django,Memcache,Python,缓存,优化","在动态网站中,用户所有的请求,服务器都会去数据库中进行相应的增,删,查,改,渲染模板,执行业务逻辑,最后生成用户看到的页面.当一个网站的用户访问量很大的时候,每一次的的后台操作,都会消耗很多的服务端资源,所以必须使用缓存来减轻后端服务器的压力.",5,"\n在动态网站中,用户所有的请求,服务器都会去数据库中进行相应的增,删,查,改,渲染模板,执行业务逻辑,最后生成用户看到的页面.\n\n当一个网站的用户访问量很大的时候,每一次的的后台操作,都会消耗很多的服务端资源,所以必须使用缓存来减轻后端服务器的压力.\n\n缓存是将一些常用的数据保存内存或者memcache中,在一定的时间内有人来访问这些数据时,则不再去执行数据库及渲染等操作,而是直接从内存或memcache的缓存中去取得数据,然后返回给用户.\n\n##### 一、安装memcache\n\n1、win环境安装\n\n下载地址\n\n```bash\n#win32：\nhttp:\u002F\u002Fdownloads.northscale.com\u002Fmemcached-win32-1.4.4-14.zip\n#win64：\nhttp:\u002F\u002Fdownloads.northscale.com\u002Fmemcached-win64-1.4.4-14.zip\n#windows中memcached在1.4.5之前是可以被作为一个服务来运行的，但在1.4.5之后就不可以了，需要设置定时任务来启动。我们使用的是1.4.4版本。\n```\n\n 将下载的压缩包解压到指定的文件夹中以管理员的身份打开命令行，在命令行中执行\n\n```bash\nmemcached.exe -d install\n```\n\n 然后计算机服务中，找到memcached，启动。 \n\n2、Linux安装\n\nlinux安装直接执行\n\n```bash\nyum install memcached  \nsystemctl start memcached #启动\nsystemctl enable memcached# 开机启动\n```\n\n##### 二、Django中配置\n\n在setting中配置memcache缓存\n\n```python\nCACHES = {\n    'default': {\n        'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',\n        'LOCATION': [\n            '127.0.0.1:11211' # memcached默认的主机端口\n        ],\n        #'OPTIONS':{\n        #    'MAX_ENTRIES': 300, # 最大缓存记录的数量（默认300）\n        #    'CULL_FREQUENCY': 3, # 缓存到达最大个数之后，剔除缓存个数的比例，即：1\u002FCULL_FREQUENCY（默认3）\n        #}\n    }\n}\n```\n\n使用缓存装饰器缓存整个页面\n\n```python\nfrom django.views.decorators.cache import cache_page\n@cache_page(60) # 60代表缓存的寿命,表示缓存时长60秒钟\ndef index(request):\n    return render(request,\"index.html\")\n```\n\n对某些数据进行缓存\n\n```bash\nfrom django.core.cache import cache\n#公共内容\ndef global_variable(request):\n    time = 3600\n    if not cache.get('categorys'):\n        filed_list = ('id', 'name', 'index', 'path', 'status', 'parent_id')\n        _categorys = Category.objects.all().values(*filed_list)\n        categorys = get_tree(_categorys)\n        cache.set('categorys', json.dumps(categorys), time)\n    else:\n        categorys = json.loads(cache.get('categorys'))\n```\n\n在路由中缓存\n\n```python\nfrom django.views.decorators.cache import cache_page\nurlpatterns = [\n    path('list-\u003Cint:lid>.html', cache_page(60)(views.get_list), name='list'),#列表页\n]\n```\n\n在模板缓存\n\n```python\n\u003C!DOCTYPE html>\n{% load cache %}\n\u003Chtml lang=\"en\">\n\u003Chead>\n    \u003Cmeta charset=\"UTF-8\">\n    \u003Ctitle>Title\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\u003Cbody>\n{% cache 60 image %}\n\u003Cimg src=\"\u002Fstatic\u002Fimages\u002F1.png\" alt=\"\">\n{% endcache %}\n\u003C\u002Fbody>\n\u003C\u002Fhtml>\n```\n\n 首先要导入cache，使用{% load cache %}，同样缓存时必须携带两个参数，第一个是缓存时间，第二个是缓存片段的名称。 \n\nmemcached是一个很好用的缓存数据库，在一些小型分布式系统中具有非常好的性能，但是随着系统不断扩大，memcahed也需要扩容，这是耗时耗力的，而且memcached不支持数据持久化，服务器重启后数据就没了。当我们更在意数据持久化，需要储存更多类型的数据时使用redis替换掉memcached是一个更好的选择。\n\n不管是memcached还是redis，我们在缓存数据的时候经常要缓存object对象，对于这种key\u002Fvalue的非关系型数据库而言本身是不支持这种数据类型的，但并不代表不可行。想要在缓存中保存object，需要先对object进行序列化，将其准化成可以进行储存的形式存入缓存中，从缓存中读取数据时需要进行反序列化。",null,0,2159,"",1,"2020-10-23 11:17:27","2026-04-19 10:45:12",129,"Python",{"id":23,"title":24},94,"客户端连接MySQL8提示 caching-sha2-password 问题",{"id":26,"title":27},96,"PHP中字符串跟0做比较永远是true",[29,32,35,37],{"id":30,"name":31},77,"Django",{"id":33,"name":34},78,"Memcache",{"id":36,"name":21},27,{"id":38,"name":39},79,"缓存",1832,4,16,"https:\u002F\u002Ftp.myong.top\u002Fstorage\u002Farticle\u002F47\u002F7aaf5aeee68d3e4794a17c6d5b2eea.jpg",[45,50,55,60,65],{"id":46,"title":47,"create_time":48,"description":49},91,"用Python实现编程语言 20 年的动态排行榜","2020-06-24 16:06:54","爬取一下，自2001年5月至今，TIOBE 编程语言排行榜上编程语言的变化情况，看一下在接近20年的时间里，编程语言的热度是如何变化的。\r\n",{"id":51,"title":52,"create_time":53,"description":54},100,"re正则表达式","2021-07-10 18:09:52","正则表达式是一个特殊的字符序列，它能帮助你方便的检查一个字符串是否与某种模式匹配，本文罗列re正则表达式中，常用的匹配符号。",{"id":56,"title":57,"create_time":58,"description":59},34,"Python基础整理之列表常见操作","2019-02-10 16:53:55","列表是最常用的Python数据类型，它可以作为一个方括号内的逗号分隔值出现。列表的数据项不需要具有相同的类型",{"id":61,"title":62,"create_time":63,"description":64},63,"Python与mysqldump的数据库备份","2019-10-14 15:35:33","mysqldump是备份MySQL数据库的一种好工具。它相对于用phpmyadmin等备份工具更加快速，又避免受php.ini等的限制，在windows系统下还可以结合计划任务实现定时远程备份数据库",{"id":66,"title":67,"create_time":68,"description":69},73,"城市天气爬去并绘制图表","2020-01-03 16:20:15","以爬去深圳城市七天天气为例，`BeautifulSoup`爬去天气数据，`echart`绘制最高气温与最低气温折线图。",1783431656561]