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操作;

 

posted @ 2018-05-18 16:47  Ivan_yyq  阅读(108)  评论(0编辑  收藏  举报