zoukankan      html  css  js  c++  java
  • 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操作;

  • 相关阅读:
    了解 NoSQL 的必读资料
    关于什么时候用assert(断言)的思考
    这次见到了一些大侠
    NetBeans 时事通讯(刊号 # 87 Jan 12, 2010)
    动态链接库dll,静态链接库lib, 导入库lib
    新女性十得 写得了代码,查得出异常
    记录系统乱谈
    新女性十得 写得了代码,查得出异常
    fullpage.js禁止滚动
    RunningMapReduceExampleTFIDF hadoopclusternet This document describes how to run the TFIDF MapReduce example against ascii books. This project is for those who wants to experiment hadoop as a skunkworks in a small cluster (110 nodes) Google Pro
  • 原文地址:https://www.cnblogs.com/ivan-yang/p/9056899.html
Copyright © 2011-2022 走看看