memcached
memcache開源的,高性能,高并發分布式內存緩存系統,天生支持集群
memcached下載地址:
http://memcached.org/downloads
python實現memcached緩存
pip3 install python-memcached
import memcache aa=memcache.Client(["10.0.0.20:11211"],debug=True) aa.set("k1","v1") print(aa.get("k1"))
?
memcached方法使用
import memcache aa=memcache.Client([("10.0.0.20:11211",1),("10.0.0.20:11212",2),("10.0.0.20:11213",1)],debug=True) #會存到11212中 aa.set("k1","v1") aa.replace("k1","hahaha") aa.set('k2', '1') aa.incr('k2',100) print(aa.get("k2")) aa.decr('k2',50) print(aa.get("k2"))
?
?
import memcache aa=memcache.Client([("10.0.0.20:11211",1),("10.0.0.20:11212",2),("10.0.0.20:11213",1)],debug=True,cache_cas=True) print(aa.gets("product_count")) #aa.set("product_count","111") #在gets和最后的cas之間,如果修改值,就會拋出異常 aa.cas("product_count","899")
?
?
redis
redis持久化存儲系統,全稱remote directory server,是基于key-value的持久化數據庫存儲系統。redis和memcached很相似,redis的數據類型更豐富:string,list,set,hash,sorted set,redis,支持主從同步,把更新的數據寫到磁盤
下載地址:?http://download.redis.io/releases/redis-2.8.9.tar.gz
?
?
python實現redis緩存
服務器要開啟redis,python安裝redis模塊:pip3 install redis
基本操作:
import redis aa=redis.Redis(host="10.0.0.20",port=7777) aa.set("k1","v1",ex=2) print(aa.get("k1"))
管理連接的連接池:
import redis pool=redis.ConnectionPool(host="10.0.0.20",port=7777) aa=redis.Redis(connection_pool=pool)
redis構造方法:
def __init__(self, host='localhost', port=6379,db=0, password=None, socket_timeout=None,socket_connect_timeout=None,socket_keepalive=None, socket_keepalive_options=None,connection_pool=None, unix_socket_path=None,encoding='utf-8', encoding_errors='strict',charset=None, errors=None,decode_responses=False, retry_on_timeout=False,ssl=False, ssl_keyfile=None, ssl_certfile=None,ssl_cert_reqs=None, ssl_ca_certs=None,max_connections=None): db:數據庫號 password:輸入redis設置的密碼
?
?
?
?
redis數據類型:
1,string類型
2,list
3,hash
4,set
5,sorted set
?
string | |
set(name, value, ex=None, px=None, nx=False, xx=False) | ex:設置此數據的超時時間 nx:如果設置為True,只有當name不存在時,set執行 xx:如果設置為True,只有當name存在時,set執行 |
setnx(name, value) | 只有當name不存在時,set執行 |
setex(name, value, time) | 設置數據有效期 |
mset(*args, **kwargs) | 設置多個數據 |
get(name) | ? |
strlen(name) | 獲取name的值的字節長度 |
incr(name, amount=1) | 整數自增 |
incrbyfloat(name, amount=1.0) | 以小數自增 |
decr(name, amount=1) | 整數自減 |
?
?
aa.flushdb() aa.set("k1","v1") aa.mset({"aa":22,"vv":"22"}) print(aa.get("k1")) print(aa.mget("k1","aa")) #[b'v1', b'11'] print(aa.strlen("k1")) aa.append("こ","じ") print(aa.keys()[0].decode()) #こ print(aa.incr("aa")) #23 print(aa.decr("aa",amount="10")) #13 exit()
?
?
?
hash | |
hset(name, key, value) | name:redis的key key:name下的一個key value:key的value |
hmset(name, mapping) | 一次性創建hash |
hget(name, key) | 獲取name的key的value |
hkeys(name) | 獲取name下的所有的key |
hvals(name) | 取name下的所有value |
hexists(name, key) | 是否存在此hash |
hlen(name) | 查看name下的hash數 |
hdel(name, *keys) | 刪除name下的hash,可刪除多個 |
?
?
aa.flushdb() aa.hset("rdi1","k1","v1") aa.hset("rdi1","k2","v2") #rdi1={"k1":"v1","k2":"v2"} aa.hmset("rdi2",{"k1":"v1","k2":"v2"}) aa.hmset("rdi3",{"k1":"v1","k2":"v2"}) print(aa.hmget("rdi2","k2","k1")) print(aa.hkeys("rdi2")) print(aa.hvals("rdi2")) print(aa.keys()) print(aa.hdel("rdi2","k1","k2")) print(aa.hkeys("rdi2"))
?
?
?
?
list | |
lpush(name, *values) | 在左邊壓入一個或多個值 |
lpop(name) | 從左邊彈出一個值,并從列表中刪除 |
lset(name, index, value) | 設置已有索引的值,若指定從左邊開始的索引無值,則報錯 |
lrange(name, start, end) | 從左邊開始,切片 |
lrem(name, value, num=0) | 從左邊開始取指定值刪除,num指定刪除幾個,0表示所有刪除 |
rpoplpush(src, dst) | 從一個列表的最右邊取出數放到另一個的最左邊 |
?
aa.flushdb() aa.lpush("k1",11,22) #k1=[22,11] aa.lpush("k1",33) #k1.lappend(33) aa.rpush("k1",11) #k1.rappend(33) aa.lrem("k1",11,num=1)print(aa.type("k1")) print(aa.llen("k1")) aa.lset("k1",2,"hello") aa.rpoplpush("k1","k2") print(aa.lpop("k2")) print(aa.lrange("k1",0,aa.llen("k1")))print(aa.lpop("k1")) print(aa.lpop("k1"))
?
?
?
Set | |
sadd(name, *values) | 添加name下value,可以一次添加多個 |
scard(name) | 查看name下有多少元素 |
sdiff(keys, *args) | 取keys和*args的差集,keys - *args |
sdiffstore(dest, keys, *args) | 把上面得出的差集存到dest里 |
sinter(keys, *args) | 取keys和*args的交集,keys & *args |
sinterstore(dest, keys, *args) | 把上面得出的并集存到dest里 |
sunion(keys, *args) | 取keys和*args的并集,keys | *args |
smembers(name) | 打印name下的所有元素 |
spop(name) | 從尾部刪除一個成員 |
smove(src, dst, value) | 移動src下的value值到dst |
?
aa.flushdb() aa.sadd("rdi1","v1","v2","v3") #rdi1={"v1","v2","v3"} aa.sadd("rdi2","v2","v5") #rdi2={"v2","v5"} print(aa.type("rdi1")) print(aa.scard("rdi1")) print(aa.sdiff("rdi1","rdi2")) #rdi1 - rdi2 aa.sdiffstore("rdi3","rdi1","rdi2") #rdi3 = rdi1 - rdi2 print(aa.sinter("rdi1","rdi2")) #rdi1 & rdi2 aa.sinterstore("rdi3","rdi1","rdi2") print(aa.sunion("rdi1","rdi2")) #rdi1 | rdi2 print(aa.smembers("rdi1")) #print(rdi1)
?
Other | |
keys(self, pattern='*') | 列出所有鍵 |
type(name) | 查看值的類型 |
flushdb() | 清空當前db |
flushall() | 清空所有數據 |
dbsize() | 查看此db下有多少個name |
move(name, db)) | 將redis的某個值移動到指定的db下 |
randomkey() | 隨機獲取一個redis的name(不刪除) |
expire(name ,time) | 為某個redis的某個name設置超時時間 |
delete(*names) | 根據刪除redis中的任意數據類型 |