python learning notes(拾)

目录

 

Scrapy框架进阶

Redis;

特性:

作用:

快速存取

应用场景:

Redis的安装与启动

Redis的配置文件

 Redis数据库简单使用

NoSQL和SQL数据库的比较

redispy安装及连接

Redis常用五大数据类型

Scrapy-分布式:


 

Scrapy框架进阶

redis是一个高性能,开源的,C语言开发的,键值对存储数据的nosql数据库。

Redis;

特性:

  1. Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用
  2. Redis不仅仅支持简单的key-value类型的数据,同时还提供List,set等数据类型
  3. Redis支持数据的备份

作用:

快速存取

应用场景:

点赞/秒杀/直播平台的在线好友列表/商品排行榜

Redis的安装与启动

查看帮助命令
redis-server --help

启动服务
redis-server.exe

链接客户端
redis-cli.exe

Redis的配置文件

/etc/redis/redis.conf

当redis作为守护进程运行的时候,它会写一个 pid 到 /var/run/redis.pid 文件里面。
daemonize no

监听端口号,默认为 6379,如果你设为 0 ,redis 将不在 socket 上监听任何客户端连接。
port 6379

设置数据库的数目。
databases 16

根据给定的时间间隔和写入次数将数据保存到磁盘
下面的例子的意思是:
900 秒内如果至少有 1 个 key 的值变化,则保存
300 秒内如果至少有 10 个 key 的值变化,则保存
60 秒内如果至少有 10000 个 key 的值变化,则保存
 
save 900 1
save 300 10
save 60 10000

监听端口号,默认为 6379,如果你设为 0 ,redis 将不在 socket 上监听任何客户端连接。
port 6379

Redis默认只允许本地连接,不允许其他机器连接
bind 127.0.0.1

 Redis数据库简单使用

DBSIZE      查看当前数据库的key数量
keys *      查看key的内容
FLUSHDB     清空当前数据库的key的数量
FLUSHALL    清空所有库的key(慎用)
exists key   判断key是否存在

NoSQL: not only sql,泛指非关系型数据库 Redis/MongoDB/Hbase Hadoop

关系型数据库:MySQL、oracle、SqlServer

NoSQL和SQL数据库的比较

适用场景不同:SQL数据库适合用于关系特别复杂的数据查询场景,nosql反之

事务:SQL对事务的支持非常完善,而nosql基本不支持事务

两者在不断的取长补短

redispy安装及连接

安装

pip install redis

连接

r = redis.StrictRedis(host='localhost',port=6379,db=0)

 

Redis常用五大数据类型

