String 字符串:字符串、整数、浮点数
命令:GET、SET、DEL
incr:将键值加上1
decr:将键值减去1
incrby key-name amount 将键值加上整数amount
decrby key-name amount 将键值减去整数amount
incrbyfloat key-name amount 将键值加上浮点数amount(2.6以上可用)


import redis
conn=redis.Redis(host=’192.168.154.128’)
conn.get(‘key’)
conn.incr(‘key’,15)
conn.decr(‘key’,15)
conn.get(‘key’)
conn.set(‘key’,1)
conn.incr(‘key’)


处理字符串和二进制位:
append key-name value 将value追加到给定键key-name当前存储的值的末尾
getrange key-name start end 获取一个由start到end范围内的字串【start,end】
setrange key-name offset value 从start开始的字串设定为给定值
getbit key-name offset 将字符串看作二进制串,并返回串中偏移量为offset的二进制的值
setbit key-name offset value 将字符串看作二进制串,并将串中偏移量为offset的二进制的值设置为value
bitcount key-name [start end] 统计【start,end】范围内,值为 1 的数量
bitop operation dest-key key-name 【key-name…】对一个或多个二进制串执行 and or xor not 在内的任意一种按位操作,并将结果保存在dest-key键中

LIST 链表
命令:
RPUSH 将给定值推入列表的右端
LPUSH 将给定值推入列表的左端
LRANGE 获取列表在给定范围内的所有值
LINDEX 获取列表在给定位置上的单个元素
LPOP 从列表的左端弹出一个值,并返回被弹出的值
RPOP 从列表的右端弹出一个值,并返回被弹出的值
LTRIM 对列表进行修剪,只保留start和end范围内的元素【start,end】


import redis
conn=redis.Redis(host=’192.168.154.128’)
conn.rpush(‘list-key’, ‘last’)
conn.lpush(‘list-key’, ‘first’)
conn.lrange(‘list-key’, 0, -1)
conn.lpop(‘list-key’)
conn.rpush(‘list-key’, ‘a’, ‘b’, ‘c’)
conn.ltrim(‘list-key’, 2, -1)
BLPOP:BLPOP key-name [key-name …] timeout 从一个非空列表中弹出最左端的元素,或者在timeput秒内阻塞并等待可弹出的元素出现
BRPOP:BLPOP key-name [key-name …] timeout 从一个非空列表中弹出最右端的元素,或者在timeput秒内阻塞并等待可弹出的元素出现

RPOPLPUSH:RPOPLPUSH source-key dest-key 从source-key列表中弹出位于最右端的元素,然后将这个元素push到dest-key的最左端,并向用户返回这个元素
BRPOPLPUSH:BRPOPLPUSH source-key dest-key timeout 从source-key列表中弹出位于最右端的元素,然后将这个元素push到dest-key的最左端,并向用户返回这个元素;如果source-key为空,那么在timeout秒内阻塞并等待可pop的元素出现。


conn.rpush(‘list’, ‘item1’)
conn.rpush(‘list’, ‘item2’)
conn.rpush(‘list2’, ‘item3’)
conn.brpoplpush(‘list2’, ‘list’, 1)
conn.brpoplpush(‘list2’, ‘list’, 1)
conn.brpoplpush(‘list’, ‘list2’, 1)
conn.blpop([‘list’, ‘list2’], 1) //blpop命令会从左到右对传入的列表进行检查,并对最先遇到的非空列表进行lpop操作。
conn.blpop([‘list’, ‘list2’], 1)
conn.blpop([‘list’, ‘list2’], 1)
conn.blpop([‘list’, ‘list2’], 1)


对于阻塞型命令和弹出并推入命令,最常见的用例就是消息传递和任务队列。

SET 无序集合
命令:
SADD 添加
SMEMBERS 返回set包含的所有元素
SISMEMBER 判断给定元素是否在set中
SREM 删除元素
SCARD 返回集合包含的元素数量
SRANDMEMBER:SRANDMEMBER key-name [count] 从集合中随机返回一个或者多个元素。当count为正数时,返回的随机元素不会重复;当count为负数时,返回的随机元素可能重复。
SPOP 随机的pop一个元素,并返回被移除的 元素
SMOVE:SMOVE source-key dest-key item 如果source-key里包含item,将itme从source-key里删除,添加到dest-key中;如果item成功删除返回1,否则返回0;


