5. 实践: python 与 Redis

其他教程1
其他教程2
Redis 官方推荐的 Python客户端是 redis-py.

5.1 安装

pip3 install redis 

cookies

补充内容: 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

5.2 连接数据库

导入模块

# 导入 redis-py:
import redis # 默认创建连接地址 127,0,0,1, 端口 6379
r = redis.Redis
r = redis.StrictRedis()
# 也可以显式指定需要连接的地址
r = redis.Redis(host='127.0.0.1', port=6379, db=0)
r = redis.StrictRedis(host='127.0.0.1', port=6379, db=0)r.set('fo', 'hello world')
print(r.get('fo'))
# b'hello world'
import redis
# 连接redis加个decode_responses=True,这样出来的直接是中文,不需要decode
r = redis.Redis(decode_responses=True)
r = redis.Redis('127.0.0.1', 6379, 0,decode_responses=True)
r.set('fooo', '早上好')
print(r.get('fooo'))
# 早上好

事务和管道

事务
pipe = r.pipeline()
pipe.set('foo','far')
pipe.get('foo')
result = pipe.execute()
print(result)
# [True, b'far']
管道
# transation = False
pipe = r.pipeline().set('foa','foo').get('foo').execute()
print(pipe)
# [True, b'far']

5.3 简单操作

在python3下, 首先导入redis

>>> from redis import Redis,StrictRedis
>>> r = Redis(decode_responses=True)

5.3.1 String字符串操作

语法 作用 示例
r.set(key, value) 给key赋值为value r.set('key','value')
Out[22]: True
r.get(key) 返回数据库中key的value r.get('key')
Out[23]: 'value'
r.getset(key, value) 给key赋值为value, 并返回上次的value; 若无值, 则不返回 r.getset('key','vakue')
Out[24]: 'value'
r.mget(keys, *args) 返回多个key对应的value r.mget('name','key')
Out[25]: [None, 'vakue']
r.setnx(key,value) 当key不存在才设置value, 设置成功返回True, 当key存在返回False,不更改value r.setnx('foo','bar')
Out[26]: True
r.setex(key,time,value) 设置key的value, 指定有效期为time r.setex('fo',1,'jane')
Out[28]: True
r.setrange(key, offset, value) 设置key的value值的子字符串 r.setrange('name',6,'world')
Out[31]: 11
r.mset(**kargs) 批量赋值 r.mset({'n1':'john','n2':'kang'})
Out[33]: True
r.msetnx(**kargs) key不存在才批量赋值 r.msetnx({'n3':'n33','n4':'n44'})
Out[34]: True
r.incr(key, amount=1) 设置key的value增值操作, 默认1, key不存在则被创建并设为 amount, amount 可以为负数,表示减值 r.incr('age',1)
Out[36]: 1
r.incr('age',3)
Out[37]: 4
r.decr(key,amount=1) 设置key的value减值操作, 默认1, key不存在则被创建并设置为-mount, amount可以为负值, 表示增值 r.decr('score',2)
Out[38]: -2
r.append(key,value) 为key的值附加value r.append('nick','popo')
Out[40]: 6
r.substr(key,start,end=-1) 返回key的value子串, end默认为-1,包含end r.substr('nick',0)
Out[42]: 'OKpopo'
r.getrange(key,start,end) 返回key的value值从start到end子串,包含end r.getrange('nick',1,4)
Out[43]: 'Kpop'

5.3.2 Key操作

语法 作用 示例
r.exists(key) 判断一个key是否存在, 存在返回True, 解码为1,不存在返回False, 解码为0 r.exists('score')
Out[8]: 1
r.delete(key) 删除一个key, r.delete('nick')
Out[9]: 1
r.type(key) 判断一个key的类型 r.type('age')
Out[10]: 'string'
r.keys(pattern) 获取所有符合规则的key r.keys('a*')
Out[10]: ['age', 'ag']
r.randomkey() 获取随机的一个key r.randomkey()
Out[10]: 'key'
r.rename(key,newkey) 将key重命名 r.rename('age','height')
Out[10]: True
r.dbsize() 获取当前数据库中key的数目 r.dbsize()
Out[5]: 5
r.expire(key,time) 设定key的过期时间, 单位秒 r.expire('scor',2)
Out[12]: True
r.ttl(key) 获取key的过期时间, 单位秒, -1为永久不过期 r.ttl('score')
Out[14]: -1
r.move(key,db) 将key移动其他数据库 r.move('score',2)
Out[15]: True
r.flushdb() 删除当前选择数据库中的所有key r.flushdb()
Out[20]: True
r.flushall() 删除所有数据库中的所有key r.flushall()
Out[21]: True