1.redis-string:string是Redis最基本的类型,一个key对应y一个value(string可以包含任何数据,最大不能超过512M

set  ---- 设置值
get  ---- 获取值
mset  ---- 设置多个值
mget  ---- 获取多个值
append ---- 添加字段
del ---- 删除
strlen ---- 返回字符串长度

incr ---- 增加
decr ---- 减少
incrby  ----- 制定增加多少
decrby  ----- 制定减少多少

getrange ---- 获取指定区间范围内的值,类似between....and的关系
setrange ---- 代表从第几位开始替换,下脚本从零开始
从0 -1表示全部

redis-list(单值多value):最简单的字符串列表,按照插入顺序排序,可以添加一个元素列表的头部或尾部,底层实际是个链表

lpush/rpush/lrange ---- 从左/从右/获取指定长度
lpush list01  1 2 3 4 5  倒序排列
rpush list02  1 2 3 4 5  正序排列
lrange  list01  0  -1  获取list01 中的所有值

lpop/rpop ---- 移除最左/最右
lpop list01 删除元素5
rpop list01 删除元素1

lrange list01 0 -1
lindex list01 1

llen list01   #求列表长度

删N个value
lrem list01 2 1   在list01中删除2个1

ltrim ---- 开始index结束index,截取指定范围的值后在赋值给key
ltrim list01 0 2    截取list01 从0到2的数据在赋值给list01

lrange list01 0 -1
lrange list02 0 -1
rpoplpush list1 list2

lset list01 0 x     将list02中第一位换成x

linsert list01b  before x php  在x之前加字段php

redis-Hash:hash是一个键值对集合,是一个string类型的field和value的映射表,hash特别适合存储对象

 

求哈希长度 
hlen customer


hexists ---- 在key里面的某个值
存在返回1 ,不存在返回0

hkeys students
hvals students

 redis-set(去重,无序)

sadd/smembers/sismember ---- 添加/查看集合/查看是否存在
sadd set01 1 2 2 3 3  去掉重复添加
smembers set01   得到set01
sismember set01 1  如果存在返回1  不存在返回0


scard ---- 获取集合里面的元素个数
scard set01

srem key value:
srem ---- 删除集合中元素
srem set01 3
SMEMBERS set01   3已经被删除掉

srandmember Key:
srandmembe ---- 随机出几个数
sadd set02  1 2 3 4 5 6 7 8
srandmember set02  2


spop key:
spop ---- 随机出栈
spop set01


smove key1 key2:
sadd set03 x y z 
smove set01 set03 2  将set01中的2 移动到set03中

数学集合类:
sadd set01 1 2 3 4 5
sadd set02 1 2 3 a b
差集
SDIFF set01 set02   返回 4 5 在第一个set中不在第二个set中
交集
SINTER set01 set02   返回 1 2 3
并集
SUNION set01 set02  返回set01 set02 中的值  去掉重复

redis-Zset(无序集合)

zadd zset01 60 v1 70 v2 80 v3 90 v4 100 v5
zrange zset01 0 -1 
带分数返回   withscores


zrangebyscore key start end----根据开始结束来取值
zrangebyscore zset01 60 70
zrangebyscore zset01 60 (90   表示不包含90
zrangebyscore zset01  60 90  limit  1 2 从第一条开始截取2条


zrem key value---- 某score下对应的value值,作用是删除元素
zrem zset01 v1


zcard/zcount key score区间/zrank key values:
zcard   求zset01 总条数
zcount  zset01 60 90  求60-90个数
zrank   zset01  v2   返回1  返回对应下角标,从0开始

字符串相关操作:

import redis

class TestString(object):
	def __init__(self):
        self.r = redis.StrictRedis(host='192.168.75.130',port=6379)
    设置值
    def test_set(self):
        res = self.r.set('user1','juran-1')
        print(res)
    取值
	def test_get(self):
        res = self.r.get('user1')
        print(res)
    设置多个值
    def test_mset(self):
        d = {
            'user2':'juran-2',
            'user3':'juran-3'
        }
        res = self.r.mset(d)
    取多个值
    def test_mget(self):
        l = ['user2','user3']
        res = self.r.mget(l)
        print(res)
    删除
	def test_del(self):
        self.r.delete('user2')

列表相关操作:
 

class TestList(object):
    def __init__(self):
        self.r = redis.StrictRedis(host='192.168.75.130',port=6379)
	插入记录
    def test_push(self):
        res = self.r.lpush('common','1')
        res = self.r.rpush('common','2')
        # res = self.r.rpush('jr','123')
	弹出记录
    def test_pop(self):
        res = self.r.lpop('common')
        res = self.r.rpop('common')
	范围取值
    def test_range(self):
        res = self.r.lrange('common',0,-1)
        print(res)

集合相关操作:

class TestSet(object):
    def __init__(self):
        self.r = redis.StrictRedis(host='192.168.75.130', port=6379)
	添加数据
    def test_sadd(self):
        res = self.r.sadd('set01','1','2')
        lis = ['Cat','Dog']
        res = self.r.sadd('set02',lis)
	删除数据
    def test_del(self):
        res = self.r.srem('set01',1)
	随机删除数据
    def test_pop(self):
        res = self.r.spop('set02')

哈希相关操作: 

class TestHash(object):
    def __init__(self):
        self.r = redis.StrictRedis(host='192.168.75.130', port=6379)
	
	批量设值
    def test_hset(self):
        dic = {
            'id':1,
            'name':'huawei'
        }
        res = self.r.hmset('mobile',dic)
	批量取值
    def test_hgetall(self):
        res = self.r.hgetall('mobile')
	判断是否存在	存在返回1  不存在返回0
    def test_hexists(self):
        res = self.r.hexists('mobile','id')
        print(res)

Scrapy-分布式:

scrapy-redis:

scrapy_redis:Redis-based components for scrapy

scrapy工作流程:

db20bb9fa4787a551bbaeab94f823f8a.png

 scrapy_redis工作流程:

5bb2a9804162b2b4f26768f6a17bcbbd.png

 scrapy_redis下载:

clone github scrapy_redis源码文件
git clone https://github.com/rolando/scrapy-redis.git

scrapy_redis运行:

allowed_domains = ['dmoztools.net']
start_urls = ['http://www.dmoztools.net/']

scrapy crawl dmoz

 运行结束后redis中多了三个键:

dmoz:requests   存放的是待爬取的requests对象 
dmoz:item       爬取到的信息
dmoz:dupefilter 爬取的requests的指纹

CSDN

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值