zoukankan      html  css  js  c++  java
  • Redis常用命令

    注:本文整理自《Redis实战》

    Redis简介:

           Redis为内存型数据库,所以速度非常快,性能强劲,Redis为NoSQL(非关系型数据库),可以存储键(key)与5中不同类型的值(value)之间的映射,五种数据类型分别为:STRING(字符串)、LIST(链表)、SET(集合)、HASH(散列)和ZSET(有序集合)。下面总结这五种数据结构常用的命令。

     本文选自用python 操作Redis, redis模块

     安装redis模块

    pip install redis

    一、字符串类型

    Redis 字符串可以存储3中数据类型:字节串、整数、浮点数。

    1、字节串常用命令

    set(key,value)             

      设置key值为value

    get(key)                     

      获取key对应的值

    append(key, value)     

      在值后面他添加新串value

    substr(key, start, end) 

      将key对应的值截取下标从start到end的子串,

    setrange(key, index, value) 

      将第index位置的值设置为value(如果index小于原值长度,则将替换原数据)

    >>> conn.get('key')
    '1311'
    >>> conn.append('key', 'hello')
    9L
    >>> conn.get('key')
    '1311hello'
    >>> conn.setrange('key', 2,'how are you')
    13
    >>> conn.get('key')
    '13how are you'
    >>> conn.setrange('key', 2,'ww')
    13
    >>> conn.get('key')
    '13www are you'
    

      

      

    2、整数浮点数的自增

    对于整数,浮点数常用的为运算:INCR(加1),DECR(减1),INCRBY(加上整数),DECRBY(减去整数), INCRBYFLOAT(加上浮点数)

    >>> import redis
    >>> conn = redis.Redis() # 创建连接
    >>> conn.get('keys') 
    >>> conn.set('keys', 10) #创建一个键为keys的存储
    True
    >>> conn.get('keys') # 获取keys键对应的值
    '10'
    >>> conn.incr('keys', 5) # 将keys对应的值加5
    15
    >>> conn.get('keys')
    '15'
    >>> conn.decr('keys', 5) # 将keys对应的值减5
    10
    >>> conn.get('keys')
    '10'
    >>> conn.set('keys', '20') # 将keys值重置为20
    True
    >>> conn.get('keys')
    '20'
    >>> conn.incr('keys') # 如果加法没写参数则默认为加1,减法同理
    21
    >>> conn.incrbyfloat('keys',3.3)  # 加上浮点数3.3
    24.3 
    

      

    二、列表

    RPUSH  key-name value . . .                   

      将一个或多个值推入列表右端

    LPUSH key-name value . . .                   

      将一个值个推入键对应的列表左端

    RPOP key-name                                

      从列表右端移除并返回元素

    LPOP key-name                             

      从列表左端移除并返回元素

    LINDEX key-name start end                 

      返回列表中下标的元素

    LRANGE key-name start end               

      返回列表从start 到end的下标的所有元素

    LTRIM key-name start end                   

      对列表进切割,保留下标为start到end范围内的元素

    RPOPLPUSH source-key dest-key       

      从source-key列表中弹出最右边的元素并推入dest-key列表最左端,并返回这个元素

    BRPOPLPUSH soure-key dest-key timeout 

      作用同上,但是如果source-key为空。在timeout秒之内阻塞并等待可以弹出的元素

    BLPOP                                             

      从列表集中从左到有弹出多个元素

    >>> conn.lpush('list-key', 'item')
    1L
    >>> conn.lpush('list-key', 'item2')
    2L
    >>> conn.rpush('list-key', 'last')
    3L
    >>> conn.lpush('list-key', 'first')
    4L
    >>> conn.rpush('list-key', 'new last')
    5L
    >>> conn.lrange('list-key', 0, -1)
    ['first', 'item2', 'item', 'last', 'new last']
    >>> conn.lpop('list-key')
    'first'
    >>> conn.lpop('list-key')
    'item2'
    >>> conn.lrange('list-key', 0, -1)
    ['item', 'last', 'new last']
    >>> conn.ltrim('list-key',2, -1)
    True
    >>> conn.lrange('list-key', 0, -1)
    ['new last']
    >>> conn.blpop(['list1','list2'], 1)
    >>> 
    >>> conn.lpush('list1', 'hello world') 
    1L
    >>> conn.blpop(['list1','list2'], 1) # 从list1, list2中弹出一个元素
    ('list1', 'hello world')
    >>> conn.lpush('list2', 'hello redis')
    1L
    >>> conn.blpop(['list1','list2'], 1)
    ('list2', 'hello redis')
    

      

    三、集合

    Redis集合是以无序的方式存储多个不同的元素。

    SADD key-name item [item ...]                       

      将一个或多个元素添加到集合里面,并返回被添加元素当中并不存在与集合里面的元素数量

    SREM key-name item [item . . . ]                     

      从集合里面移除一个或多个元素,返回被移除的数量

    SISMEMBER key-name i tem                       

      检查元素是否存在于集合中

    SCARD key-name                                             

      返回集合包含的元素数量

    SRANDMEMBER key-name count                   

         从集合里面随机地返回一个或多个数据(当count为正数时,返回的随机元素不会重复,当count为负数时,返回的元素可能重复)

    SPOP key-name                                               

         随机从集合中移除一个元素,并返回被移除的元素

    SMOVE source-key dest-key item                           

         如果集合source-key包含元素item,从source-key中移除item并添加到dest-key中,如果被成功移除返回1, 否则返回0

    >>> conn.sadd('set-key', 'a', 'b', 'c') # 向集合中添加元素,如集合不存在,,则直接创建集合
    3
    >>> conn.srem('set-key', 'c', 'd')
    1
    >>> conn.srem('set-key', 'c', 'd')
    0
    >>> conn.scard('set-key')
    2
    >>> conn.smembers('set-key')
    set(['a', 'b'])
    >>> conn.smembers('set-key', 'set-key2', 'a')
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: smembers() takes exactly 2 arguments (4 given)
    >>> conn.smove('set-key', 'set-key2', 'a')
    True
    >>> conn.smove('set-key', 'set-key2', 'c')
    False
    >>> conn.smembers('set-key2')
    set(['a'])

    组合和处理多个集合

    SDIFF key-name [keyname ...]                                       

      返回存在于第一个集合、但是不存在与其他集合中的元素(差集)

    SDIFFSTORE dest-key key-name [key-name ...]     

      将存在于第一个集合但是不存在于其他集合中的元素存储到dest-key键里面

    SINTER key-name [key-name . . .]                           

      返回那些同时存在于集合中的元素(交集)

    SINTERSTORE dest-key key-name [key-name . . . ] 

      将同时存在于所有集合的元素添加到dest-key键里面

    SUNION key-name [key-name . . .]                       

      返回至少存在于一个集合中的元素(并集)

    SUNIONSTORE dest-key key-name [key-name . . .] 

      讲那些至少存在于一个集合的元素添加到dest-key键里面

    >>> conn.sadd('skey1', 'a', 'b', 'c', 'd')
    4
    >>> conn.sadd('skey2', 'c', 'd', 'e', 'f')
    4
    >>> conn.sdiff('skey1','skey2')
    set(['a', 'b'])
    >>> conn.sinter('skey1','skey2')
    set(['c', 'd'])
    >>> conn.sunion('skey1', 'skey2')
    set(['a', 'c', 'b', 'e', 'd', 'f'])  

    四、散列

    Redis散列可以将多个键值对存储于一个Redis键里面。

    HMGET key-name key [key . . . ]           

      从散列中获取一个或多个键的值

    HMSET key-name key value [key value . . .] 

      为散列里面的一个或多个键设置值

    HDEL key-name key [key . . ]                   

      删除散列里面的一个或多个键值对, 返回成功找到并删除的键值对数量

    HLEN key-name                                   

      返回散列包含的键值对数量

    >>> conn.hmset('hash-key', {'k1':'v1', 'k2':'v2', 'k3':'v3', 'k4':'v4'})
    True
    >>> conn.hmget('hash-key', ['k1','k2'])
    ['v1', 'v2']
    >>> conn.hlen('hash-key')
    4
    >>> conn.hdel('hash-key', 'k1', 'k2') #删除k1, k2 返回删除的元素个数 
    2 

    较为高级的命令

    HEXISTS key-name key                   

      检查给定的键是否存在于散列中

    HKEYS key-name                           

      获取散列包喊得所有键

    HVALS key-name                               

      获取散列包含的所有值

    HGETALL key-name                           

      获取散列包含的所有键值对

    HINCRBY key-name key increment     

      将键key存储的值加上整数increment

    HINCRBYFLOAL key-name key increment

      将键key存储的值加上浮点数increment

    >>> conn.hmset('hash-key2', {'short':'hello', 'long':1000*'1'})
    True
    >>> conn.hkeys('hash-key2')
    ['long', 'short']
    >>> conn.hexists('hash-key2', 'num') # 检查元素‘num’是否在hash-key2中
    False
    >>> conn.hincrby('hash-key2', 'num')
    1L
    >>> conn.hexists('hash-key2', 'num')
    True

    五、有序集合

    有序集合存储着成员与分值之间的映射,可以根据分值有序的获取成员和分值。

     SADD key-name score member [score member . . . ]

      将带有给定分值的成员添加到有序集合里面

    ZREM key-name member [member . . .]

      从有序集合里面移除给定的成员, 并返回被移除成员的数量

    ZINCRBY key-name increment member 

      将member成员的分值加上increment

    ZCOUNT key-name min max 

      返回分值介于min和max之间成员数量 

    ZRANK key-name member 

      返回成员member在有序集合中的排名

    ZSCORE key-name member 

      返回成员member的分值

    ZRANGE key-name start stop [WTHSCORES] 

      返回有序集合中排名介于start和stop之间的成员,如果给定了可选的WITHSCORES选项, 那么命令会将成员的分值也一并返回

    >>> import redis
    re>>> conn = redis.Redis()
    >>> conn.zadd('zset-key', 'a', 3, 'b', 2, 'c', 1) # 在Redis标准中先输入分值,后输入成员
    3
    >>> conn.zcard('zset-key') # 返回有序集合中包含的数量
    3
    >>> conn.zincrby('zset-key', 'c', 3) # 有序集合的增加
    4.0
    >>> conn.zscore('zset-key', 'b') # 获取单个成员的分值
    2.0
    >>> conn.zrank('zset-key', 'c') #获取指定成员的排名
    2
    >>> conn.zcount('zset-key', 0, 3) # 统计分值为0-3之间的成员数量
    2L
    >>> conn.zrem('zset-key', 'b') # 从有序集合中移除成员
    1
    >>> conn.zrange('zset-key', 0, -1, withscores=True) #取出有序集合中所有元素,也可以取出一部分元素
    [('a', 3.0), ('c', 4.0)] 

    有序集合中氛围型数据获取及删除命令

    ZREVRANK key-name member

      返回有序集合里面成员member的排名,成员按照分值大小排列

    ZREVRANGE key-name start stop [WITHSCORES] 

      返回有序集合给定排名范围内的成员,成员按照分值由大到小排列

    ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]

      返回有序集合中,分值介于min和max之间的所有成员

    ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]

      获取有序集合中分值介于min和max之间的所有成员,并按照分值从大到小的顺序返回他们

    ZREMRANGEBYRANK key-name start stop

      移除有序集合中分值结余min和max之间的所有成员

    ZREMRANGEBYSCORE key-name min max

      移除有序集合中分值结余min和max之间的所有成员

    ZINTERSTORE dest-key key-count key [key . . . ] WEIGHTS weight [weight]] [AGGREGATE SUM|MIN|MAX]

      对给定的有序集合执行类似于集合的交集运算

    ZUNIONSTORE dest-key key-count key [key . . . ] WEIGHTS weight [weight]] [AGGREGATE SUM|MIN|MAX]

      对给定的有序集合执行类似于集合的并集运算

     

    未完待续~~~

  • 相关阅读:
    macaca 测试web(2)
    macaca测试web小例子
    macaca 环境搭建篇,(web 和安卓)
    接口测试 mock server 工具moco
    badboy 录制脚本并并发脚本
    一个面试小题(今年年初在团结湖面试的一个题目)
    python 算法学习部分代码记录篇章1
    uiautomator +python 实现安卓自动化
    python 数据驱动(ddt)
    u3d 2D开发学习
  • 原文地址:https://www.cnblogs.com/Frange/p/9221195.html
Copyright © 2011-2022 走看看