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]

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

 

未完待续~~~

 

posted @ 2018-06-25 23:09  frange  阅读(206)  评论(0编辑  收藏  举报