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

  • 相关阅读:
    VBScript把json字符串解析成json对象的2个方法
    vue+php接口
    td标签 内容垂直、水平居中
    win7 安装 IIS 配置ASP 【原创】
    PS 实用技巧
    通信原理实践(一)——音频信号处理
    德飞莱STM32单片机学习(一)——下载环境搭建
    电赛总结(四)——波形发生芯片总结之AD9854
    电赛总结(四)——波形发生芯片总结之AD9851
    电赛总结(四)——波形发生芯片总结之AD9834
  • 原文地址:https://www.cnblogs.com/ivan-yang/p/9056899.html
Copyright © 2020-2023  润新知