5.3.3 List操作

语法 作用 示例
r.rpush(key,*values) 在key尾部(右边)添加值为value的元素, key传多个, 返回list元素个数 r.rpush('list',1,2,3)
Out[48]: 3
r.lpush(key,*values) 在key头部添加值为value的元素, 可以传多个,返回list元素个数 r.lpush('list',0)
Out[49]: 4
r.llist(key) 返回key的长度 r.llen('list')
Out[50]: 4
r.lrange(key,start,end) 返回key中start~end之间的元素, 包含end r.lrange('list',0,-1)
Out[52]: ['0', '1', '2', '3']
r.ltrim(key,start,end) 截取key, 保留索引为start至end的内容 r.ltrim('list',1,3)
Out[54]: True
r.lindex(key,index) 返回key的index位置的元素, 越界则没有返回值 r.lindex('list',2)
Out[58]: '3'
r.lset(key,index,value) 给key的index位置赋值, 越界则报错 r.lset('list',2,6)
Out[61]: True
r.lrem(key,count,value) 删除key中 count 个值为 value 的元素, 返回删除个数 r.lrem('list',2,6)
Out[64]: 1
r.lpop(key) 删除并返回key的首元素(左边) r.lpop('list')
Out[66]: '1'
r.rpop(key) 删除并返回key的尾元素(右边) r.rpop('list')
Out[68]: '2'
r.blpop(key,timeout=0) 删除并返回key的首元素, 如果key为空, 则会一直阻塞等待, 返回元组,(key,value) r.blpop('list')
Out[69]: ('list', '123')
r.brpop(key,timeout=0) 删除并返回key的尾元素, 如果key为空, 则会一直阻塞等待, 返回元组,(key,value) r.brpop('list')
Out[71]: ('list', '1')
r.rpoplpush(key,newkey) 删除并返回key的尾元素, 并将元素添加到, newkey的头部 r.rpoplpush('list','list1')
Out[73]: '2'

5.3.4 Set操作

语法 作用 示例
r.sadd(key,*values) 向key中添加元素, 可以添加多个, 返回插入元素个数 r.sadd('tags','Book','Tea')
Out[77]: 2
r.srem(key,*values) 从key中删除元素, 可以删除多个, 返回成功删除的个数 r.srem('tags','Book','Tea')
Out[78]: 2
r.spop(key) 随机删除并返回key中的一个元素 r.spop('tags')
Out[79]: 'Coffee'
r.smove(key,newkey,value) 从key中移除元素并添加到newkey中 r.smove('tags','news','Book')
Out[81]: True
r.scard(key) 返回key中的元素个数 r.scard('tags')
Out[82]: 2
r.sismember(key,value) 测试value是否在key中, 在返回True, 不在返回False r.sismember('tags','Tea')
Out[84]: True
r.sinter(keys, *args) 返回交集, 没有交集返回空集 r.sinter('tags','news')
Out[85]: {'Tea'}
r.sinterstore(dset,keys,*args) 求交集, 并将交集保存到dset集合中, 返回dset元素个数 r.sinterstore('dset','tags','news')
Out[93]: 1
r.sunion(keys.*args) 返回并集 r.sunion('tags','tag2','tag3')
Out[97]: {'Coffee', 'Tea'}
r.sunionstore(dset,keys,*args) 求并集, 并将并集保存到dset中, 返回并集的元素个数 r.sunionstore('log','tags','news')
Out[99]: 3
r.sdiff(key,*args) 求差集, 并返回在key中, 但不在*args中的元素集合 r.sdiff('tags','news')
Out[100]: {'Coffee'}
r.sdiffstore(dset,key,*args) 求差集, 并将差集保存在dset中, 返回差集个数 r.sdiffstore('dset','tags','news')
Out[105]: 1
r.smembers(key) 返回key中所有元素 r.smembers('tags')
Out[107]: {'Coffee', 'Tea'}
r.srandmember(key) 随机返回key中的一个元素, 但不删除元素 r.srandmember('tags')
Out[108]: 'Coffee'

