博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python-操作缓存
阅读量:4572 次
发布时间:2019-06-08

本文共 3363 字,大约阅读时间需要 11 分钟。

memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的。其(daemon )是用写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信。
 
memcached启动: memcached -d -m 10    -u root -l 192.168.1.100 -p 45555-c 256 -P /tmp/memcached.pid 参数说明:    -d 是启动一个守护进程    -m 是分配给Memcache使用的内存数量,单位是MB    -u 是运行Memcache的用户    -l 是监听的服务器IP地址    -p 是设置Memcache监听的端口,最好是1024以上的端口    -c 选项是最大运行的并发连接数,默认是1024,按照你服务器的负载量来设定    -P 是设置保存Memcache的pid文
 
1 #服务端安装memcached,本地安装对应api模块 2 #在python中调用模块 3 import memcache 4 #建立链接对应ip端口 5 mc = memcache.Client(['192.168.1.100:45555'], debug=True) 6 #修改值,存在修改,不存在添加 7 mc.set("foo", "bar") 8 #根据key获取value值 9 ret = mc.get('foo')10 print ret11 >>>bar
1 import memcache 2  3 #支持多个集群根据权重去对应集群中获取值 4 mc = memcache.Client([('1.1.1.1:12000', 1), ('1.1.1.2:12000', 2), ('1.1.1.3:12000', 1)], debug=True) 5  6 #修改值存在修改,不存在添加 7 mc.set('k1', 'v1') 8  9 #添加纪录10 mc.add('k2','v2')11 mc.add('k2','v2')#报错12 13 如果memcache中存在kkkk,则替换成功,否则一场14 15 #替换值如果存在则修改,存在报异常16 mc.replace('kkkk','999')17 18 #设置多个键值对19 mc.set_multi({
'k3': 'v3', 'k4': 'v4'})20 21 #删除值22 mc.delete('k1')23 24 #批量删除25 mc.delete_multi(['k1', 'k2'])26 27 #根据key获取值28 val = mc.get('k1')29 30 #批量获取值31 item_dict = mc.get_multi(["k1", "k2", "k3"])32 33 #根据key在value后面追加值34 mc.append('k1', 'after')35 # k1 = "v1after"36 37 #根据key在value前面追加值38 mc.prepend('k1', 'before')39 # k1 = "beforev1after"40 41 #incr,根据key将value的值自增142 mc.incr('k1')43 #decr ,根据key将value的值自减144 mc.decr ('k1')
#为了避免多个用户同时修改提交数据导致数据不一致mc = memcache.Client(['192.168.1.100:45555'],debug=True,cache_cas=True)v = mc.gets('product_count')print(v)mc.cas('product_count','111')#报错#gets与cas中间修改值得话会报错mc.cas('product_count','889')

 

redis

redis是一个key-value。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list()、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。 redis与memcache比较 1 Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储,memcached只支持一种数据类型。 2 Redis支持数据的备份,即master-slave模式的数据备份。 3 Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。 启动服务端
    src
/
redis
-
server
 启动客户端 
    src/redis-cli
1 #调用redis模块 2 import redis 3 #链接redis服务端 4 r = redis.Redis(host='192.168.1.100', port=41111) 5 #修改值 6 r.set('foo', 'Bar') 7 #获取值 8 print r.get('foo') 9 >>>'Bar'10 11 #redis-py使用connection pool来管理对一个redis server的所有连接,避免每次建立、释放连接的开销。默认,每个Redis实例都会维护一个自己的连接池。可以直接建立一个连接池,然后作为参数Redis,这样就可以实现多个Redis实例共享一个连接池。12 import redis13 pool = redis.ConnectionPool(host='192.168.1.100', port=41111)14 r = redis.Redis(connection_pool=pool)15 r.set('foo', 'Bar')16 print r.get('foo')17 #set(name, value, ex=None, px=None, nx=False, xx=False)18 #在Redis中设置值,默认,不存在则创建,存在则修改19 #参数:20 #     ex,过期时间(秒)21 #     px,过期时间(毫秒)22 #     nx,如果设置为True,则只有name不存在时,当前set操作才执行23 #     xx,如果设置为True,则只有name存在时,当前set操作才执行24 25 #mset批量设置值26 mset(k1 = 'v1' ,k2 = 'v2')27 mget({
'k1':'v1','k2':'v2'})28 29 #get(name)获取值30 get('k1')31 32 #mget(keys,args)批量获取33 mget('k1','k2')34 35 #getset设置新值并获取原来的值36 #getrange(key,start,end)获取子序列37 set('k1','liguangxu')38 getrange('k1',1,2)#ig39 #setrange(name,offset,value)修改字符串内容,从指定位置开始替换40 #append(key,value)在redis name对应的值后面追加内容41 append('k1','aaa')#'liguangxuaaa'

 

 

转载于:https://www.cnblogs.com/liguangxu/p/5697597.html

你可能感兴趣的文章
通用EF框架
查看>>
5-Java多态性理解
查看>>
vray学习笔记(4)混合材质是个什么东西
查看>>
Redis Linux版安装详解
查看>>
软件工程个人作业02------即01的升级版本
查看>>
博弈论 斯坦福game theory stanford week 3.1_
查看>>
HDU1286+线性筛素数
查看>>
JavaScript简单的实例应用
查看>>
caffe中各种cblas的函数使用总结
查看>>
功能性肠道疾病用药一览表
查看>>
模板页
查看>>
BZOJ 1648: [Usaco2006 Dec]Cow Picnic 奶牛野餐
查看>>
异步编程
查看>>
MySQL 5.7 reference about JSON
查看>>
十进制整数转化十六进制
查看>>
获取中文汉字字符串相应的拼音和首字母的大小写
查看>>
Bootstrap 表格
查看>>
VBA中Dictionary对象使用(Key,Value)
查看>>
Shell脚本中计算字符串长度的5种方法
查看>>
laravel 查询随机数据
查看>>