python之redis

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介:

一、redis基本操作-1

 1 import redis 2 #建立连接 3 r=redis.Redis(host="127.0.0.1",port=6379) 4  5 all_keys=r.keys()#输出所有key,列表[b'age',b'name',b'occupation'] 6 for k in all_keys: 7     print(k,r.get(k)) 8  9 print(r.keys())10 11 r.set("sister","yongli",ex=5)     #存入缓存,5秒后清除12 13 print(r.get("sister"))14 15 r.set("father","jingxian",nx=True)    #只有father不存在时,当前set操作才执行16 print(r.get("father"))17 18 r.set("AA","BB",xx=True)           #只有AA存在时,当前set操作才执行19 print(r.get("AA"))20 21 22 r.mset(k1="v1",k2="v2")        #批量设置值23 print(r.mget("k1","k2"))     #批量获取值24 25 26 r.set("id","3114007487")27 print(r.getrange("id",3,6))      #获取子序列(切片,0开始)28 29 r.setrange("id",3,"AAA")       #修改字符串内容,从指定字符串索引开始向后替换30 print(r.getrange("id",0,-1))   #输出:b'311AAA7487'31 32 #"3" 对应ASCII码为51, 二进制为 0011 001133 print(r.getbit("id",7))34 r.setbit("id",7,0)      #将第7位改为0,第0位开始算 0011 0010 : 50 对应为235 print(r.getbit("id",7))36 print(r.getbit("id",1000))  #读取位数超过,不爆错37 print(r.get("id"))

运行结果:

 View Code

redis基本操作-2(供拓展)

 View Code

 

上面是redis的基本操作,建议一句句实验下。

redis是一种no-sql缓存数据库。数据是存在缓存中的。所以你如果重启redis-server,会发现之前存的数据都消失了! 为了解决这个问题,可在存数据后加上save命令, 数据便会存到磁盘,重启后数据不会消失

 

二、连接池与计算网站UV实例

1. 连接池

使用connection pool来管理对一个redis server的所有连接,避免每次建立、释放连接的开销。

1 import redis2  3 pool = redis.ConnectionPool(host='10.211.55.4', port=6379)4 r = redis.Redis(connection_pool=pool)

 

2.计算网站UV实例

关于PV,UV,IP可以看看我下面的总结,具体也可以参考博客:http://playkid.blog.163.com/blog/static/56287260201361951919690/

 View Code

 

setbit巨流弊的应用场景,想想什么情况下会用到这个功能呢?超大型的应用平台,比如新浪微博,我想查看当前正在登陆的用户,如何实现?当然你会想到,用户登陆后在数据库上的用户信息上做个标记,然后count去统计做标记的用户一共有多少,so,当前用户查看迎刃而解;OK,好好,首先每个用户登录都要设置标记,如果当前用户几个亿,那么得存几个亿的标记位,超级占用库的开销;现在就有一个无敌高效的办法,利用二进制位统计当前在线用户,什么意思呢?看下面的代码就能明白了:

 View Code

比如:当前第500位用户在线,则将第500个bit置为1(默认为0)。bitcount统计二级制位中1的个数,setbit和bitcount配合使用,轻松解决当前在线用户数的问题1字节=8位,那么10m=8000万位,即一个亿的在线用户也就10m多的内存就可搞定,这优化不得了!!

 

三、redis基本hash,list,set基本操作

我会直接用运行的截图来讲hash,list,set基本操作,不然有点无聊~~

Hash操作,redis中Hash在内存中的存储格式如下图:

 

1. hash基本操作

 

List操作,redis中的List在在内存中按照一个name对应一个List来存储。如图:

 

2. list基本操作

列表的某一个值前或后插入一个新值

r.lpush()  从左边开始放数据
r.rpush()   从右边开始放数据

 

 3. set基本操作

 

四、redis的16个数据库与有序集合

1. 16个数据库

Redis有默认16个数据库,默认在0库,可以切换(eg:切换到15号数据库: select 15);但在python中,出于安全考虑,在python的API没有切换数据库的概念,可以在连接调用时指定调用的数据库,但一连接上了就不能切换了

move(name, db))     # 将redis的某个值移动到指定的db下

 

2. 有序集合

