第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.实践的更多相关文章

  1. Redis自学笔记:3.6入门-有序集合类型

    3.6有序集合类型 3.6.1介绍 在集合类型基础上,为集合中每个元素都关联了一个分数,故可以获得 分数最高(最低)的前N个元素,可以获得指定范围内的元素等 有序集合中每个元素不同,但它们的分数却可以 ...

  2. Redis自学笔记:3.5入门-集合类型

    3.5集合类型 3.5.1介绍 在集合中的每个元素都是不同的,且没有顺序 表3-4集合类型和列表类型的对比 - 集合类型 列表类型 存储内容 至多232-1个字符串 至多232-1个字符串 有序性 否 ...

  3. Redis自学笔记:3.4入门-列表类型

    3.4列表类型 3.4.1介绍 列表类型可以存储一个有序的字符串列表,常用的操作是向列表两端添加元素,或者 获得列表的某一片段. 优点:内部使用的是双向链表,所以向列表两端添加元素的时间复杂度为O(1 ...

  4. Redis自学笔记:3.3入门-散列类型

    3.3散列类型 3.3.1介绍 散列类型不能嵌套其他数据类型,一个散列类型可以包含至多232-1个字段 散列类型适合存储对象:使用对象类别和ID构成键名,使用字段表示对象的数据, 而字段值则存储属性值 ...

  5. Redis自学笔记:3.2入门-字符串类型

    3.2字符串类型 实际上redis不只是数据库,更多的公司和团队将redis用作缓存和 队列系统 3.2.1介绍 字符串类型是redis最基本的数据类型,它能存储任何形式的字符串, 包括二进制数据.你 ...

  6. Redis自学笔记:4.4进阶-消息通知

    4.4消息通知 4.4.1任务队列 传递任务的队列.与任务队列进行交互的实体有两类,一类是生产者,一类是消费者. 生产者将需要处理的任务放入任务队列中,二消费者不断从任务队列中读入任务 信息并执行. ...

  7. Redis自学笔记:4.3进阶-排序

    4.3排序 4.3.1有序集合的集合操作 有序集合没有zinter和zunion命令,使用其他命令实现方法: multi zinterstore tempKey ... zrange tempKey ...

  8. Redis自学笔记:4.2进阶-过期时间

    4.2过期时间 **4.2.1命令介绍* 在redis中使用 expire 命令设置一个键的过期时间后redis会自动删除它. expire key seconds (seconds单位是秒,必须是整 ...

  9. Redis自学笔记:4.1进阶-事务

    第4章:进阶 4.1事务 4.1.1概述 redis中的事务是一组命令的集合 事务同命令一样都是redis的最小执行单位,一个事务中的命令要么都执行, 要么都不执行 事务的原理是先将一个事务的命令发送 ...

随机推荐

  1. 用不用lambda,这是一个问题

    用不用lambda,这是一个问题  mp.weixin.qq.com Sun在2009年开启了代号为“dolphin”的工程,计划在JDK1.7中加入lambda表达式.虚拟机模块化支持.动态语言支持 ...

  2. JS 防抖函数和节流函数

    文章转载自:木上有水 什么是防抖?什么是节流? 工作中我们经常会用一些方法监听某些事件的完成,比如scroll.resize.keyup等. 常规事件触发的时候,比如scroll,会在短时间内触发多次 ...

  3. 洛谷P1108 低价购买题解

    看到"你必须用低于你上次购买它的价格购买它",有没有想到什么?没错,又是LIS,倒过来的LIS,所以我们只要把读入的序列倒过来就可以求LIS了,第一问解决. 首先要厘清的是,对于这 ...

  4. javascript: Element.getBoundingClientRect() 获取元素在网页上的坐标位置

    来自:https://blog.csdn.net/weixin_42895400/article/details/81811095?utm_source=blogxgwz1 Element.getBo ...

  5. HTML-Note

    <meta>在 HTML 5 中,有一个新的 charset 属性,它使字符集的定义更加容易. charset character encoding 定义文档的字符编码. e.g. < ...

  6. vue---mixins的用法

    相信大家都用过less.sass等预编译器.它们中也有mixins,用法也很简单,例如Less中: .box{ border:1px solid red; padding:10px; } .mixin ...

  7. 剑指Offer_编程题_25

    题目描述 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head.(注意,输出结果中请不要返回参数中的节点引用,否 ...

  8. C#设计模式(17)——观察者模式

    1.观察者模式介绍 观察者模式又叫发布-订阅模式,它定义了对象间的一种一对多关系,当一个对象的状态发生改变时,所有依赖于它的对象都会收到通知并被自动更新.观察者模式就四个角色:抽象主题,具体主题,抽象 ...

  9. JS的基础知识回顾

    前言:JS应用在浏览器端,基于浏览器事件执行,功能十分强大,不容错过

  10. SpringBoot系列: 所有配置属性和官方文档

    Spring Boot 通用配置参数https://docs.spring.io/spring-boot/docs/current/reference/html/common-application- ...