Redis自學筆記:5.實踐
第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或0
In [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或0 In [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()
隨機獲取一個key
In [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的過程時間,單位是秒,設置成功返回True
In [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移動到其他數據庫,成功返回True
In [31]: r.move(‘dictt‘,1) Out[31]: False In [32]: r.move(‘foo‘,1) Out[32]: True
flushdb()
刪除刪除當前選擇數據庫中的所有key,成功返回Trueflushall()
刪除所有數據庫中的所有key,成功返回True
- exists(name)
- String操作
- set(name, value)
給key賦值為value或者創建key賦值為value
In [33]: r.set(‘foo‘,‘春江潮水連海平‘) Out[33]: True
- get(name)
返回數據庫中key為name的string的value
In [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並返回上次的value
In [39]: r.getset(‘foo‘,‘海上明月共潮生‘).decode() Out[39]: ‘春江潮水連海平‘ In [40]: r.get(‘foo‘).decode() Out[40]: ‘海上明月共潮生‘
- mget(keys, *args)
以列表形式返回多個key對應的value
In [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不存在才設置value
In [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不存在則被創建並設置為-amount
In [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的值附加value
In [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‘
- set(name, value)
- 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‘]
- rpush(name, *values)
- 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‘
- sadd(name, *values)
- 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的值為amount
In [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在給定區間的元素
- zadd(name, mapping)
- 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對應的value
In [30]: r.hget(‘car‘,‘color‘) Out[30]: b‘red‘
hmget(name, keys, *args)
返回key為name的hash中各個鍵對應的value
In [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增加amount
In [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‘}
Redis自學筆記:5.實踐