有序集合: 在集合的基础上,为每个元素排序;元素的排序需要根据另外一个值来进行比较,所以,对于有序集合,每一个元素有两个值,即:值和分数,分数专门用来做排序

 

有序集合的基本操作

 

 

 五、redis发布与订阅


应用场景:一登陆QQ右上角会有广告。
发布者:服务器
订阅者:个人用户

发布与订阅必须在同一个频道上(类似于收音机),不然发布方发布后,订阅方接收不到!

redis_helper.py文件(公共类)

 1 import redis 2  3  4 class RedisHelper(object): 5  6     def __init__(self): 7         self.__conn=redis.Redis(host='127.0.0.1') 8         self.chan_sub='fm88.7'          #设置两个频道,订阅频道 9         self.chan_pub='fm88.7'         #发布频道10     11     def public(self,msg):12         self.__conn.publish(self.chan_pub,msg)        #发布消息13         returnTrue14     15     def subscribe(self):16         pub=self.__conn.pubsub()               #生成实例 打开收音机17         pub.subscribe(self.chan_sub)     #拧到那个台18         m=pub.parse_response()          #准备听,未阻塞,再调用一次就阻塞19         print(m)        #[b'subscribe', b'fm88.7', 1]20         return pub             #返回实例

redis_sub.py

1 from redis_helper import RedisHelper2 3 obj=RedisHelper()4 redis_sub=obj.subscribe()        #返回实例5 6 while True:7     msg=redis_sub.parse_response()       #听8 print(msg)              #有消息则打印,无消息则阻塞

redis_pub.py

from redis_helper importRedisHelper

obj=RedisHelper()
return1=obj.public('love')print(return1)

 

运行结果(客户端): 可并发处理多个客户端。

[b'subscribe', b'fm88.7', 1]
[b'message', b'fm88.7', b'love']
[b'message', b'fm88.7', b'love']
















本文转自xsster51CTO博客,原文链接:http://blog.51cto.com/12945177/1929494 ,如需转载请自行联系原作者




相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
4月前
|
存储 NoSQL Redis
Redis 简介 + Python 操作发布订阅
Redis 简介 + Python 操作发布订阅
|
6天前
|
NoSQL MongoDB Redis
Python与NoSQL数据库(MongoDB、Redis等)面试问答
【4月更文挑战第16天】本文探讨了Python与NoSQL数据库(如MongoDB、Redis)在面试中的常见问题,包括连接与操作数据库、错误处理、高级特性和缓存策略。重点介绍了使用`pymongo`和`redis`库进行CRUD操作、异常捕获以及数据一致性管理。通过理解这些问题、易错点及避免策略,并结合代码示例,开发者能在面试中展现其技术实力和实践经验。
128 8
Python与NoSQL数据库(MongoDB、Redis等)面试问答
|
1月前
|
存储 JSON NoSQL
Redis与Python的完美结合:实现高效数据交互和应用场景全解析
Redis与Python的完美结合:实现高效数据交互和应用场景全解析
115 0
|
1月前
|
存储 NoSQL Redis
如何在Python中操作Redis数据库
如何在Python中操作Redis数据库
29 0
|
1月前
|
NoSQL Redis Python
python flask 使用 redis 写一个例子给我
python flask 使用 redis 写一个例子给我
38 4
|
2月前
|
缓存 NoSQL Redis
如何在Python中使用Redis或Memcached进行缓存?
如何在Python中使用Redis或Memcached进行缓存?
28 2
|
3月前
|
NoSQL Redis 数据库
python编写一个redis工具类
python编写一个redis工具类
146 0
|
15天前
|
安全 Java 数据处理
Python网络编程基础(Socket编程)多线程/多进程服务器编程
【4月更文挑战第11天】在网络编程中,随着客户端数量的增加,服务器的处理能力成为了一个重要的考量因素。为了处理多个客户端的并发请求,我们通常需要采用多线程或多进程的方式。在本章中,我们将探讨多线程/多进程服务器编程的概念,并通过一个多线程服务器的示例来演示其实现。
|
21小时前
|
机器学习/深度学习 人工智能 数据可视化
Python:探索编程之美
Python:探索编程之美
8 0

热门文章

最新文章