conn.sadd(‘set-key’, ‘a’, ‘b’, ‘c’)
3
conn.srem(‘set-key’, ‘c’, ‘d’)
1
conn.scard(‘set-key’)
2
conn.smembers(‘set-key’)
set([‘a’, ‘b’])
conn.smove(‘set-key’, ‘set-key2’, ‘a’)
True 测试smove命令,返回值为true和false
conn.smove(‘set-key’, ‘set-key2’, ‘c’)
False
conn.smembers(‘set-key2’)
set([‘a’])

SDIFF key-name [key-name …] 数学上的求差运算
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’])

HASH 散列 —键值对
命令:
HSET
HGET
HMSET 为hash里的一个或者多个设置值
HMGET 从hash里获取一个或者多个键的值
HGETALL
HDEL 删除hash里一个或者多个键值对,返回成功找到并删除的键值对的数量
HLEN 键值对数量


conn.hmset(‘hash-key’, {‘k1’:’v1’, ‘k2’:’v2’, ‘k3’:’v3’})
True
conn.hmget(‘hash-key’, [‘k2’, ‘k3’])
[‘v2’, ‘v3’]
conn.hlen(‘hash-key’)
3
conn.hdel(‘hash-key’, ‘k1’, ‘k3’)
True

HEXISTS key-name key 检查给定键是否在hash中
HKEYS key-name 获取hash中所有的键
HVALS key-name 获取hash中所有的值
HGETALL key-name 获取hash中所有的键值对
HINCRBY key-name key increment 将键key的值加上整数increment
HINCRBYFLOAT 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’)
False
conn.hincrby(‘hash-key2’, ‘num’)
1L
conn.hexists(‘hash-key2’, ‘num’)
True

ZSET 有序集合
命令:
ZADD key-name score member [score member…] 将带有给定分值的成员添加到zset里
ZRANGE 根据元素在有序set中的位置,从中获取多个元素
ZRANGEBYSCORE 获取给定分值范围内的所有元素
ZREM key-name member [member…]
ZCARD key-name 返回zset中成员数量
ZINCRBY key-name increment member 将member成员的分值加上increment
ZCOUNT key-name min max 返回在[min,max]之间的成员数量
ZRANK key-name member 返回member在zset中的排名
ZSCORE key-name member 返回member的分值
ZRANGE key-name start stop [WITHSCORES] 返回zset中排名在【start,stop】之间的成员,如果给定了WITHSCORES选项,那么命令会将成员的分值一起返回。


conn.zadd(‘zset-key’, ‘a’, 3, ‘b’, 2, ‘c’, 1)
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)
2L
conn.zrem(‘zset-key’, ‘b’)
1
conn.zrange(‘zset-key’, 0, -1, withscores=True)
[(‘a’, 3.0), (‘c’, 4.0)]

关键字:REV(逆序) REM(删除) RANK RANGE WITH SCORE
关于zset的范围型获取命令和范围型数据删除命令 和集合操作命令
排名
ZREVRANK key-name member 获取member的位置,成员按照从大到小排序
ZREVRANGE key-name start stop[WITHSCORES] 返回【start,stop】排名在这个范围内的成员,成员按照从大到小排序

分值大小
ZRANGEBYSCORE key-name min max[WITHSCORES] [LIMIT offset count]获取分值在【min,max】区间内的成员
ZREVRANGEBYSCORE key-name min max[WITHSCORES] [LIMIT offset count]获取分值在【min,max】区间内的成员,按照从大到小排序 的顺序返回。

ZREMRANGEBYRANK key-name start stop 删除排名在【start,stop】区间内的成员
ZREMRANGEBYSCORE key-name min max 删除分值在【min,max】区间内的成语

ZINTERSTORE dest-key key-count key [key…] [WEIGHTS weight [weight…]] [AGGREGATE SUM|MIN|MAX] 对给定的zset执行类似于集合交集的运算。
ZUNIONSTORE dest-key key-count key [key…] [WEIGHTS weight [weight…]] [AGGREGATE SUM|MIN|MAX] 对给定的zset执行类似于集合并集的运算。


