每天30分钟 一起来学习爬虫——day15(数据存储 之 Redis)


redis 概述

1.NoSQL 技术

为了克服大数据量的需求,或者是主页访问量瞬间较大磁盘读/写速度比较慢的问题,Java Web项目通常会引入NoSQL技术,这是一种基于内存的数据库,并且提供一定的持久化功能。RedisMongoDB是当前使用最广泛的NoSQL,而就Redis技术而言,它的性能十分优越,可以支持每秒十几万此的读/写操作,其性能远超数据库,并且还支持集群、分布式、主从同步等配置,原则上可以无限扩展,让更多的数据存储在内存中。

2.redis 是什么

Redis:REmote DIctionary Server(远程字典服务器)
是一个完全开源免费的用C语言编写的ey-value存储系统,遵守BSD协议
是一个高性能的(key/value)分布式内存数据库,基于内存运行
支持持久化的NoSQL数据库,是当前最热门的NoSql数据库之一,也被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Hash), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。

3.特点:

Redis 与其他 key - value 缓存产品有以下三个特点:

  • 支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再加载运行。
  • 不仅仅支持 key-value 还支持list,set zset hash等数据结构的存储
  • 支持数据的备份,即master-slave模式的数据备份

4.能干什么:

  • 内存存储和持久化,:支持异步将内存中的数据写到硬盘,同时不影响继续服务
  • 取最新N个数据的操作,如可以将最新的10条评论的ID放着Redis的List集合里面
  • 模拟类似于HttpSession 这种需要设定过期时间的功能
  • 发布,订阅消息系统,定时器,计数器

下载安装:

windows一般都是在Github下载,好像目前windows都是3.0.504 的版本,同样网上有很多教程啊,这里简写我的捣鼓过程

把下载的压缩文件解压放在一个自己找到的位置,然后打开文件夹,很简单的,在该文件夹的位置打开cmd窗口运行,redis-server
窗口不要关啊,直接双击打开 文件夹里的 redis-cli.exe 运行就好了,多说一句 conf 是配置文件,如果有需要可以改改端口号之类的。

在这里插入图片描述


数据操作

两个基础操作

select 0 选择第0个数据库,一共16个数据库(默认编号0-15)前面会显示在第几个,0不显示
keys * 查看所有的键

在这里插入图片描述

  1. string

    1. set 插入一个
    2. mset (many set) 插入多个
    3. get 查询一个
    4. mget 查询多个
    5. setex <key> seconds <value> 设置这个键值对的过期时间
    6. append <key> <value> 追加字符串

在这里插入图片描述

  1. hash

存对象,属性,属性值

  1. hset <对象名> <对象属性><对应的值> 插入一个 hset stu name “xiaoxiao”
  2. hmset <对象名> <对象属性> <对应的值> <对象属性><对应的值>...直接插入多个 hmset stu age 10 gender
  3. hget <对象名> <对象属性> 获取一个 hget stu name
  4. hmget<对象名> <对象属性> <对象属性>... 获取多个 hmget stu age gender name
  5. hvals <对象名>hvals stu
  6. hkeys <对象名> hkeys stu
  7. hdel 删除 可以删一个或多个属性 hdel stu name

在这里插入图片描述

  1. list
  1. lpush < key > < value > < value > < value >..从左面加 lpush one 1 2 3 4 这里 one 就是key 是一个列表,可以一次推进多个也可以推一个
  2. rpush < key > < value > < value > < value >.. 从右面加
  3. lrange <key> <下标> <下标>在某一范围取出 从第0个到最后一个。llrange one 0 -1
  4. linsert <key> before <表里的value> <要插入的value> 在数据3 前面插入一个10 ,linsert one before 3 10
  5. linsert <key> after<表里的value> <要插入的value> linsert after 1 20
  6. lpop <key>从左边取 取出来后这个key就没了 lpop one
  7. rpop <key>从右边取 rpop one
  8. lset <key> <下标> <value> 通过下标修改某一值 lset one 3 9
  9. lrem <key> <count> <value> 删除某个值,
    – count > 0 : 从表头开始向表尾搜索,移除与 value 相等的元素,数量为 count 。 lrem one 1 9
    – count < 0 : 从表尾开始向表头搜索,移除与 value 相等的元素,数量为 count 的绝对值。 lrem one -1 9
    – count = 0 : 移除表中所有与 VALUE 相等的 lrem one 0 9
  10. llen <key> 获取列表的长度 llen one

