第5章实践
5.3 python与redis
5.3.1安装
pip install redis
5.3.2使用方法
- 自己补充内容:Ubuntu下redis开启远程连接
- 打开redis配置:sudo vi /etc/redis/redis.conf
- 注释掉"bind 127.0.0.1",或者修改为"bind 0.0.0.0"
- 重启redis服务:sudo /etc/init.d/redis-server restart
import redis
r = redis.StrictRedis('176.216.1.139',6379,0)
r.set('foo','Hello Python')
print(r.get('foo'))
其他教程
博客地址:http://www.cnblogs.com/cnkai/p/7642787.html
博客地址:https://www.cnblogs.com/clover-siyecao/p/5600078.html
-
key操作
-
exists(name)
判断一个key是否存在,返回值1或0In [1]: import redis
In [2]: r = redis.StrictRedis('176.216.1.139',6379,0)
In [3]: r.exists('book')
Out[3]: 1
In [4]: r.exists('bok')
Out[4]: 0 -
delete(name)
删除一个key,返回值1或0In [5]: r.delete('dict')
Out[5]: 1
In [6]: r.delete('dict')
Out[6]: 0 -
type(name)
判断key类型In [7]: r.type('book')
Out[7]: b'list' -
keys(pattern)
获取所有符合规则的key,以列表形式返回库内所有的key.In [8]: r.keys()
Out[8]:
[b'book:Sanguo',
b'book.view',
b'bok:Sanguo',
b'book:Python',
b'bok:Python',
b'bok:Tangshi',
b'foo',
b'book',
b'book:Tangshi'] In [9]: r.keys('book:*')
Out[9]: [b'book:Sanguo', b'book:Python', b'book:Tangshi'] -
randomkey()
随机获取一个keyIn [10]: r.randomkey()
Out[10]: b'book:Sanguo'
In [11]: r.randomkey()
Out[11]: b'bok:Tangshi' -
rename(src, dst)
将key重命名,修改成功返回True.In [15]: r.rename('dict','dictt')
Out[15]: True -
dbsize()
获取当前数据库可以的数目In [23]: r.dbsize()
Out[23]: 10 -
expire(name, time)
设定key的过程时间,单位是秒,设置成功返回TrueIn [27]: r.expire('dictt',300)
Out[27]: True -
ttl(name)
获取key的过程时间,单位秒.-2表示该键不存在,-1表示未设置过期时间In [28]: r.ttl('dictt')
Out[28]: 247
In [29]: r.ttl('dict')
Out[29]: -2
In [30]: r.ttl('book')
Out[30]: -1 -
move(name, db)
将key移动到其他数据库,成功返回TrueIn [31]: r.move('dictt',1)
Out[31]: False
In [32]: r.move('foo',1)
Out[32]: True flushdb()
删除删除当前选择数据库中的所有key,成功返回Trueflushall()
删除所有数据库中的所有key,成功返回True
-
-
String操作
-
set(name, value)
给key赋值为value或者创建key赋值为valueIn [33]: r.set('foo','春江潮水连海平')
Out[33]: True -
get(name)
返回数据库中key为name的string的valueIn [35]: r.get('foo')
Out[35]: b'\xe6\x98\xa5\xe6\xb1\x9f\xe6\xbd\xae\xe6
\xb0\xb4\xe8\xbf\x9e\xe6\xb5\xb7\xe5\xb9\xb3'
In [36]: r.get('foo').decode()
Out[36]: '春江潮水连海平 -
getset(name, value)
给数据库中key为name的string赋予值value并返回上次的valueIn [39]: r.getset('foo','海上明月共潮生').decode()
Out[39]: '春江潮水连海平'
In [40]: r.get('foo').decode()
Out[40]: '海上明月共潮生' -
mget(keys, *args)
以列表形式返回多个key对应的valueIn [41]: r.set('bar','滟滟随波千万里')
Out[41]: True
In [42]: r.mget('foo','bar')
Out[42]:
[b'\xe6\xb5\xb7\xe4\xb8\x8a\xe6\x98\x8e\xe6\x9c\x88
\xe5\x85\xb1\xe6\xbd\xae\xe7\x94\x9f',
b'\xe6\xbb\x9f\xe6\xbb\x9f\xe9\x9a\x8f\xe6\xb3\xa2
\xe5\x8d\x83\xe4\xb8\x87\xe9\x87\x8c'] -
setnx(name, value)
如果key不存在才设置valueIn [44]: r.setnx('foo','何处春江无月明')
Out[44]: False -
setrange(name, offset, value)
设置指定key的value值的子字符串In [60]: r.set('fred','book')
Out[60]: True
In [61]: r.setrange('fred',4,'Sanguo')
Out[61]: 10 -
mset(mapping)
批量赋值In [45]: r.mset({'foo':'good','bar':'book','baz':'look'})
Out[45]: True msetnx(mapping)
key均不存在时才批量赋值incr(name, amount=1)
key为name的value增值操作,默认1,key不存在则被创建并设为amount-
decr(name, amount=1)
key为name的value减值操作,默认1,key不存在则被创建并设置为-amountIn [48]: r.incr('count',100)
Out[48]: 100
n [52]: r.incr('count')
Out[52]: 101
In [53]: r.incr('count')
Out[53]: 102 -
append(key, value)
key为name的string的值附加valueIn [57]: r.set('foo','0123')
Out[57]: True
In [58]: r.append('foo','456')
Out[58]: 7 -
substr(name, start, end=-1)
返回key为name的string的value的子串In [65]: r.substr('foo',0,-1)
Out[65]: b'0123456' -
getrange(key, start, end)
获取key的value值从start到end的子字符串In [63]: r.getrange('fred',0,-1)
Out[63]: b'bookSanguo'
-
-
List操作
-
rpush(name, *values)
在key为name的list尾添加值为value的元素,可以传多个In [66]: r.rpush('lst',0,1,2,3)
Out[66]: 4 -
lpush(name, *values)
在key为name的list头添加值为value的元素,可以传多个In [67]: r.lpush('lst',-2,-1)
Out[67]: 6 -
llen(name)
返回key为name的list的长度In [68]: r.llen('lst')
Out[68]: 6 -
lrange(name, start, end)
返回key为name的list中start至end之间的元素In [69]: r.lrange('lst',0,-1)
Out[69]: [b'-1', b'-2', b'0', b'1', b'2', b'3'] -
ltrim(name, start, end)
截取key为name的list,保留索引为start到end的内容In [70]: r.ltrim('lst',3,-1)
Out[70]: True -
lindex(name, index)
返回key为name的list中index位置的元素In [72]: r.lindex('lst',-1)
Out[72]: b'3' -
lset(name, index, value)
给key为name的list中index位置的元素赋值,越界则报错In [73]: r.lset('lst',0,0)
Out[73]: True -
lrem(name, count, value)
删除count个key的list中值为value的元素In [74]: r.lrem('lst',1,3)
Out[74]: 1 -
lpop(name)
返回并删除key为name的list中的首元素In [75]: r.lpop('lst')
Out[75]: b'0' -
rpop(name)
返回并删除key为name的list中的尾元素In [76]: r.rpop('lst')
Out[76]: b'2' blpop(keys, timeout=0)
返回并删除名称为在keys中的list中的首元素,如果list为空,
则会一直阻塞等待brpop(keys, timeout=0)
返回并删除key为name的list中的尾元素,如果list为空,
则会一直阻塞等待-
rpoplpush(src, dst)
返回并删除名称为src的list的尾元素,并将该元素添加到名称
为dst的list的头部In [82]: r.rpoplpush('lst','book')
Out[82]: b'1'
In [83]: r.lrange('book',0,-1)
Out[83]: [b'1', b'Python', b'Tangshi', b'Sanguo']
-
-
Set操作
-
sadd(name, *values)
向key为name的set中添加元素In [84]: r.sadd('set',0,1,2,10,520,1314)
Out[84]: 6 -
srem(name, *values)
从key为name的set中删除元素In [88]: r.srem('set',0)
Out[88]: 1 -
spop(name)
随机返回并删除key为name的set中一个元素In [89]: r.spop('set')
Out[89]: b'1314' -
smove(src, dst, value)
从src对应的set中移除元素并添加到dst对应的set中In [90]: r.smove('set','gather',1)
Out[90]: True -
scard(name)
返回key为name的set的元素个数In [91]: r.scard('gather')
Out[91]: 1 -
sismember(name, value)
测试member是否是key为name的set的元素In [92]: r.sismember('set',1314)
Out[92]: False -
sinter(keys, *args)
返回所有给定key的set的交集In [93]: r.sadd('gather',2,520,1314)
Out[93]: 3
In [94]: r.sinter('set','gather')
Out[94]: {b'2', b'520'} -
sinterstore(dest, keys, *args)
求交集并将交集保存到dest的集合In [95]: r.sinterstore('collection','set','gather')
Out[95]: 2 sunion(keys, *args)
返回所有给定key的set的并集sunionstore(dest, keys, *args)
求并集并将并集保存到dest的集合sdiff(keys, *args)
返回所有给定key的set的差集sdiffstore(dest, keys, *args)
求差集并将差集保存到dest的集合-
smembers(name)
返回key为name的set的所有元素In [96]: r.smembers('collection')
Out[96]: {b'2', b'520'} -
srandmember(name)
随机返回key为name的set的一个元素,但不删除元素In [97]: r.srandmember('collection')
Out[97]: b'2'
-
-
Sorted Set操作
-
zadd(name, mapping)
向key为name的zset中添加元素In [9]: r.zadd('grade',{'Bob':80,'Mike':61})
Out[9]: 2 -
zrem(name, *values)
删除key为name的zset中的元素In [11]: r.zrem('grade','Bob')
Out[11]: 1 -
zincrby(name, value, amount=1)
如果在key为name的zset中已经存在元素value,则该元素的score增加amount,
否则向该集合中添加该元素,其score的值为amountIn [12]: r.zincrby('garde',9,'Mike')
Out[12]: 9.0 -
zrank(name, value)
返回key为name的zset中元素的排名(按score从小到大排序)即下标In [14]: r.zrank('grade','Mike')
Out[14]: 0 -
zrevrank(name, value)
返回key为name的zset中元素的倒数排名(按score从大到小排序)即下标In [15]: r.zrevrank('grade','Mike')
Out[15]: 1 -
zrevrange(name, start, end, withscores=False)
返回key为name的zset(按score从大到小排序)中的index从start到end的所有元素In [18]: r.zrevrange('grade',0,-1)
Out[18]: [b'Joy', b'Mike']
In [19]: r.zrevrange('grade',0,-1,True)
Out[19]: [(b'Joy', 100.0), (b'Mike', 61.0)] -
zrangebyscore(name, min, max, start=None, num=None,withscores=False)
返回key为name的zset中score在给定区间的元素In [21]: r.zadd('grade',{'Bob':80,'Tom':59,'Alice':89})
Out[21]: 3
In [22]: r.zrangebyscore('grade',60,90,withscores=True)
Out[22]: [(b'Mike', 61.0), (b'Bob', 80.0), (b'Alice', 89.0)] -
zcount(name, min, rmax)
返回key为name的zset中score在给定区间的数量In [25]: r.zcount('grade',60,90)
Out[25]: 3 -
zcard(name)
返回key为name的zset的元素个数In [26]: r.zcard('grade')
Out[26]: 5 zremrangebyrank(name, min, max)
删除key为name的zset中排名在给定区间的元素zremrangebyscore(name, min, max)
删除key为name的zset中score在给定区间的元素
-
-
Hash操作
-
hset(name, key, value)
向key为name的hash中添加映射In [27]: r.hset('car','color','red')
Out[27]: 1 -
hsetnx(name, key, value)
向key为name的hash中添加映射,如果映射键名不存在.In [28]: r.hsetnx('car','color','black')
Out[28]: 0
In [29]: r.hsetnx('car','price',200000)
Out[29]: 1 -
hget(name, key)
返回key为name的hash中field对应的valueIn [30]: r.hget('car','color')
Out[30]: b'red' -
hmget(name, keys, *args)
返回key为name的hash中各个键对应的valueIn [31]: r.hmget('car',('color','price'))
Out[31]: [b'red', b'200000'] -
hmset(name, mapping)
向key为name的hash中批量添加映射In [33]: r.hmset('car',{'name':'BWM','origin':'Germany'})
Out[33]: True -
hincrby(name, key, amount=1)
将key为name的hash中映射的value增加amountIn [38]: r.hincrby('car','price',2)
Out[38]: 200002
In [39]: r.hincrby('car','price')
Out[39]: 200003 -
hexists(name, key)
key为namehash中是否存在键名为key的映射In [41]: r.hexists('car','color')
Out[41]: True -
hdel(name, *keys)
key为namehash中删除键名为key的映射In [42]: r.hdel('car','origin')
Out[42]: 1 -
hlen(name)
从key为name的hash中获取映射个数In [43]: r.hlen('car')
Out[43]: 3 -
hkeys(name)
从key为name的hash中获取所有映射键名In [44]: r.hkeys('car')
Out[44]: [b'color', b'price', b'name'] -
hvals(name)
从key为name的hash中获取所有映射键值In [45]: r.hvals('car')
Out[45]: [b'red', b'200004', b'BWM'] -
hgetall(name)
从key为name的hash中获取所有映射键值对In [46]: r.hgetall('car')
Out[46]: {b'color': b'red', b'name': b'BWM', b'price': b'200004'}
-