设为首页 收藏本站
查看: 891|回复: 0

[经验分享] Django 缓存框架

[复制链接]

尚未签到

发表于 2015-8-31 09:19:10 | 显示全部楼层 |阅读模式
  0 0 原来....

memcached简介


翻译:
gashero
  
  目录


  • 1   什么是memcached
  • 2   它如何工作
  • 3   移植应用
  • 4   数据库不能做这些么
  • 5   那共享内存呢
  • 6   MySQL 4.x的查询缓存如何
  • 7   数据库复制的对比
  • 8   memcached够快么
  • 9   竞争情况
  • 10   memcached的Python客户端

    • 10.1   基本使用
    • 10.2   Client类


  主要取自 memcached 的主页。
  memcached的Python客户端下载地址为 python-memcached 。
  

1   什么是memcached
  memcached是一个高性能的、分布式内存对象缓存系统,尽管很通用,但是用来加速WEB应用、降低数据库负载时比较多。
  Danga Interactive 开发了memcached用来提高 LiveJournal.com 的速度,这个站点每天处理2000万以上的动态页面请求,独立用户有100万左右。memcached把数据库的负载降到了几乎没什么事可干的地步,并为用户提供很快的页面响应速度,更好的资源利用率和更快的数据库存取操作。
  

2   它如何工作
  首先启动一个memcached监护进程,监护进程不需要配置文件,只要在命令行里面加三四个参数就可以了:

# ./memcached -d -m 2048 -l 10.0.0.40 -p 11211
  这里指定使用2GB内存,监听10.0.0.40的11211端口来启动memcached。因为32位处理器最多只能有4GB的地址空间。如果你确实需要32位的服务器处理4-64GB的内存(使用PAE),则每个使用2-3GB内存。
  

3   移植应用
  
  Warning
  pass
  

4   数据库不能做这些么
  数据库为了在关系数据库管理系统上实现ACID,使用了锁,导致很多读写阻塞。而memcached从不会阻塞。
  

5   那共享内存呢
  首先使用缓存的很多用户都是用于WEB。这意味着要分配时间出来做多请求处理给不同的系统,如mod_perl、PHP等等,这是对全局缓存的一种浪费。如果你使用多线程语言和共享内存API,如IPC::Shareable,你的每个线程都拥有独立的缓存。这个也是共享内存的局限性。
  memcached服务器和客户端实现了全局缓存。实际上,很推荐你在同一台机器上同时运行WEB结点和memcached结点。这会节省一点网络开销。
  

6   MySQL 4.x的查询缓存如何
  
  Warning
  pass
  

7   数据库复制的对比
  
  Warning
  pass
  

8   memcached够快么
  非常快,它使用 libevent 来处理任意数量的连接。在Linux上,尽可能使用epoll 来实现。使用非阻塞的网络IO和计算,所以对象在不同的客户端上可能有不同的状态。还使用内置的内存块分配和哈希表算法,确保虚拟内存不会过来捣乱。
  

9   竞争情况
  你可能感兴趣用户是否会获取一个过期的值。
  服务器API只有一种获取数据的方法,并有3种提交数据的方法:



  • set 无条件的设置指定的键为给定的值。
  • add 添加到缓存,如果不存在。
  • replace 当存在已有值时,替换一下。

  另外,这3个函数都可以设置过期时间。
  

10   memcached的Python客户端
  

10.1   基本使用

import memcachemc=memcache.Client(['127.0.0.1:11211'],debug=0)mc.set("some_key","Some value")value=mc.get("some_key")mc.set("another_key",3)mc.delete("another_key)mc.set("key","1") #用于自动增量/减量的必须是字符串mc.incr("key")mc.decr("key")
  标准的使用memcache作为数据库缓存的方法如下:

key=derive_key(obj)obj=mc.get(key)if not obj:    obj=backend_api.get(...)    mc.set(obj)#现在可以操作obj了
  

10.2   Client类
  __init__(servers,debug=0,pickleProtocol=0,pickler=pickle.Pickler,unpickler=pickle.Unpickler)

  构造函数

  delete(key,time=0)

  删除某个键。time的单位是秒,确保特定时间内的set/update操作会失败。返回1成功,0失败。

  incr(key,delta=1)

  给自增量变量加上delta,默认为1。

  decr(key,delta=1)

  给自减量变量减去delta,默认为1。

  add(key,val,time=0,min_compress_len=0)

  添加一个键值对,内部调用_set()方法。

  replace(key,val,time=0,min_compress_len=0)

  替换值,内部调用_set()方法。

  set(key,val,time=0,min_compress_len=0)

  无条件的设置键值对。time设置超时,单位是秒。min_compress_len用于设置zlib压缩。内部调用_set()方法。

  set_multi(mapping,time=0,key_prefix=”,min_compress_len=0)

  设置多个键值对。

  get(key)

  获取值。出错则返回None。

  get_multi(keys,key_prefix=”)

  获取多个键的值,返回字典。keys为健明列表。key_prefix是键名前缀,可以最终构成key_prefix+key的完整键名。与set_multi中一样。








运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-106641-1-1.html 上篇帖子: .net 使用memcache做缓存 下篇帖子: memcache、memcached、groupcache的区别
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

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