在这里插入图片描述

  1. set

    1. sadd <key> <value> <value> <value>...sadd new 1 2 3 4 5 6 如果已经有的就不插入了
    2. smembers <key> 查询 全部成员
    3. srem <key> <value> <value>...删除 对应value 的数据,如果该value不存在,忽略 srem 2 5 7 0
    4. scard <key>查看 set 中元素的个数scard new
    5. sismember <value> 看成员中有没有 对应的value 有 返回 1 没有返回 sismember new 2

在这里插入图片描述

  1. zset 有序

    1. zadd <key> <权重> <value> <权重> <value> <权重> <value>...可以一次插入好多,权重设定好了就不变了 ,权重可以重复但成员不能重复
    2. zrange <key> <开始序号> < 结束序号> zrange sortset 0 -1查看从第一个到最后一个
    3. zrangebyscore <key> <权重1> <权重2>查询权重在 权重1 和权重2 之间的值
    4. zscore <key> <value>根据内容获取权重
    5. zrem <key> <value> 删除对应value的值
    6. zremrangebysroce <key> <权重1><权重2>删除权重在权重1 到权重 2 的值

在这里插入图片描述

  1. 对key 的命令

    1. keys *查看所有的key
    2. keys K*查看 K 开头的 key
    3. type <key> 查看建的类型
    4. del <key> 删除对应的key
    5. expire <key> <时间>设置过期时间
    6. exists <key>判断对应的key是否存在,存在返回 1 不存在 返回 0
    7. 清空数据库
      flushdb 清楚当前数据库
      flushall清除 0-15 所有的数据库

在这里插入图片描述



python 和 redis 的交互

pip install redis 同样是切换国内源的问题 之前没有切换的看这里
下面直接看代码,

import redis

# 1.链接数据库
client = redis.StrictRedis()  
# 这里用的是基类,还有一个类是redis.Redis
# 我们点进去看源码,里面有host port db等信息,如果有需要,就在那里改。
#一般就默认 或者在括号里写 (host='127.0.0.1',port=6379,db=0) db是默认执行的数据库

2.设置key
key = "pyred"

3.增加内容 以字符串为列
result = client.set(key,"123")
print(result)
# 如果成功返回true

4.删
result = client.delete(key)
print(result)
# 返回的是删去的个数,括号内可以传入多个key,用逗号隔开

#5.修改 其实是替换了
result = client.set(key,"sdfsdf")
print(result)

6.查询
result = client.get(key)
print(result)
# 返回的是字节类型的值
result = client.keys()
print(result)
# 返回的是一个列表,里面是所有的key 同样是字节类型

其实redis 用代码操作没有什么特别的,在客户端怎么操作代码里也同样的操作,我们如果有什么问题就可以点进去看源码,看图图,所以我代码只是演示了一下 string 类型的操作,其他就多说了

在这里插入图片描述

其实我们要有看源码的能力,这么多东西不可能全部记清楚,总有会忘的时候,但是库就在那里,我们只要有印象,看懂源码,就会使用。


有小伙伴昨天问我为什么突然讲起数据库了,我们前面其实已经学了如何发送请求,获取响应,以及如何解析网页的内容,可以说我们爬虫已经入门一大半了,大多数网页都可以爬取了,但是,我们获取的数据可能有各个方面的,就比如我们要是爬取到了疫情的数据,那么我们如果统计,分析数据呢,这就需要用到数据库,前面我们讲了MongoDB ,今天讲了Redis , 我们现在学数据库,并不像数据分析那样学的特别深入,我们只是掌握 做爬虫是需要用到的操作,所以我们要多学习了解一些数据库,选择合适的数据库进行数据处理,讲完数据库后,我们还会讲爬虫高级,所以明天学习 MySQL的简单操作


昨天停更了一天,访问量少的惊人。害,还是希望各位路过的朋友,如果觉得可以学到些什么的话,点个赞再走吧,欢迎各位路过的大佬评论,指正错误,也欢迎有问题的小伙伴评论留言,私信。每个小伙伴的关注都是我更博的动力》》》》奥里给

最后 问一句,这篇博文的配色是不是有点丑,有没有什么好的建议啊。哭了

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值