[Python]Python+redis数据存储与使用

5 篇文章 0 订阅
2 篇文章 0 订阅

关于redis的安装与配置我之前有文章详细的介绍过,参考:https://blog.csdn.net/qq_41604569/article/details/123644888

今天我们主要聊下redis与python的结合,两大部分内容:

  • redis使用
  • redis + python 使用

在redis +python中,也会分为两部分来解读:

  • redis + python本身的交互
  • redis + django的交互

redis使用

环境:Windows 本地调试;
默认端口:6379;

1.开启服务

1.开启redis服务【前文有介绍】,这里只看下有没有开启服务,操作方法:
win+r === > services.msc === > 调出“服务”,找到redis,看下状态是否为:已启动;如果不是,查找原因;
在这里插入图片描述
客户端连接redis服务器
cmd:redis-cli.exe
在这里插入图片描述
启动服务端后,获取下数据get names,提示:(error) NOAUTH Authentication required.没有权限;
使用命令:auth 13456 登录,这里的123456是我自己设置的redis密码;
登录成功之后就可以操作redis了;

2.简要介绍

redis是一种高级的键值对key:value存储系统,非关系型数据库(Nosql),其中value支持五种数据类型:

1.字符串(strings)
2.字符串列表(lists)
3.字符串集合(sets)
4.有序字符串集合(sorted sets)
5.哈希(hashes)

这节内容不做详细展开,仅就字符串 数据类型举例,其常用的两种方法:setget

127.0.0.1:6379> set name wusuowei
OK
127.0.0.1:6379> get name
"wusuowei"
127.0.0.1:6379> set age 18
OK
127.0.0.1:6379> get age
"18"

通过上面,比较清晰的看出,redis设置与读取数据的格式,set:用作设置,get:用作读取;
情况redi缓存命令:
flushall : 清空之后,在获取返回(nil)表示空值;
实例:

127.0.0.1:6379> set name wusuowei
OK
127.0.0.1:6379> get name
"wusuowei"
127.0.0.1:6379> set age 18
OK
127.0.0.1:6379> get age
"18"
127.0.0.1:6379> flushall
OK
127.0.0.1:6379> get name
(nil)
127.0.0.1:6379> get age
(nil)
127.0.0.1:6379>

redis + python 使用

redis + python本身的交互

1.安装:
pip install redis
2.连接:
常用两种方式:
方式一:普通连接【与python连接mysql类似】

import redis  # 导入redis模块

r = redis.Redis(host='localhost', port=6379, password="123456",
                decode_responses=True)  
# key是"name" value是"wusuowei" 将键值对存入redis缓存
r.set('name', 'wusuowei')  
print(r['name'])
print(r.get('name'))  # 取出键name对应的值
print(r.get('age'))  # 取出键name对应的值
print(type(r.get('name')))

# wusuowei
# wusuowei
# None
# <class 'str'>

方式二:连接池 【connection pool】
好处:
默认,每个Redis实例都会维护一个自己的连接池;使用连接池来管理对一个redis server的所有连接,避免每次建立、释放连接的开销。

import redis

# 建立redis的连接池
Pool = redis.ConnectionPool(host='127.0.0.1', port=6379, password="123456", decode_responses=True, max_connections=10)

# 从池子中拿一个链接
r = redis.Redis(connection_pool=Pool)

r.set('name', 'wusuowei')  # key是"name" value是"wusuowei" 将键值对存入redis缓存
print(r['name'])
print(r.get('name'))  # 取出键name对应的值
print(r.get('age'))  # 取出键name对应的值

# wusuowei
# wusuowei
# None

redis + django的交互

1.安装:
pip install django-redis
2.连接:
进入Django shell模式:python manage.py shell
导包:
from django.core.cache import cache

(env) E:\java_pythProject>python manage.py shell
Python 3.7.0 (default, Jun 28 2018, 08:04:48) [MSC v.1912 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from django.core.cache import cache
>>> cache.set('name','wusuowei')
True
>>> cache.get('name')
'wusuowei'
>>> cache.get('age')
>>> exit()

(env) E:\java_pythProject>

这里就简单介绍了下redis+python的简单使用,涉及内容不多,很容易消化,大家空闲时间多看看,see you~~~

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,您的问题是关于如何基于Python、Scrapy、Redis和Rule组件实现分布式爬虫爬取京东华为笔记本的。首先,您需要安装Scrapy和Redis,并在Scrapy的配置文件中添加Redis相关的配置: ```python # 在settings.py中添加以下配置 DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter" SCHEDULER = "scrapy_redis.scheduler.Scheduler" SCHEDULER_PERSIST = True REDIS_URL = 'redis://localhost:6379' ``` 然后,您需要编写Spider和Item Pipeline,其中Spider负责解析并抓取网页,Item Pipeline负责处理抓取到的数据。下面是一个示例的Spider代码: ```python from scrapy_redis.spiders import RedisSpider from scrapy.selector import Selector from ..items import ProductItem class JdSpider(RedisSpider): name = 'jd' redis_key = 'jd:start_urls' def parse(self, response): sel = Selector(response) products = sel.xpath('//div[@class="gl-i-wrap"]') for product in products: item = ProductItem() item['name'] = product.xpath('div[@class="p-name"]/a/em/text()').extract_first() item['price'] = product.xpath('div[@class="p-price"]/strong/i/text()').extract_first() item['url'] = product.xpath('div[@class="p-name"]/a/@href').extract_first() yield item ``` 在Item Pipeline中,您可以对抓取到的数据进行清洗和存储,下面是一个示例的Item Pipeline代码: ```python import pymongo class JdPipeline(object): def __init__(self, mongo_uri, mongo_db): self.mongo_uri = mongo_uri self.mongo_db = mongo_db @classmethod def from_crawler(cls, crawler): return cls( mongo_uri=crawler.settings.get('MONGO_URI'), mongo_db=crawler.settings.get('MONGO_DATABASE', 'items') ) def open_spider(self, spider): self.client = pymongo.MongoClient(self.mongo_uri) self.db = self.client[self.mongo_db] def close_spider(self, spider): self.client.close() def process_item(self, item, spider): self.db['products'].insert(dict(item)) return item ``` 最后,您需要创建一个Redis队列,并向队列中添加起始URL,如下所示: ```python import redis r = redis.Redis(host='localhost', port=6379) r.lpush('jd:start_urls', 'https://search.jd.com/Search?keyword=%E5%8D%8E%E4%B8%BA%E7%AC%94%E8%AE%B0%E6%9C%AC&enc=utf-8') ``` 最终,您就可以运行分布式爬虫并抓取京东华为笔记本的数据了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

魔都吴所谓

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值