zoukankan      html  css  js  c++  java
  • python模块整理29-redis模块

    date:20140530
    auth:jin
    http://github.com/andymccurdy/redis-py
    https://github.com/andymccurdy/redis-py/blob/master/README.rst

    一.安装
    # yum -y install python-redis
    # zypper install python-redis

    二.使用
    1.连接
    import redis
    r = redis.Redis(host='127.0.0.1', port=6380, db=1)
    或者
    r = redis.Redis(unix_socket_path='/tmp/redis.sock')

    #help(r)

    连接池

    >>> pool = redis.ConnectionPool(host='localhost', port=6379, db=0)

    >>> r = redis.Redis(connection_pool=pool)

    在python中报错,在pypy中可以

    更新redis模块由2.0.0升级到2.10.3

    # easy_install -U redis

    >>> import redis
    >>> pool = redis.ConnectionPool(host='localhost', port=6379, db=0)

    可以了

    2 看信息 r.info()
    info = r.info()
    for key in info:
    print "%s: %s" % (key, info[key])

    3 查数据库大小 r.dbsize()
    print ' dbsize: %s' % r.dbsize()

    4 看连接 r.ping()
    print "ping %s" % r.ping()

    5 设置key 和value
    (1)添加
    >>> r = redis.Redis(host='127.0.0.1', port=6380, db=1)
    >>> r = redis.StrictRedis(host='127.0.0.1', port=6380, db=0)
    >>> r.set('name','jin')
    True
    >>> r.get('name')
    'jin'

    字典赋值方式
    >>> r['sex'] = 1
    >>> r.get('sex')
    '1'

    append key-value 方式
    >>> r.append('email','test@qq.com')
    11L
    >>> r.get('email')
    'test@qq.com'

    2)删除
    对象delete方法
    >>> r.delete('sex')
    1
    >>> r.delete('sex')
    0
    del方式
    >>> r.get('name')
    'jin'
    >>> del r['name']
    >>> r.get('name')

    6.其他key value方法
    1).r.exists() 判断是否有key
    >>> r.exists('email')
    True

    2)r.flushdb()
    flushall 清空当前主机的数据
    flushdb() 清空当前库的数据
    >>> r.dbsize()
    2L
    >>> r.flushdb()
    True
    >>> r.dbsize()
    0L
    | flushall(self)
    | Delete all keys in all databases on the current host
    |
    | flushdb(self)
    | Delete all keys in the current database
    3)列出所有key r.keys()
    >>> r.keys()
    ['name', 'sex', 'level']
    便利key获取value
    for i in r.keys():
    print r.get(i)

    通配符
    >>> r.keys('a*')
    ['a', 'a1', 'age']
    随机
    >>> r.randomkey()
    'age'

    7.获取数据类型
    >>> print r.type('name')
    string

    三、各种数据类型
    它有四种类型: string(key,val)、list(序列)、set(集合)、zset(有序集合,多了一个顺序属性)
    (一)、string操作
    >>> r.set('name','jin')
    True
    >>> r['level']=11
    >>> r.append('age',28)
    2L

    #这里有个getset属性,如果为Tr 可以在存新数据时将上次存储内容同时返回出来
    >>> r.getset('c2','jj')
    'jj'
    >>> r.getset('c2','ab')
    'jj'
    >>> r.get('c2')
    'ab'

    #设置一个递增的整数 每执行一次它自加1(可以指定偏移):
    >>> r.incr('age')
    31
    >>> r.incr('age')
    32
    >>> r.get('age')
    '32'
    >>> r.incr('age',10)
    42
    >>> r.get('age')
    '42'


    #设置一个递减的整数 每执行一次它自减1(可以指定偏移)
    >>> print 'decr:',r.decr('b1')
    decr: -1
    >>> print 'decr:',r.decr('b1')
    decr: -2
    >>> print 'decr:',r.decr('b1',10)
    decr: -12

    # 取value
    get方法
    >>> r.get('a1')
    '12'
    字典方法
    >>> r['a1']
    '12'

    #同时取一批
    >>> r.mget('a1','b1')
    ['12', '-12']

    ###取key
    列出所有key
    >>> r.keys()
    ['name', 'sex', 'level']
    便利key获取value
    for i in r.keys():
    print r.get(i)
    通配符
    >>> r.keys('a*')
    ['a', 'a1', 'age']
    随机
    >>> r.randomkey()
    'age'

    # 查看一个数据有没有 有 1 无0
    print 'existes:',r.exists('a')

    # 删数据 1是删除成功 0和None是没这个东西
    对象delete方法
    >>> r.delete('sex')
    1
    >>> r.delete('sex')
    0
    del方式
    >>> r.get('name')
    'jin'
    >>> del r['name']
    >>> r.get('name')

    # 其他
    r.rename('name','uname') #改名
    >>> r.expire('uname',10) #让数据10秒后过期
    True
    >>> r.exists('uname')
    False
    >>> r.ttl('level') #看剩余过期时间 不存在或者没有设置过期时间是没有任何返回的
    55L
    >>> r.ttl('uname')

    >>> r.expire('a1',10)
    True
    >>> r.ttl('a1')
    7L
    >>> r.ttl('a1')
    6L
    >>> r.ttl('a1')
    -2L
    >>> r.exists('a1')
    False
    过期后没这个key了

    整理:
    添加K-V:
    r.set('name','jin')
    r.append('age',28)
    r.getset('name','diege') 存新数据时将上次存储内容同时返回出来
    r.incr('age',10) 递增赋值,每执行一次它自加一个步长(可以指定偏移)
    r.decr('age',10) 递减赋值,每执行一次它自加一个步长(可以指定偏移)
    获取value
    r.get('name')
    r['name']
    同时取一批:r.mget('a1','b1')
    删除:
    对象delete方法 r.delete('sex')删数据1是删除成功 0和None是没这个东西
    del方式 del r['name']

    (二)、序列(list)操作
    # 双向序列,两头通的
    左塞
    >>> r.lpush('b','b1')
    1L
    >>> r.lpush('b','b2')
    2L
    lpushx(self, name, value)
    Push ``value`` onto the head of the list ``name`` if ``name`` exists
    对象不存在的话,不会添加,返回0

    # 看长度
    >>> r.llen('b')
    2

    # 列出一批出来
    >>> r.lrange('b',start=0,end=-1)
    ['b2', 'b1']
    >>> r.lrange('b',start=0,end=2)
    ['b4', 'b5', 'b4']
    包括end
    q
    右塞
    >>> r.rpush('b','b3')
    3L
    >>> r.lrange('b',start=0,end=-1)
    ['b2', 'b1', 'b3']

    # 取出一位
    >>> r.lindex('b',0)
    'b2'
    >>> r.lindex('b',-1)
    'b1'

    # 修剪列表
    #若start 大于end,则将这个list清空
    >>> r.ltrim('b',start=0,end=2)
    True
    >>> r.lrange('b',start=0,end=-1)
    ['b4', 'b5', 'b4']
    和切片还不一样,包括了end

    # 排序
    >>> r.lrange('c',start=0,end=-1)
    ['1', '3', '5', '3', '2']
    >>> r.sort('c')
    ['1', '2', '3', '3', '5']
    >>> r.lrange('d',start=0,end=-1)
    ['a1', 'a3', 'a2', 'b1', 'b3', 'b2']
    >>> r.sort('d')
    Traceback (most recent call last):
    redis.exceptions.ResponseError: One or more scores can't be converted into double

    #移除并返回r.rpop()
    >>> r.lrange('a',start=1,end=-1)
    ['4', '2', '4', '2', '1', '1', '2', '3']
    >>> r.rpop('a')
    '3'
    >>> r.lrange('a',start=1,end=-1)
    ['4', '2', '4', '2', '1', '1', '2']

    删除列表元素lrem
    | lrem(self, name, value, num=0)
    | Remove the first ``num`` occurrences of elements equal to ``value``
    | from the list stored at ``name``.
    |
    | The ``num`` argument influences the operation in the following ways:
    | num > 0: Remove elements equal to value moving from head to tail.
    | num < 0: Remove elements equal to value moving from tail to head.
    | num = 0: Remove all elements equal to value.

    >>> r.lrem('a',4)
    2L
    >>> r.lrange('a',start=1,end=-1)
    ['2', '2', '1', '1', '2']
    num=0时删除所有匹配该值的元素
    ['2', '2', '1', '1', '2']
    num>0时从头到尾的删除
    >>> r.lrem('a',2,1)
    1L
    >>> r.lrange('a',start=1,end=-1)
    ['2', '1', '1', '2']
    num<0时从尾到头的删除
    >>> r.lrange('a',start=1,end=-1)
    ['2', '1', '1']
    同时这个num也是要删除的个数
    >>> r.lrem('a',1,2)
    2L
    >>> r.lrange('a',start=1,end=-1)
    ['2']

    整理:
    向序列添加数据
    r.rpush('a',1) 右添加
    r.lpush('a',3) 左添加
    r.lpushx(name, value)对象不存在的话,不会添加,返回0
    获序列长度 r.llen('b')
    取出序列中制定位置的元素 r.lindex('b',2)
    查看序列所有元素 r.lrange('a',start=1,end=-1)
    修剪序列 r.ltrim('a',start=0,end=2) 得到剩下的,包含end位置的元素。若start 大于end,则将这个序列清空
    排序 r.sort('a') #序列是字符串没有成功
    从序列中删除元素并返回 r.rpop()
    从序列中删除元素 r.lrem(name, value, num) num是删除的个数,num = 0全部删除,num>0时从头到尾的删除,num<0时从尾到头的删除
    清空序列:r.ltrim('a',start=1,end=0) 裁剪的特殊用法

    (三)集合
    # 塞数据 sadd
    >>> r.sadd('b','b1')
    1
    >>> r.sadd('b','b2')
    1
    >>> r.sadd('b','b3')
    1

    # 获取集合元素个数,不存在的集合为0 scard
    >>> r.scard('b')
    3
    >>> r.scard('c')
    0

    # 判断set中是否有元素 sismember
    >>> r.sismember('b','b1')
    True
    >>> r.sismember('b','b5')
    False

    # 求交集 sinter
    >>> r.sadd('d','d1')
    1
    >>> r.sadd('d','d2')
    1
    >>> r.sadd('d','d3')
    1
    >>> r.sadd('d','b2')
    1
    >>> r.sinter('b','d')
    set(['b2'])

    #求交集并将结果赋值 sinterstore
    >>> r.sinterstore('newvar','b','d')
    1
    #赋值给的新对象还是一个set
    # 看一个set对象
    r.smembers('newvar')

    # 求并集 sunion
    >>> r.sunion('b','d')
    set(['b1', 'b2', 'b3', 'd2', 'd3', 'd1'])

    #求并集 并将结果赋给新的集合对象 sunionstore
    >>> r.sunionstore('e','b','d')
    6
    给新集合e
    确认
    r.smembers('e')
    >>> r.smembers('e')
    set(['b1', 'b2', 'b3', 'd2', 'd3', 'd1'])

    # 求两个集合的不同 sdiff
    >>> r.sdiff('s1','s2') #在s1中有,在s2中没有的
    set(['t5', 't1'])
    >>> r.sdiff('s2','s1') #在s2中有,在s1中没有的
    set([])
    >>> r.sdiff('s1','s2','s3') # 在s1中有,但在s2和s3中都没有的数
    set(['t5', 't1'])

    将两和集合的不同赋给新的集合对象 sdiffstore
    >>> r.sdiffstore('f','s1','s2')
    2
    >>> r.smembers('f')
    set(['t5', 't1'])

    # 取个随机数 srandmember
    >>> r.srandmember('s1')
    't2'
    >>> r.srandmember('s1')
    't3'

    #从集合中删除元素 r.srem
    >>> r.smembers('e')
    set(['b1', 'b2', 'b3', 'd2', 'd3', 'd1'])
    >>> r.srem('e','b3') #删除一个
    1
    >>> r.smembers('e')
    set(['d3', 'd2', 'b1', 'b2', 'd1']
    >>> r.srem('e','b1','b2') #删除多个
    2
    >>> r.smembers('e')
    set(['d2', 'd3', 'd1'])

    #整理
    向集合添加元素 r.sadd('s','s1')
    获取set的元素个数 r.scard('b') 不存在的集合为0
    查看整个set的元素 r.smembers('s')
    判断set中是否有某个元素 r.sismember('b','b1')
    取个随机数 r.srandmember(s)
    删除r.srem('s','s1','s2') 从s中删除s1和s2两个元素
    求交集 r.sinter('b','d')
    求交集并将结果赋值 r.sinterstore('newvar','b','d')
    求并集 r.sunion('b','d','f')
    求并集 并将结果赋给新的集合对象 r.sunionstore('e','b','d')
    两个集合的不同 r.sdiff('s1','s2') #在s1中有,在s2中没有
    两个集合的不同赋给新集合 r.sdiffstore('f','s1','s2')

    (四)有序集合zset (方法不是很明白)
    zadd 添加
    zcard 数量
    zincr 自加1
    zrange 取数据
    zrangebyscore 按照积分(范围)取数据
    zrem 删除
    zscore 取积分

    添加
    >>> r.zadd('my-key', 'name1', 1.1, 'name2', 2.2, name3=3.3, name4=4.4)
    4
    数量
    >>> r.zcard('my-key')
    4
    取数据
    >> r.zrange('my-key',start=0,end=-1)
    ['name1', 'name2', 'name3', 'name4']

    import time
    t1 = time.time()
    import redis
    r = redis.Redis("localhost")
    for i in xrange(1):
    a=r.set(i, i)
    b=r.get(i)
    print b

    r.lpush('book','book1')
    r.lpush('book','book2')
    print 'list llen:',r.llen('book')
    print 'list lrange:',r.lrange('book',start=0,end=-1)
    print 'list index:',r.lindex('book',1)

    r.sadd('xiaoming','song1')
    r.sadd('xiaoming','song2')
    print 'set scard:',r.scard('xiaoming')
    print 'set sismember:',r.sismember('xiaoming','song1')
    r.sadd('lily','song1')
    print 'sinter:',r.sinter('xiaoming','lily')
    print 'set smembers:',r.smembers('xiaoming')

    r.zadd(u'zset','xiaoming',2)
    r.zadd(u'zset','lily',1)
    print 'zrange:',r.zrange('zset',0,-1)
    print 'zrangebyscore:',r.zrangebyscore('zset',1,1)

    print time.time()-t1

    总结:
    1)string类型
    添加K-V:
    r.set('name','jin')
    r.append('age',28)
    r.getset('name','diege') 存新数据时将上次存储内容同时返回出来
    r.incr('age',10) 递增赋值,每执行一次它自加一个步长(可以指定偏移)
    r.decr('age',10) 递减赋值,每执行一次它自加一个步长(可以指定偏移)
    获取value
    r.get('name')
    r['name']
    同时取一批:r.mget('a1','b1')
    删除:
    对象delete方法 r.delete('sex')删数据1是删除成功 0和None是没这个东西
    del方式 del r['name']

    2)list类型
    向序列添加数据
    r.rpush('a',1) 右添加
    r.lpush('a',3) 左添加
    r.lpushx(name, value)对象不存在的话,不会添加,返回0
    获序列长度 r.llen('b')
    取出序列中制定位置的元素 r.lindex('b',2)
    查看序列所有元素 r.lrange('a',start=1,end=-1)
    修剪序列 r.ltrim('a',start=0,end=2) 得到剩下的,包含end位置的元素。若start 大于end,则将这个序列清空
    排序 r.sort('a') #序列是字符串没有成功
    从序列中删除元素并返回 r.rpop()
    从序列中删除元素 r.lrem(name, value, num) num是删除的个数,num = 0全部删除,num>0时从头到尾的删除,num<0时从尾到头的删除
    清空序列:r.ltrim('a',start=1,end=0) 裁剪的特殊用法

    3)set类型
    向集合添加元素 r.sadd('s','s1')
    获取set的元素个数 r.scard('b') 不存在的集合为0
    查看整个set的元素 r.smembers('s')
    判断set中是否有某个元素 r.sismember('b','b1')
    取个随机数 r.srandmember(s)
    删除r.srem('s','s1','s2') 从s中删除s1和s2两个元素
    求交集 r.sinter('b','d')
    求交集并将结果赋值 r.sinterstore('newvar','b','d')
    求并集 r.sunion('b','d','f')
    求并集 并将结果赋给新的集合对象 r.sunionstore('e','b','d')
    两个集合的不同 r.sdiff('s1','s2') #在s1中有,在s2中没有
    两个集合的不同赋给新集合 r.sdiffstore('f','s1','s2')

    4)zset类型
    zadd 添加
    zcard 数量
    zincr 自加1
    zrange 取数据
    zrangebyscore 按照积分(范围)取数据
    zrem 删除
    zscore 取积分

    5)通用方法
    所有对象:r.keys() 可是通配符 r.keys('a*')
    随机获取key:r.randomkey()
    对象是否存在:r.exists('a')
    对象类型判断:r.type('a')
    改名 r.rename('name','uname') 适用于各种类型
    设置过期时间 r.expire('uname',10) 适用于各种类型
    看剩余过期时间 r.ttl('uname') 适用于各种类型 不存在或者没有设置过期时间是没有任何返回的

  • 相关阅读:
    Linux服务安全之TcpWrapper篇
    通过cmd命令到ftp上下载文件
    常见tcp端口
    cmd常用命令
    TeeChart的最小步长和最大步长
    根据指定的commit查找对应的log
    WCF
    在IIS中某一个网站启用net.tcp
    wcf 远程终结点已终止该序列 可靠会话出错
    IIS中的Application.CommonAppDataPath
  • 原文地址:https://www.cnblogs.com/diege/p/3761440.html
Copyright © 2011-2022 走看看