1. 程式人生 > >Redis自學筆記:5.實踐

Redis自學筆記:5.實踐

offset scores imp 排序 score 重啟 foo diff blpop

第5章實踐

5.3 python與redis

5.3.1安裝

pip install redis

5.3.2使用方法

  • 自己補充內容:Ubuntu下redis開啟遠程連接
    1. 打開redis配置:sudo vi /etc/redis/redis.conf
    2. 註釋掉"bind 127.0.0.1",或者修改為"bind 0.0.0.0"
    3. 重啟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

  1. 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,成功返回True

    • flushall()
      刪除所有數據庫中的所有key,成功返回True

  2. 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‘
  3. 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‘]
  4. 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‘
  5. 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在給定區間的元素

  6. 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.實踐