专否 写文章

冯纪忠雄,Less Is More

Nov 5, 2018
Follow

学习memcached分布式缓存

分布式缓存,耗费的是内存。memcached稳定性非常高。memcached的分布式是靠手动设计键值中键的分布规则来形成分布式的。设计分布式法则的时候需要注意:1、当新添加一台memcached主机时,如何平缓地添加进去(对分布式缓存高度依赖的系统尤其要注意平缓更新)2、当实在无法平缓更新时,注意预热。

pylibmc官方网站:http://sendapatch.se/projects/pylibmc/ 



下文皆以ubuntu操作系统为例。

安装memcached

$ sudo apt-get install memcached

启动一个memcached进程

memcached -p 12001 -l 10.19.8.76 -m 100m
  • -p 12001 绑定12001端口
  • -l 10.19.8.76 绑定ip地址,一般绑定内网ip
  • -m 100m 最大占用100M的内存(当超过100M的时候再继续进行存入数据时,之前最先存储的键值数据就会被自动抹掉,换句话说,就是推出陈米接收新米)
  • -d 后台守护进程的方式来运行

使用python来访问memcached

pylibmc是最佳的选择,性能最好。pylibmc是用C重新写的。总之只需要考虑用pylibmc就行了,其他的python client不需要考察了。

安装pylibmc

以前有些环境下安装pylibmc比较麻烦,但就目前我今天测试的这个ubuntu版本下如下操作即可。

sudo apt-get install python-dev
sudo apt-get install libmemcached-dev
sudo apt-get install zlib1g-dev
sudo pip install pylibmc

使用pylibmc

>>> import pylibmc
>>> mc = pylibmc.Client(["10.19.8.76"], binary=True,
...                     behaviors={"tcp_nodelay": True,
...                                "ketama": True})
>>> mc.set( "key", "value" )
True
>>> mc.get( "key" )
value
>>> mc.set( "fuck", "fuckfuckfuck", 10 ) #只放在缓存里10秒,10秒内可以get到,10秒后就get不到了
True
>>> a = mc.get( "key_of_nothing")
>>> print a
None
>>> import datetime
>>> a = datetime.datetime.now()
datetime.datetime(2016, 3, 15, 22, 9, 28, 873426)
>>> mc.set( "key", a )
True
>>> mc.get( "key" )
datetime.datetime(2016, 3, 15, 22, 9, 28, 873426)
>>> mc.delete( "key" )
True
>>> mc.set("key", "1")  # str or int is fine
True
>>> mc.incr("key")
2L
>>> mc.decr("key")
1L

设计分布式算法、平缓更新、预热

这个事情不难,但是暂时不必要去考虑这些;先用云主机单机自建或直接用云计算平台提供的类似服务即可。如果对于分布式内存过于依赖,只有两种可能性,一是业务发展很好,有需求了;二是架构设计上有太大问题。

喜欢这个文章 | 分享 | 新建跟帖