redis 概述
1.NoSQL 技术
为了克服大数据量的需求,或者是主页访问量瞬间较大磁盘读/写速度比较慢的问题,Java Web项目通常会引入NoSQL技术,这是一种基于内存的数据库,并且提供一定的持久化功能。Redis和MongoDB是当前使用最广泛的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 *
查看所有的键
-
string
set
插入一个mset
(many set) 插入多个get
查询一个mget
查询多个setex <key> seconds <value>
设置这个键值对的过期时间append <key> <value>
追加字符串
- hash
存对象,属性,属性值
hset <对象名> <对象属性><对应的值>
插入一个 hset stu name “xiaoxiao”hmset <对象名> <对象属性> <对应的值> <对象属性><对应的值>...
直接插入多个 hmset stu age 10 genderhget <对象名> <对象属性>
获取一个 hget stu namehmget<对象名> <对象属性> <对象属性>...
获取多个 hmget stu age gender namehvals <对象名>
hvals stuhkeys <对象名>
hkeys stuhdel
删除 可以删一个或多个属性 hdel stu name
- list
lpush < key > < value > < value > < value >..
从左面加 lpush one 1 2 3 4 这里 one 就是key 是一个列表,可以一次推进多个也可以推一个rpush < key > < value > < value > < value >..
从右面加lrange <key> <下标> <下标>
在某一范围取出 从第0个到最后一个。llrange one 0 -1linsert <key> before <表里的value> <要插入的value>
在数据3 前面插入一个10 ,linsert one before 3 10linsert <key> after<表里的value> <要插入的value>
linsert after 1 20lpop <key>
从左边取 取出来后这个key就没了 lpop onerpop <key>
从右边取 rpop onelset <key> <下标> <value>
通过下标修改某一值 lset one 3 9lrem <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 9llen <key>
获取列表的长度 llen one
-
set
sadd <key> <value> <value> <value>...
sadd new 1 2 3 4 5 6 如果已经有的就不插入了smembers <key>
查询 全部成员srem <key> <value> <value>...
删除 对应value 的数据,如果该value不存在,忽略 srem 2 5 7 0scard <key>
查看 set 中元素的个数scard newsismember <value>
看成员中有没有 对应的value 有 返回 1 没有返回 sismember new 2
-
zset 有序
zadd <key> <权重> <value> <权重> <value> <权重> <value>...
可以一次插入好多,权重设定好了就不变了 ,权重可以重复但成员不能重复zrange <key> <开始序号> < 结束序号>
zrange sortset 0 -1查看从第一个到最后一个zrangebyscore <key> <权重1> <权重2>
查询权重在 权重1 和权重2 之间的值zscore <key> <value>
根据内容获取权重zrem <key> <value>
删除对应value的值zremrangebysroce <key> <权重1><权重2>
删除权重在权重1 到权重 2 的值
-
对key 的命令
keys *
查看所有的keykeys K*
查看 K 开头的 keytype <key>
查看建的类型del <key>
删除对应的keyexpire <key> <时间>
设置过期时间exists <key>
判断对应的key是否存在,存在返回 1 不存在 返回 0- 清空数据库
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的简单操作。
昨天停更了一天,访问量少的惊人。害,还是希望各位路过的朋友,如果觉得可以学到些什么的话,点个赞再走吧,欢迎各位路过的大佬评论,指正错误,也欢迎有问题的小伙伴评论留言,私信。每个小伙伴的关注都是我更博的动力》》》》奥里给
最后 问一句,这篇博文的配色是不是有点丑,有没有什么好的建议啊。哭了