python第十一天-----补:缓存操作

memcached,首先下载python-memcached模块,在cmd中执行pip install python-memcached即可

memcached比较简单,默认情况仅支持简单的kv存储,并且缓存写于内存当中,具体不做介绍了

服务器开启服务后,简单操作下

 1 #!/usr/bin/env python
 2 import memcache
 3
 4
 5 mc = memcache.Client([‘172.16.5.7:11211‘], debug=True)
 6 mc.add(‘k1‘, ‘v1‘)                          #添加一条新kv
 7 mc.add(‘k1‘, ‘v2‘)                          #key存在则报错
 8 ret = mc.get(‘k1‘)
 9 print(ret)
10
11 mc.replace(‘k1‘, ‘999‘)                     #替换原有的key的value,如果key不存在则报错
12 ret = mc.get(‘k1‘)
13 print(ret)
14
15 mc.set(‘test‘, ‘test‘)                      #设置一个kv对
16 mc.set_multi({‘test‘: ‘test‘, ‘xxx‘: ‘ooo‘})    #设置多个kv对
17
18 # mc.delete(‘test‘)                      #删除一个kv对
19 # mc.delete_multi([‘test‘, ‘xxx‘])      #删除多个kv对
20
21 val = mc.get(‘test‘)                      #获取一个kv对
22 dic_val = mc.get_multi([‘test‘, ‘xxx‘])   #获取多个kv对
23
24 mc.append(‘k1‘, ‘after‘)                            #修改指定key的值,在该值后面追加内容
25 mc.prepend(‘k1‘, ‘before‘)                          #修改指定key的值,在该值前面插入内容
26 ret = mc.get(‘k1‘)
27 print(ret)

防止脏数据时使用cas,gets

1 #!/usr/bin/env python
2 import memcache
3 mc = memcache.Client([‘172.16.5.7:11211‘], debug=True, cache_cas=True)
4 v = mc.gets(‘product_count‘)
5 mc.cas(‘product_count‘, "899")

本质上每次执行gets时,会从memcache中获取一个自增的数字,通过cas去修改gets的值时,会携带之前获取的自增值和memcache中的自增值进行比较,如果相等,则可以提交,如果不想等,那表示在gets和cas执行之间,又有其他人执行了gets(获取了缓冲的指定值), 如此一来有可能出现非正常数据,则不允许修改

redis,首先下载python-redis模块,在cmd中执行pip install python-redis即可

redis支持string、list、set、zset、hash,支持缓存持久化

http://www.cnblogs.com/wupeiqi/articles/5132791.html

 1 #!/usr/bin/env python
 2 import redis
 3
 4 # r = redis.Redis(host=‘172.16.5.7‘, port=6379)
 5 # r.set(‘foo‘, ‘Bar‘)
 6 # print(r.get(‘foo‘).decode())
 7
 8 pool = redis.ConnectionPool(host=‘172.16.5.7‘, port=6379)
 9 #建立一个连接池,可以省去每次创建,释放连接时的开销
10 r = redis.Redis(connection_pool=pool)
11 # r.set(name, value, ex=None, px=None, nx=False, xx=False))
12 # ex,过期时间(秒)
13 # px,过期时间(毫秒)
14 # nx,如果设置为True,则只有name不存在时,当前set操作才执行
15 #xx,如果设置为True,则只有name存在时,当前set操作才执行
16 r.set(‘foo‘, ‘Bar‘)
17 print(r.get(‘foo‘).decode())
18
19 r.mset(k1=‘v1‘, k2=‘v2‘)            #一次设置多个kv,也可以写成r.mset({‘k1‘: ‘v1‘, ‘k2‘: ‘v2‘})
20 print(r.mget(‘k1‘, ‘k2‘))           #一次获取多个kv,也可以写成r.mget([‘k1‘, ‘k2‘])
21
22 r.getset(‘k1‘, ‘new‘)               #获取原值并替换成新的
23
24 r.getrange(‘k1‘, 1, 3)              #获取子序列(根据字节获取,非字符)
25 r.setrange(‘k1‘, 1, ‘new‘)          #修改字符串内容,从指定字符串索引开始向后替换(新值太长时,则向后添加)
26
27 r.append(‘k1‘, ‘value‘)             #在redis name对应的值后面追加内容

set,hash,zset都差不多,就是参赛前面加s,z,h

时间: 2024-11-07 23:07:26