conn.zadd(‘zset-1’, ‘a’, 1, ‘b’, 2, ‘c’, 3)
3
conn.zadd(‘zset-2’, ‘b’, 4, ‘c’, 1, ‘d’, 0)
3
conn.zinterstore(‘zset-i’, [‘zset-1’, ‘zset-2’])
2L
conn.zrange(‘zset-i’, 0, -1, withscores=True)
[(‘c’, 4.0), (‘b’, 6.0)] zinterstore和zunionstore默认使用的聚合函数为sum,这个函数会把各个有序集合的成员的分值给加起来。
conn.zunionstore(‘zset-u’, [‘zset-1’, ‘zset-2’], aggregate=’min’)
4L 可以在执行交并操作时,指定聚合函数
conn.zrange(‘zset-u’, 0, -1, withscores=True)
[(‘d’, 0.0), (‘a’, 1.0), (‘c’, 1.0), (‘b’, 2.0)]
conn.sadd(‘set-1’, ‘a’, ‘d’)
2
conn.zunionstore(‘zset-u2’, [‘zset-1’, ‘zset-2’, ‘set-1’])
4L 可以把set作为传入参数,命令会将set看作所有成员分值是1的zset处理。
conn.zrange(‘zset-u2’, 0, -1, withscores=True)
[(‘d’, 1.0), (‘a’, 2.0), (‘c’, 4.0), (‘b’, 6.0)]


发布和订阅pub/sub
发布者——>频道<——–定阅者
SUBSCRIBE channel [channel…] 订阅一个或者多个频道
UNSUBSCRIBE [channel [channel…]] 退订给定的一个或者多个频道,如果执行的时候没有给定任何频道,退订所有频道。
PUBLISTH channel message 向给定的频道发布信息
PSUBSCRIBE pattern [pattern…] 订阅与给定模式向匹配的所有频道
PUNSUBSCRIBE [pattern [pattern …]] 退订给定的模式,如果执行的时候没有给定任何模式,退订所有模式。

其他命令:
排序sort:
sort source-key [by pattern] [limit offset count] [get pattern [get pattern …]] [asc|desc] [alpha] [store dest-key] 根据选项,对list、set、zset进行排序,然后返回或者存在排序的结果。

conn.rpush(‘sort-input’, 23, 15, 110, 7)
4
conn.sort(‘sort-input’)
[‘7’, ‘15’, ‘23’, ‘110’]
conn.sort(‘sort-input’, alpha=True) 按字母顺序(进行排列)的
[‘110’, ‘15’, ‘23’, ‘7’]
conn.hset(‘d-7’, ‘field’, 5)
1L
conn.hset(‘d-15’, ‘field’, 1)
1L
conn.hset(‘d-23’, ‘field’, 9)
1L
conn.hset(‘d-110’, ‘field’, 3)
1L
conn.sort(‘sort-input’, by=’d-*->field’) 将hash的值作为权重,对sort-input排序
[‘15’, ‘110’, ‘7’, ‘23’]
conn.sort(‘sort-input’, by=’d-->field’, get=’d-->field’) 获取外部数据,并将它们用作命令返回值,而不是被排序的数据。
[‘1’, ‘3’, ‘5’, ‘9’]

Redis事务
watch
multi
exec
unwatch
discard

redis基本事务
watch
exec
在一个客户端不被其他客户端打断的情况下执行多个命令。
在redis里,被multi和exec命令包围的所有命令会一个一个执行,直到所有命令执行完毕为止。当一个事务执行完毕,才会执行其他客户端的命令。

multi
要执行的命令
exec

当redis从一个客户端接收到multi命令时,redis会将这个客户端之后发送的所有命令都放入到一个队列里,直到这个客户端发送exec命令为止,然后redis就会在不被打断的情况下,一个一个地执行存储在队列里面的命令。

键的过期时间:
redis的过期时间特性(expiration)让一个键在给定的时限(timeout)后被自动删除。

用于处理过期时间的redis命令:
persist key-name 移除键的过期时间
ttl key-name 查看给定键距离过期还有多少秒
expire key-name seconds 让给定键在指定的秒数之后过期
expireat key-name timestemp 将给定键的过期时间设置为给定的unix时间戳
pttl key-name 查看给定键距离过期时间还有多少毫秒,这个命令在redis2.6或以上使用
pexpire key-name milliseconds 让给定键在指定的毫秒数之后过期,
pexpireat key-name timepstamp-milliseconds 将给定键的过期时间设置为给定的毫秒级unix时间戳,这个命令在redis2.6或以上使用

conn.set(‘key’, ‘value’)
True
conn.get(‘key’)
‘value’
conn.expire(‘key’, 2)
True
time.sleep(2)
conn.get(‘key’)
conn.set(‘key’, ‘value2’)
True
conn.expire(‘key’, 100); conn.ttl(‘key’)
True
100