day20-20180517笔记
笔记:复习redis、python3操作memcached
一、复习redis
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2018/5/18 16:30 # @Author : yangyuanqiang # @File : demon1.py import redis r = redis.Redis(host="192.168.3.20", port=6379, db=0) print(r) print(r.keys()) print(r.get("aaa").decode("utf-8")) # 字符串操作 # get(key) # set(key, value) # mget(k1, k2, k3, k4) # mset(k1=v1, k2=v2) # list的操作 # 左边添加 lpush(name, value) # 右边添加 rpush(name, value) # 插入 linsert(name, where, refvalue, value) # 左边删除 lpop(name) # 通过分片取list中的值 lrange(name, start, end) # 修改list中的某个值 lset(name, index, value) # 删除指定的值 lrem(name, value, num) num默认为0, 删除所有,num=2 从左往右删除2个元素,num=-1从右往左删除两个元素 r.lpush("testlist1", 1) r.lpush("testlist1", 2, 3, 4) print(r.lrange("testlist1", 0, -1)) # set操作 # 增加 sadd(name, values) # 获取 scard(name) # 删除 spop(name) s.srem(name, value) # 并集 sunion(keys) 例如:suniion("a", "b", "c") # 交集 sinter(key) # hash 主要要掌握string和hash的操作 # 获取key的详细内容 hgetall(name) # 设置单个元素 hset(name, key, value) # 设置多个元素 hmset(name, {"key": "value"}) # 获取单个元素 hget(name, key) # 获取多个元素 hmget(name, keys) # 获取多有的key hkeys(name) # 获取多有的value hvals(name) # 判断key是否存在 hexists(name, key) # 删除key hdel(name, keys) # 获取长度 hlen(name) r.hset("testhash", "k1", "v1") print(r.hget("testhash", "k1")) print(r.hgetall("testhash")) r.hmset("testhash111", dict(k1="v1", k2="v2", k3="v3")) print(r.hgetall("testhash111")) # 其他常用的操作,适用于所有类型 # r.keys() 查看所有的key # r.delete(names) 删除keys # r.exists(name) 判断是否存在 # r.rename(src, dst) 新替旧 # r.expire(name, time) 设置超时时间 # r.type(name) 查看name属于哪种redis数据类型 # r.move(name, db) 把name从原理的db移动到db库下面 # r.flushall() 删除所有key
二、python3操作memcached
1、memcached介绍
Memcached是一个自由开源的,高性能,分布式内存对象缓存系统。
Memcached是以LiveJournal旗下Danga Interactive公司的Brad Fitzpatric为首开发的一款软件。现在已成为mixi、hatena、Facebook、Vox、LiveJournal等众多服务中提高Web应用扩展性的重要因素。
Memcached是一种基于内存的key-value存储,用来存储小块的任意数据(字符串、对象)。这些数据可以是数据库调用、API调用或者是页面渲染的结果。
Memcached简洁而强大。它的简洁设计便于快速开发,减轻开发难度,解决了大数据量缓存的很多问题。它的API兼容大部分流行的开发语言。
本质上,它是一个简洁的key-value存储系统。
一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。
memcached分布式缓存服务器的特点:协议简单、基于libevent的事件处理、内置内存存储方式、memcached不互相通信的分布式
2、Memcached安装和基本使用
注意:memcached数据库,如果服务器重启了,数据会丢失,不是永久性保存的,而redis和mongodb是永久性保存数据
Memcached 支持许多平台:Linux、FreeBSD、Solaris、Mac OS,也可以安装在Windows上。
linux系统安装memcached首先要安装Libevent库:
sudo apt-get install libevent libevent-deve 自动下载安装(Ubuntu/Debian) yum install libevent libevent-deve 自动下载安装(Redhat/Fedora/Centos)
安装memcached:
#yum安装 sudo apt-get install memcached #ubuntu/debian yum install memcached #redhat/fedora/centos portmaster databases/memcached #freeBSD #编译安装 cd /usr/local/src wget http://memcached.org/latest tar -zxvf memcached-1.x.x.tar.gz cd memcached-1.x.x ./configure && make && make test && make install
memcached命令的运行:
memcached -d -m 10 -u root -l 127.0.0.1 -p 12000 -c 256 -P /export/servers/memcache/logs/memcache.pid
启动选项:
-p 指定端口号(默认11211)
-m 指定最大使用内存大小(默认64MB)
-t 线程数(默认4)
-l 连接的IP地址, 默认是本机
-d 以后台守护进程的方式启动
-c 最大同时连接数,默认是1024
-P 制定memecache的pid文件
-h 打印帮助信息
[root@python bin]# netstat -lntup|grep 12000 tcp 0 0 192.168.3.20:12000 0.0.0.0:* LISTEN 42059/memcached udp 0 0 192.168.3.20:12000 0.0.0.0:* 42059/memcached
天生支持集群:
python-memcachd模块原生支持集群操作,其原理是在内存维护一个主机列表,且集群中主机的权重值和主机在列表中重复出现的次数成正比。
主机 权重
1.1.1.1 1
1.1.1.2 2
1.1.1.3 1
#那么在内存中主机列表为:
host_list=['1.1.1.1','1.1.1.2','1.1.1.2','1.1.1.3',]
3、python操作memcached
Memcache常用操作:
存储命令: set/add/replace/append/prepend/cas
获取命令: get/gets
其他命令: delete/stats..
import memcache #链接memcached服务器,指定IP和端口,debug表示显示错误信息 mc = memcache.Client(['192.168.3.20:12000'],debug=True) #设置键值对 mc.set('foo','pythonTomemcache') #查看键值 print(mc.get('foo'))
add:添加一个键值对,如果存在key,重复执行add则异常
mc.add('k1','v1')
replace: 修改某个key的值,如果key不存在,则异常
mc.replace('k2','v2')
set:设置一个键值对,如果key不存在,则创建,如果key存在则修改
mc.set('k3','v3')
set_multi:设置多个键值对,如果key不存在,则创建,如果key存在,则修改
mc.set_multi({'key1':'value1','key2':'value2'})
delete:在memcached中删除指定的一个键值对
mc.delete('key1')
delete_multi:在memcached中删除指定的多个键值对
mc.delete_multi(['key1','key2','key3'])
get:获取一个键值对
get_multi:获取多个键值对
mc.get('key3') mc.get_multi(['key1','key2'])
append:修改指定key的值,在该值后面追加内容
prepend:修改指定key的值,在该值前面插入内容
mc.append('k1','after') mc.prepend('k2','before')
incr:自增,将memcached中的某个值增加N(默认为1)
decr:自减,将memcached中的某分值减少N(默认为1)
mc.set('k1',10) mc.incr('k1',2) print(mc.get('k1')) mc.decr('k1',3) print(mc.get('k1'))
gets:gets 命令获取带有 CAS 令牌存 的 value(数据值) ,如果 key 不存在,则返回空
cas:执行一个检查并设置的操作,它仅在当前客户端最后一次取值后,该Key对应的值没有被其他客户端修改的情况下, 才能够将值写入。
mc.cas('key5','999') print(mc.gets('key5'))
总结:
1、工作当中比较少接触到,但是要了解memcached缓存数据库是个什么东西;
2、熟悉redis之hash操作;