python第十一天-----补:缓存操作的相关文章

python第十一天-----补:线程池

低版本: 1 #!/usr/bin/env python 2 import threading 3 import time 4 import queue 5 6 7 class TreadPool: 8 """ 9 将线程加入到队列中作为资源去完成任务 10 优点:简单好写容易理解 11 缺点:太尼玛多了..... 12 """ 13 def __init__(self, maxsize): 14 self.maxsize = maxsize 1

python字符串格式化输出及相关操作代码举例

字符串的格式化 Python 支持格式化字符串的输出 .尽管这样可能会用到非常复杂的表达式,但最基本的用法是将一个值插入到一个有字符串格式符 %s 的字符串中.在   Python 中,字符串格式化使用与 C 中 sprintf 函数一样的语法. 在python中格式化输出字符串通用的形式为: 格式标记字符串 % 要输出的值组 其中,左边部分的"格式标记字符串"可以完全和c中的一致.右边的"值组"如果有两个及以上的值则需要用小括号括起来,中间用逗号隔开. 重点来看左

Python进阶(十一)----包,logging模块

Python进阶(十一)----包,logging模块 一丶包的使用 什么是包: ? 包是通过使用 .模块名的方式组织python模块名称空间的方式. 通俗来说,含有一个__init__.py文件的文件夹就是包. 包的作用: ? 将文件夹/模块组织起来,来提高程序的结构性和可维护性. ? 目的不是运行,为了导入使用.包只是一种形式,包的本质就是一个模块 import: # 创建一个包,也会发生三件事: ''' 1. 将该aaa包内 __init__py文件加载到内存. 2. 创建一个以aaa命名

Python3快速入门(十一)——Python3数据库操作

Python3快速入门(十一)--Python3数据库操作 一.mysql-connector 驱动 1.mysql-connector?简介 mysql-connector?是?MySQL?官方提供的驱动器.使用pipenv进行包管理,安装命令如下:pipenv install mysql-connector 2.mysql-connector常用接口 mysql.connector.connect(*args, **kwargs)创建一个数据库连接,返回MySQLConnectionAbst

【python技巧】“&”、“>>”等符号操作

[python技巧] 1)[关于‘&’ :按照二进制进行与操作,可以用作判断奇偶][https://zhidao.baidu.com/question/308587899.html] & 是位运算:and 是逻辑运算. [举例1] >>> a = 1 >>> b = 2 >>> #1 的二进制是 1,2的二进制是 10 >>> a&b 0 >>> a and b 2 [举例2] 对于(m+n)

Python第二十一课(反射/元类)

Python第二十一课(反射/元类)    >>>思维导图>>>中二青年 反射reflect 什么是反射, 其实是反省,自省的意思 反射指的是一个对象应该具备,可以检测,修改,增加自身属性的能力 反射就是通过字符串操作属性 涉及的四个函数,这四个函数就是普通的内置函数 没有双下划綫,与print等等没有区别 hasattr getattr setattr delattr p = Person("jack",18,"man") #

初学 Python(十一)——切片

初学 Python(十一)--切片 初学 Python,主要整理一些学习到的知识点,这次是切片. #-*- coding:utf-8 -*- ''''' 切片 ''' L = ['name','age','sex','address','company'] #取前2个 print L[0:2] print L[:2] #取倒数第一个 print L[-1] #取后两个 print L[-2:] #取倒数第二个 print L[-2:-1] print len(L) #隔一个数取一次,从第一个数开

python的tab自动补全

很久不写blog了. 最近发现python的自动补全是个好东西. 分享一下. 参考了:http://www.cnblogs.com/allenblogs/archive/2011/04/21/2023288.html 和 软件手册 下载地址:http://vim.sourceforge.net/scripts/script.php?script_id=850 直接粘贴了. ------------------------------ vim编辑器中 #mkdir -p ~/.vim/after/

python,使用PIL库对图片进行操作

在做识别验证码时,需要对验证码图片进行一些处理,所以就学习了一下PIL的知识,下面是我总结的一些常用方法. 注明:图片的操作都需要Image库,所以要使用import Image导入库 1.打开图片 import Imageimg=Image.open("code.jpg") 注:有些图片名称是包含中文的,就需要在""前加上u,例:img=Image.open(u"阿布.jpg") 以下各个操作均是基于原图进行的修改,原图为: 2.展示图片 im