5.3.5 Sorted Set操作

语法 作用 示例
r.zadd(key,**kargs) 向key中添加元素, 如果元素已存在, 则更新其score r.zadd('grade',{'Bob':80,'Mike':61})
Out[7]: 2
r.zrem(key,*values) 删除key中的元素 r.zrem('grade','Mike','Bob')
Out[11]: 2
r.zincrby(key, amount=1,value,) 如果在key中已经存在元素value,则该元素的score增加amount,否则向该集合中添加该元素,其score的值为amount r.zincrby('grade',-2, 'Bob')
Out[13]: -2.0
r.zrank(key,value) 返回key中元素的排名下标 (按score从小到大) r.zrank('grade','Bob')
Out[18]: 1
r.zrevrank(key,value) 返回key中元素的倒数排名下标 (按score从大到小) r.zrevrank('grade','Bob')
Out[20]: 0
r.zrevrange(key,start,end, withscores=False) 返回key中的index从start到end的所有元素 (按score从大到小排序) r.zrevrange('grade',0,-1)
Out[21]: ['Bob', 'Mike']
r.zrangebyscore( key,min,max, start=None,
num=None, withscores=False)
返回key中score在min到max之间的元素 r.zrangebyscore('grade',60,90)
Out[27]: ['Kang', 'Mike', 'Bob']
r.zcount(key,min,max) 返回key中score在min到max之间的数量 r.zcount('grade',60,90)
Out[31]: 3
r.zcard(key) 返回key中元素个数 r.zcard('grade')
Out[34]: 4
r.zremrangebyrank( key,min,max) 删除并返回key中排名在min到max之间的元素个数 r.zremrangebyrank('grade',0,1)
Out[35]: 2
r.zremrangebyscore( key,min,max) 删除并返回key中score在给定区间的元素个数 r.zremrangebyscore('grade',60,90)
Out[36]: 1

5.3.5 Hash操作

语法 作用 示例
r.hset(key,field,value) 向key中添加映射, 如果已存在, 则更新, r.hset('price','cake',5)
Out[41]: 1
r.hsetnx(key,field,value) 向key中添加映射, 如果field不存在, 如果存在不更新 r.hsetnx('price','apple',5)
Out[45]: 1
r.hget(key, field) 返回key中映射对象的value r.hget('price','cake')
Out[48]: '6'
r.hmget(key,fields,*args) 返回key中各个映射对应的value r.hmget('price','cake','apple')
Out[53]: ['6', '5']
r.hmset(key,mapping) 向key中批量添加映射 r.hmset('price',{'orange':3,'banana':2})
Out[54]: True
r.hincrby(key,field, amount=1) 向key中映射的value增加amount r.hincrby('price','orange',2)
Out[56]: 5
r.hexists(key,field) 判断key中是否存在键名为field的映射 r.hexists('price','orange')
Out[57]: True
r.hdel(key,*fields) 删除key中field的映射 r.hdel('price','orange')
Out[60]: 1
r.hlen(key) 从key中获取映射个数 r.hlen('price')
Out[61]: 3
r.hkeys(key) 从key中获取所有映射键名 r.hkeys('price')
Out[62]: ['cake', 'apple', 'banana']
r.hvals(key) 从key中获取所有映射键值 r.hvals('price')
Out[63]: ['8', '5', '2']
r.hgetall(key) 从key中获取所有映射键值对 r.hgetall('price')
Out[64]: {'cake': '8', 'apple': '5', 'banana': '2'}

RedisDump

  • redis-load

将数据导入到数据库中

  • redis-dump

将数据库信息导出

转载于:https://www.cnblogs.com/huangrenfeng/p/10546920.html

