十四:爬虫-Redis基础
1、背景
随着互联网+大数据时代的来临,传统的关系型数据库已经不能满足中大型网站日益增长的访问量和数据量。这个时候就需要一种能够快速存取数据的组件来缓解数据库服务I/O
的压力,来解决系统性能上的瓶颈。
2、redis
是什么
Redis
全称 Remote Dictionary Server
(即远程字典服务),它是一个基于内存实现的键值型非关系(NoSQL
)数据库,是由c语言编写的。
常见的内存型数据库,除 Redis
之外,还有 Oracle Berkeley DB
(甲骨文旗下的一款产品)、SQlite
(轻量级内存数据库)、Memcache
(键值型分布式缓存数据库)、Altibase
(基于内存的高性能数据库)。
3、redis
特点
与其他内存型数据库相比,Redis
具有以下特点:
Redis
不仅可以将数据完全保存在内存中,还可以通过磁盘实现数据的持久存储;Redis
支持丰富的数据类型,包括string
、list
、set
、zset
、hash
等多种数据类型,因此它也被称为“数据结构服务器”;Redis
支持主从同步,即master-slave
主从复制模式。数据可以从主服务器向任意数量的从服务器上同步,有效地保证数据的安全性;Redis
支持多种编程语言,包括C
、C++
、Python
、Java
、PHP
、Ruby
、Lua
等语言。
4、redis
优势
下面对 Redis
的优势进行了简单总结:
- 性能极高:
Redis
基于内存实现数据存储,它的读取速度是 110000次/s,写速度是 81000次/s; - 多用途工具:
Redis
有很多的用途,比如可以用作缓存、消息队列、搭建Redis
集群等; - 命令提示功能:
Redis
客户端拥有强大的命令提示功能,使用起来非常的方便,降低了学习门槛; - 可移植性:
Redis
使用用标准C语言
编写的,能够在大多数操作系统上运行,比如Linux
,Mac
,Solaris
等。
5、Redis
架构
Redis
体系架构主要分为两个部分:
Redis
服务端Redis
客户端
客户端和服务端可以位于同一台计算机上,也可以位于不同的计算机上。服务端是整个架构的“大脑”,能够把数据存储到内存中,并且起到管理数据的作用。
6、Redis
应用场景
Redis
用来缓存一些经常被访问的热点数据、或者需要耗费大量资源的内容,通过把这些内容放到 Redis
中,可以让应用程序快速地读取它们。例如,网站的首页需要经常被访问,并且在创建首页的过程中会消耗的较多的资源,此时就可以使用 Redis
将整个首页缓存起来,从而降低网站的压力,减少页面访问的延迟时间。
7、redis
学习地址
1、官网地址:https://redis.io/
2、命令地址:http://doc.redisfans.com/
3、更多配置文件: https://www.cnblogs.com/kreo/p/4423362.html
8、redis
与其他数据库的对比
数据库的存储方式大体可分为两大类,基于磁盘存储和基于内存存储。磁盘存储的数据库,因为磁头机械运动以及系统调用等因素导致读写效率较低。Redis
基于内存来实现数据存取,相对于磁盘来说,其读写速度要高出好几个数量级。下表将 Redis
数据库与其他常用数据库做了简单对比:
Redis
基于内存来实现数据的存储,因此其速度非常快。但是我们知道,计算机的内存是非常珍贵的资源,所以 Redis
不适合存储较大的文件或者二进制数据,否则会出现错误,Redis
适合存储较小的文本信息。理论上 Redis
的每个 key
、value
的大小不超过 512 MB。总得来说,上述数据库各有优势,当我们选用数据库时,也要因地制宜,选择一款与业务场景最相符合的数据库。
9、redis
的安装与配置
启动服务
redis-server.exe
链接客户端
redis-cli.exe
10、redis
数据库常用命令
select 0 切换数据库 默认有16个数据库 0-15 下标从0开始
DBSIZE 查看当前数据库的key数量
keys * 查看key的内容
FLUSHDB 清空当前数据库的key的数量
FLUSHALL 清空所有库的key(慎用)
exists key 判断key是否存在
11、redis
常用五大数据类型:
1、redis-string
string
是redis
最基本的类型,一个key
对应一个value
string
可以包含任何数据,最大不能超过512M
1.set
/get
/del
/append
/strlen
set ---- 设置值
get ---- 获取值
mset ---- 设置多个值
mget ---- 获取多个值
append ---- 添加字段
del ---- 删除
strlen ---- 返回字符串长度
2.incr
/decr
/incrby
/decrby
incr ---- 增加
decr ---- 减少
incrby ----- 制定增加多少
decrby ----- 制定减少多少
3.getrange
/setrange
getrange ---- 获取指定区间范围内的值,类似between....and的关系 [] 闭区间
setrange ---- 代表从第几位开始替换,下脚本从零开始
从0 -1表示全部
2、redis-list
(单值多value
)
List
(列表)
列表是简单的字符串列表,按照插入顺序排序,可以添加一个元素列表的头部(左边)或者尾部(右边)
它的底层实际是个链表
1.lpush
/rpush
/lrange
lpush/rpush/lrange ---- 从左/从右/获取指定长度
lpush list01 1 2 3 4 5 倒序排列
rpush list02 1 2 3 4 5 正序排列
lrange list01 0 -1 获取list01 中的所有值
2.lpop
/rpop
lpop/rpop ---- 移除最左/最右
lpop list01 删除元素5
rpop list01 删除元素1
3.lindex
,按照索引下标获得元素(从上到下)
lrange list01 0 -1
lindex list01 1
4.llen
,求列表长度
llen list01
5.lrem key
删N个value
lrem list01 2 1 在list01中删除2个1
6.ltrim key
ltrim ---- 开始index结束index,截取指定范围的值后在赋值给key
ltrim list01 0 2 截取list01 从0到2的数据在赋值给list01
7.rpoplpush list1 list2
将list1
中最后一个压入list2
中第一位
lrange list01 0 -1
lrange list02 0 -1
rpoplpush list1 list2
8.lset key index value
lset list01 0 x 将list02中第一位换成x
9.linsert key before
/after
linsert list01 before x php 在x之前加字段php
3、redis-Hash
hash
是一个键值对集合
hash
是一个string
类型的field
和value
的映射表,hash
特别适合存储对象
1.hset
/hget
/hmset
/hmget
/hgetall
/hdel
设值/取值/设值多个值/取多个值/取全部值/删除值
hset user id 11
hget user id
hmset customer id 11 name juran age 26
hmget customer id name age 只返回相应的值
hgetall customer 返回全部
hdel user id 删除id
2.hlen
求哈希长度
hlen customer
3.hexists key
hexists ---- 在key里面的某个值
存在返回1 ,不存在返回0
4.hkeys
/hvals
返回哈希表 key 中的所有域。
hkeys students
返回哈希表 key 中所有域的值。
hvals students
4、redis-set
(不重复的)
Set
(集合)
set
是string
类型的无序集合
1.sadd
/smembers
/sismember
sadd/smembers/sismember ---- 添加/查看集合/查看是否存在
sadd set01 1 2 2 3 3 去掉重复添加
smembers set01 得到set01
sismember set01 1 如果存在返回1 不存在返回0
2.scard
scard ---- 获取集合里面的元素个数
scard set01
3.srem key value
srem ---- 删除集合中元素
srem set01 3
SMEMBERS set01 3已经被删除掉
4.srandmember key
srandmembe ---- 随机出几个数
sadd set02 1 2 3 4 5 6 7 8
srandmember set02 2
5.spop key
spop ---- 随机出栈
spop set01
6.smove key1 key2
sadd set03 x y z
smove set01 set03 2 将set01中的2 移动到set03中
5、redis-Zset
Zset
(有序集合)
1.zadd
/zrange
zadd zset01 60 v1 70 v2 80 v3 90 v4 100 v5
zrange zset01 0 -1
带分数返回 withscores
2.zrangebyscore key start end
zrangebyscore key start end----根据开始结束来取值
zrangebyscore zset01 60 70
zrangebyscore zset01 60 (90 表示不包含90
zrangebyscore zset01 60 90 limit 1 2 [1,3]区间取值 下标
3.zrem key
zrem key value---- 某score下对应的value值,作用是删除元素
zrem zset01 v1
4.zcard
/zcount key score
区间/zrank key values
zcard 求zset01 总条数
zcount zset01 60 90 求60-90个数
zrank zset01 v2 返回1 返回对应下角标,从0开始