Python中redis的使用

背景

windows下Python中redis的使用

安装:

windows版的redis(https://github.com/MSOpenTech/redis)直接下载(https://github.com/MSOpenTech/redis/releases)只需要解压zip文件即可使用。
解压后到文件目录下执行redis-server.exe
这里写图片描述

默认使用的端口号是6379。此时的redis服务就启动了。可以在python等其他环境中对如redis进行读写操作。
另外,该目录下有一个redis-cli.exe,是redis的客户端,直接启动这个可以进行redis中key和value的修改。
用select可以进行数据库的切换,数据库索引号 index 用数字值指定,以 0 作为起始索引值。
这里写图片描述

注意,切换数据库后命令行的提示符会相应改变(默认是0,可以不显示)。
常用命令:
set命令:set ‘key’ ‘value’
get命令:获取指定key对应的value值。
lpush:队列存储。将一个或多个值插入到列表头部。 如果 key 不存在,一个空列表会被创建并执行 LPUSH 操作。 当 key 存在但不是列表类型时,返回一个错误。 用法:lpush keyname value1 value2 value3….
执行 lpush命令后,返回列表的长度。 注意value之间是以空格作为分割的。
LRANGE:获取列表指定范围内的元素。
用法:LRANGE key start stop
这里写图片描述

python下redis的使用

为了能够在Python上使用redis需要预先安装对应的库pip install redis
示例代码如下:

import redis

r = redis.Redis(host = 'localhost', port = 6379, db = 1)
r.set('k1', 'v1')
r.set('k2', 'v2')
print(r.get('k1'))
print(r.keys())#打印当前所有的keys
print(r.dbsize())#查看当前有多少keys
r.delete('k2')#删除k2
print(r.keys())
print(r.dbsize())
print(dir(r))#查看redis对应的方法

'''
采用pipeline方式
一次性批量提交命令
'''
# #pipeline
p = r.pipeline()
p.set('k3', 'v3')
p.set('k4', 'v4')
p.incr('num')
p.incr('num')
p.execute()
print(r.get('num'))

还有的另外一种连接方式是strict连接(兼容性问题),StrictRedis用于实现大部分官方的命令,并使用官方的语法和命令(比如,SET命令对应与StrictRedis.set方法)。Redis是StrictRedis的子类,用于向后兼容旧版本的redis-py。 简单说,官方推荐使用StrictRedis方法。在redis-cli上的操作两者会有一些差异,具体问谷歌吧。

消息队列

生产者消费者模式

代码如下:
执行如下代码之后,该进程一直在等待redis中5号数据库中key值为task_prodcons_queue的队列出现值。一旦该队列有值进来,则该任务进程取出该task的值,并打印。
import redis

class Task:
    def __init__(self):
        self.rcon = redis.Redis(host = 'localhost', db = 5)
        self.queue = 'task_prodcons_queue'

    def process_task(self):
        while True:
            task = self.rcon.blpop(self.queue, 0)[1]#一直等待,从queue中取任务。blpop方式,是阻塞式的pop。
            print('Task: ', task)

Task().process_task()#一直等待任务

运行结果:
这里写图片描述

订阅模式

示例代码:

import redis

class Task:
    def __init__(self):
        self.rcon = redis.Redis(host = 'localhost', db = 5)
        self.ps = self.rcon.pubsub()#订阅模式
        self.ps.subscribe('task_pubsub_channel')#订阅该key值,一旦该key值有发布,有订阅的客户端都能够收到消息

    def process_task(self):
        for i in self.ps.listen():#监听
            if i['type'] == 'message':#消息的类型
                print('Task: ', i['data'])#消息的内容

Task().process_task()

在redis-cli中利用publish方式往redis中频道(即对应的key值)中传送信息后,在启动运行上述代码的多个订阅客户端就会收到对应的key值的订阅信息。类似于接收到广播。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值