Python与Redis交互相关推荐

  1. 〖Python 数据库开发实战 - Python与Redis交互篇⑯〗- 综合案例 - 新闻管理系统第二阶段完结 - “app.py“ 模块收尾及案例演示

    订阅 Python全栈白宝书-零基础入门篇 可报销!白嫖入口-请点击我.推荐他人订阅,可获取扣除平台费用后的35%收益,文末名片加V! 说明:该文属于 Python全栈白宝书专栏,免费阶段订阅数量43 ...

  2. 〖Python 数据库开发实战 - Python与Redis交互篇⑮〗- 综合案例 - 新闻管理系统 - 更新所编辑新闻状态(根据输入内容进行保存操作)

    订阅 Python全栈白宝书-零基础入门篇 可报销!白嫖入口-请点击我.推荐他人订阅,可获取扣除平台费用后的35%收益,文末名片加V! 说明:该文属于 Python全栈白宝书专栏,免费阶段订阅数量43 ...

  3. 〖Python 数据库开发实战 - Python与Redis交互篇①〗- redis-py的安装与使用

    订阅 Python全栈白宝书-零基础入门篇 可报销!白嫖入口-请点击我.推荐他人订阅,可获取扣除平台费用后的35%收益,文末名片加V! 说明:该文属于 Python全栈白宝书专栏,免费阶段订阅数量43 ...

  4. 〖Python 数据库开发实战 - Python与Redis交互篇⑦〗- 利用 redis-py 实现缓存学生考试信息

    订阅 Python全栈白宝书-零基础入门篇 可报销!白嫖入口-请点击我.推荐他人订阅,可获取扣除平台费用后的35%收益,文末名片加V! 说明:该文属于 Python全栈白宝书专栏,免费阶段订阅数量43 ...

  5. 【第3期赠书活动】〖Python 数据库开发实战 - Python与Redis交互篇⑬〗- 综合案例 - 新闻管理系统 - 编辑新闻(编辑角色权限)

    前言: ✌ 作者简介:渴望力量的哈士奇 ✌,大家可以叫我

  6. 〖Python 数据库开发实战 - Python与Redis交互篇⑫〗- 综合案例 - 新闻管理系统 - 删除新闻(含redis缓存)

    前言: ✌ 作者简介:渴望力量的哈士奇 ✌,大家可以叫我

  7. 〖Python 数据库开发实战 - Python与Redis交互篇⑩〗- 综合案例 - 新闻管理系统 - 发表新闻

    前言: ✌ 作者简介:渴望力量的哈士奇 ✌,大家可以叫我

  8. 〖Python 数据库开发实战 - Python与Redis交互篇⑪〗- 综合案例 - 新闻管理系统 - 缓存新闻数据至redis

    前言: ✌ 作者简介:渴望力量的哈士奇 ✌,大家可以叫我

  9. 〖Python 数据库开发实战 - Python与Redis交互篇⑭〗- 综合案例 - 新闻管理系统 - 更新所编辑新闻状态(编辑角色权限)

    前言: ✌ 作者简介:渴望力量的哈士奇 ✌,大家可以叫我

最新文章

  1. POJ1328贪心放雷达
  2. android 加载更多,如何在android中实现加载更多的recyclerview
  3. boost::hana::make_lazy用法的测试程序
  4. 利用IDA Pro反汇编程序
  5. RTree算法及介绍
  6. nginx 配置 http/2(h2) 和 http 在同一端口的问题
  7. VPX单板计算机xPower 6110
  8. 机器学习第九章聚类Kmeans练习(西瓜数据集4.0)
  9. Kubernetes operators
  10. 拥抱变化,面向Java17,Java8-18全系列特性详解
  11. 无法识别的USB设备:跟这台计算机连接的一个USB设备运行不正常,WINDOWS无法识别...
  12. linux内核配置cpu相关,Linux内核配置
  13. ntohs和htons区别?
  14. TS 对象可能为“未定义”,不能将类型“ XXXX | undefined “分配给类型{ xxxx }
  15. Android Fragmnet-Fragment数据交换以及ListFragment的使用
  16. php判断页面访问是移动端还是pc端
  17. Linux扩展文件分区
  18. 麒麟V10 root登录系统
  19. 我的期末网页设计HTML作品——咖啡文化网页制作
  20. 2000-2020年中国省份、282个地级市Dagum基尼系数及分解

热门文章

  1. Python | 多种编码文件(中文)乱码问题解决
  2. 修改hostname有几种方式?(转)
  3. nginx proxy模块
  4. Flutter 底部向上动画弹出的菜单选项
  5. flutter 弹框 dialog,flutter提示框
  6. Flutter ListView 下拉刷新与上拉加载更多
  7. Leetcode-1155 Number of Dice Rolls With Target Sum(掷骰子的N种方法)
  8. WEB前端响应式布局之BootStarp使用
  9. HNOI2015 开店
  10. Python3中的bytes和str类型