Redis自学笔记:5.实践

第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'xe6x98xa5xe6xb1x9fxe6xbdxaexe6
              xb0xb4xe8xbfx9exe6xb5xb7xe5xb9xb3'
      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'xe6xb5xb7xe4xb8x8axe6x98x8exe6x9cx88
      xe5x85xb1xe6xbdxaexe7x94x9f',
      b'xe6xbbx9fxe6xbbx9fxe9x9ax8fxe6xb3xa2
      xe5x8dx83xe4xb8x87xe9x87x8c']
      
    • 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'}
      
原文地址:https://www.cnblogs.com/wangbaby/p/10207291.html