当前位置: 首页 > article >正文

2024 高级爬虫笔记(五)mysql、MongoDB、reids

目录

  • 一、mysql数据库
    • 1.1 关系型与非关系型数据库
    • 1.2、对于MySQL数据库的操作
      • 1.2.1、库的操作
      • 1.2.2、 表的操作
      • 1.2.3、表中数据的操作——增
      • 1.2.4、表中数据的操作——查
      • 1.2.5、表中数据的操作——改
      • 1.2.6、表中数据的操作——删
      • 1.2.7、WHERE条件
        • 1.2.7.1、比较运算符
        • 1.2.7.2、逻辑运算符
        • 1.2.7.3、order by 排序 升序/降序
        • 1.2.7.4、limit 取值
        • 1.2.7.5、 like 模糊查询
      • 1.2.8、 聚合函数
    • 1.3、Python操作MySQL
      • 1.3.1、安装及导入
      • 1.3.2、基本使用
  • 二、Mongodb数据库
    • 2.1 MongoDB下载及安装
    • 2.2、MongoDB概念解析
    • 2.3、连接Mongodb
    • 2.4、对于库的操作
    • 2.5、对于数据的操作
      • 2.5.1、增
      • 2.5.2、查
      • 2.5.3、改
      • 2.5.4、删
    • 2.6、数据库删除与退出
    • 2.7、Python操作MongoDB
      • 2.7.1、导入 pymongo
      • 2.7.2、连接服务器
      • 2.7.3、连接数据库
      • 2.7.4、数据相关操作
  • 三、redis数据库
    • 3.1 Redis 简介
    • 3.2、 Redis下载、安装及启动
    • 3.3、Redis的数据类型
      • 3.3.1、Redis数据类型一览
      • 3.3.2、Redis数据类型——String
      • 3.3.2、Redis数据类型——hash
      • 3.3.3、Redis数据类型——列表 list
      • 3.3.4、Redis数据类型——集合 set
      • 3.3.5、Redis数据类型——有序集合 zset
    • 3.4、Redis 安全
    • 3.5、Redis 数据备份与恢复
    • 3.6、Python操作redis

一、mysql数据库

1.1 关系型与非关系型数据库

+ 关系型数据库的优势:
    1. 复杂查询
       可以用SQL语句方便的在一个表以及多个表之间做非常复杂的数据查询

    2. 事务支持
       使得对于安全性能很高的数据访问要求得以实现

+ 非关系型数据库的优势:
    1. 性能
       NOSQL是基于键值对的,可以想象成表中的主键和值的对应关系。不需要经过SQL层的解析,所以性能很高

    2. 可扩展性
       同样也是也因为基于键值对,数据之间没有偶尔性,所以非常容易水平扩展

1.2、对于MySQL数据库的操作

1.2.1、库的操作

+ 查看所有的数据库
  show databases;

+ 选择数据库
  use 库名

+ 查看当前库下有哪些表
  show tables;

+ 查看当前所在库
  select database();

+ 创建数据库
  create database 库名;

+ 查看创建库信息
  show create database 库名;

+ 删除库/表
  drop database 库名;
  drop table 表名;

+ 创建库并设置字符编码
  create database lucky character set utf8;

+ 查看表结构
  desc 表名;

+ 查看创建表语句
  show create table lucky;

+ 撤销当前命令
  \c

+ 数据库的退出
  + \q
  + exit
  + quit

+ 注意
    1. MySQL命令以英文的分号作为结束
    2. SQL命令不区分大小写
    3. 在进入到一个数据库中在进入到另外一个的时候 不需要退出数据库 而是使用use再次进行数据库的切换
    4. windows下表名库名不区分大小写 Linux下严格区分
    5. MySQL数据库的名称具有唯一性 每个库中的表的名称也具有唯一性(库名或者一个库中的表名不要出现相同的名称)
    6. 当在输入命令的时候输入完以后 添加分号不能执行命令 那么查看一下左侧是否存在引号没有闭合的情况

1.2.2、 表的操作

创建表有两种方案:
1. 用SQL语句创建表格
   create table student(
           sno int(10) primary key auto_increment,
       sname varchar(50) not null,
       sbirthday date not null,
       saddress varchar(255),
       sphone varchar(12),
       class_name varchar(50)
   )

   数据类型:
       int 整数
       double小数
       varchar  字符串
       text 大文本

   约束条件:
       primary key 主键, 全表唯一值. 就像学号. 身份证号. 能够唯一的确定一条数据
       auto_increment 主键自增.
       not null  不可以为空.
       null  可以为空
       default 设置默认值

2. 用Navicat图形化工具来创建

1.2.3、表中数据的操作——增

1. 指定字段添加值
   insert into 表名(字段1,字段2....) values(1,2...)
   insert into user(sex,username) values(0,'lucky');

2. 不指定字段添加值
   insert into 表名 values(1,2...)
   insert into user values(null,0,'lucky','我是lucky老师');

3. 指定字段添加多个值
   insert into 表名(字段1,字段2....) values(1,2...),(1,2...)...
   insert into user(sex,username) values(1,'苍苍'),(0,'蒹葭');

4. 不指定字段添加多个值
   insert into 表名 values(1,2...),(1,2...)...
   insert into user values(null,1,'xxx','xxx'),(null,0,'xxl','xxl');

**注意事项:**
指定字段与不指定字段在添加值的时候 按照从左至右依次对应给值

1.2.4、表中数据的操作——查

1. 不指定字段的查询(不建议)
   select * from 表名

2. 指定字段的数据查询(建议)
   select 字段名1,字段名2... from  表名
   select  username,userinfo from user;

3. 对查询的字段起别名
   select username as u from user;
   select username  u from user;

1.2.5、表中数据的操作——改

1. 修改一个字段的值
   update 表名 set 字段名=;
   update user set username='帅气的lucky' where id = 3;

2. 修改多个字段的值
   update 表名 set 字段名1=1,字段名2=2...;
   update user set sex=0,userinfo='xxx的个人简介' where id=7;

3. 给字段的值在原有的基础上改变值
   update user set sex=sex+2;

**注意:**
在进行数据的修改的时候 一定记得给定where条件  如果没有给定where条件 则修改的为整张表当前字段的值

1.2.6、表中数据的操作——删

**主体结构:**
delete from 表名 [where ...]

**实例:**
delete from user; 删除user表中所有的数据

**注意:**
删除 一定注意添加 where 条件   否则会删除整张表中的数据  并且auto_increment自增所记录的值不会改变  所以需要将自增归位

truncate 表名; 清空表数据

1.2.7、WHERE条件

1.2.7.1、比较运算符
1. `>`
   将id大于5 的性别 更改为0 年龄改为20岁
   update user set sex=0,age=20 where id>5;

2. `<`
   将id小于3 的性别 更改为0 年龄改为23岁
   update user set sex=0,age=23 where id<3;

   查看id小于4的 性别和用户名的字段数据
   select sex,username from user where id<4;

3. `>=`
   删除 id大于等于6的数据
   delete from user where id>=6;

4. `<=`
   查询年龄小于等于23的数据
   select * from user where age<=23;

5. =
   查询性别为0的数据
   select * from user where sex=0;

6. `!=/<>`
   查询 用户名不等于lucky的所有数据
   select * from user where username!='lucky';
   select * from user where username<>'lucky';
1.2.7.2、逻辑运算符
1. and 逻辑与 俩侧为真结果为真
   查询年龄在1823之间 不包括本身
   select * from user where age>18 and age<23;

2. or 逻辑或运算 俩侧条件满足一侧就可以
   select * from user where age=10 or age=30;
   select * from user where age>=10 or age<=30;
1.2.7.3、order by 排序 升序/降序
   查询数据 按照年龄升序(默认)
   select * from user order by age;
   select * from user order by age asc;

   查询数据 按照年龄降序
   select * from user order by age desc;
1.2.7.4、limit 取值
limit x 取出x条数据
limit x,y 从x的位置取出y条数据

取出3条数据
select * from user limit 3;

取出年龄最大/最小的一条数据
select * from user order by age desc limit 1;
select * from user order by age limit 1;
1.2.7.5、 like 模糊查询
1.%字符‘ 查询以字符结尾的数据
   查询以三字为结束的username的数据
   select * from user where username like '%三';

2. '字符%' 查询以字符开头的数据
   select * from user where username like '赵%';

3. '%字符%' 查询包含字符的数据
   查询 userinfo中包含lucky的数据
   select * from user where userinfo like '%lucky%';

1.2.8、 聚合函数

1. count 统计个数
2. max 最大值
3. min 最小值
4. Sum 求和
5. avg 求平均数

select count(*) as count,max(age),min(age),avg(age),sum(age) from user;

1.3、Python操作MySQL

1.3.1、安装及导入

**安装:**
pip install pymysql


**导入:**
import pymysql

1.3.2、基本使用

# 链接mysql数据库
db = pymysql.connect(主机名,用户名,密码,数据库名)
db = pymysql.connect(host='localhost', user='root', password='123456', database='test')

# 设置字符集
db.set_charset('utf8')

# 创建游标对象
cursor = db.cursor()

# 执行SQL语句
cursor.execute(sql语句)


# 获取结果集
获取所有
cursor.fetchall()

获取一条
cursor.fetchone()


# 获取受影响的行数
cursor.rowcount

# 事物
pymysql默认开启了事务处理 所以在添加数据的时候 需要commit 或者rollback


# 实例:
try:
    sql = 'insert into user values(null,1,"曹操",100,"曹操第一奸雄","魏国")'
    print(sql)
    cursor.execute(sql)
    db.commit()
except:
   db.rollback()

对于支持事务的数据库, 在Python数据库编程中,当游标建立之时,就自动开始了一个隐形的数据库事务。

commit()方法游标的所有更新操作,rollback()方法回滚当前游标的所有操作。每一个方法都开始了一个新的事务。

# 关闭数据库连接
db.close()

二、Mongodb数据库

2.1 MongoDB下载及安装

1、性能
BSON格式的编码和解码都是非常快速的。它使用了C风格的数据表现形式,这样在各种语言中都可以高效地使用。
NoSQL(NoSQL = Not Only SQL ),意即"不仅仅是SQL"。
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。
MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。


2、下载mongodb的版本,两点注意
  - 根据业界规则,偶数为稳定版,如1.6.X,奇数为开发版,如1.7.X
  - 32bit的mongodb最大只能存放2G的数据,64bit就没有限制

3、去官网下载MongoDB的安装包, https://www.mongodb.com/try/download/community
   安装流程:安装方式选择custom,去掉勾选Install MongoDB Compass选项

4、安装完成后将mongodb目录下的bin文件夹添加到环境变量

2.2、MongoDB概念解析

SQL术语/概念MongoDB术语/概念解释/说明
databasedatabase数据库
tablecollection数据库表/集合
rowdocument数据记录行/文档
columnfield数据字段/域
需要注意的是:
1. 文档中的键/值对是有序的。
2. 文档中的值不仅可以是在双引号里面的字符串,还可以是其他几种数据类型(甚至可以是整个嵌入的文档)3. MongoDB区分类型和大小写。
4. MongoDB的文档不能有重复的键。
5. 文档的键是字符串。除了少数例外情况,键可以使用任意UTF-8字符。

文档键命名规范:
- .和$有特别的意义,只有在特定环境下才能使用。
- 以下划线"_"开头的键是保留的(不是严格要求的)

2.3、连接Mongodb

1、cd mongo安装的目录/bin
    输入 mongod.exe  --dbpath=路径

2、重新启动一个Windows的终端,cd mongo安装的目录/bin
    mongo.exe   #此刻 进入到Mongodb数据库了

2.4、对于库的操作

1、查看所有的库
    show dbs

2、选择数据库 (如果使用的数据库存在 则使用 不存在 则创建)
    use 库名

3、查看当前所在的数据库
    db.getName()

4、创建集合(也就是创建表)
    db.createCollection("集合名")
    注意:
        1. 在库里对于文档 集合的操作 统一使用db. (db代表当前的库)
        2. 严格区分大小写

5、查看当前库下的所有集合
    show collections

6、删除集合
    db.集合名.drop()

2.5、对于数据的操作

2.5.1、增

1、使用insert插入一条数据:
    db.集合名.insert(文档) 

2、插入多条数据:
    db.集合名.insert([文档]) #注意 一定要加[] 否则可能只会把 第一条文档插入进去

3、示例:
    db.user.insert({'name':'lisi', 'age': 20})
    db.user.insert([{'name':'lisi', 'age': 20},{'name': 'wangwu', 'age': 30}])

4、插入新用法
    db.collection.insertOne():向指定集合中插入一条文档数据
    db.collection.insertMany():向指定集合中插入多条文档数据

5、示例
    db.user.insertOne({'name':'lisi', 'age': 20})
    db.user.insertMany([{'name':'lisi', 'age': 20},{'name': 'wangwu', 'age': 30}])

2.5.2、查

1、find 查询所有
    db.集合名.find([条件],{key1:1[,[key2:1]]}) #查询所有的数据   代表 显示哪些字段名

    db.collection.find(query, {title: 1, by: 1}) // inclusion模式 指定返回的键,不返回其他键
    db.collection.find(query, {title: 0, by: 0}) // exclusion模式 指定不返回的键,返回其他键

    注意:
        1、两种模式不可混用(因为这样的话无法推断其他键是否应返回)
        2、_id 键默认返回,需要主动指定 _id:0 才会隐藏
        3、只能全1或全0,除了在inclusion模式时可以指定_id为0

1.1、示例
    db.collection.find(query, {_id:0, title: 1, by: 1}) // 正确
    
    db.user.find({}, {'name': 0})
    db.user.find({'age': 18}, {'name': 1})  # 只返回name字段
    db.user.find({'age': 18}, {'name': 0})  # 不返回name字段

2、findOne()  查询一条
    db.集合名.findOne([条件],{key1:1[,[key2:1]]}) #查询一条数据  代表 显示哪些字段名
    db.user.findOne({}, {name:1})

3、count 统计数据条数
    db.集合名.find([条件]).count()
    db.user.find({}).count()

4、pretty()  展开来查看
    db.集合名.find([条件]).pretty()
    db.user.find({}).pretty()

5、查询条件的操作符
| 符号          | 符号说明     | 实例                                    | 说明                    |
| :---------- | :------- | ------------------------------------- | --------------------- |
| $gt         | 大于       | db.user.find({age:{$gt:18}})          | 年龄大于18|
| $gte        | 大于等于     | db.user.find({age:{$gte:18}})         | 年龄大于等于18|
| $lt         | 小于       | db.user.find({age:{$lt:18}})          | 年龄小于18                |
| $lte        | 小于等于     | db.user.find({age:{$lte:18}})         | 年龄小于等于18              |
| {key:value} | 等于       | db.user.find({age:18})                | 年龄等于18                |
| //         | 模糊查询     | db.user.find({username://})          | 查询年龄中包含小字的文档          |
| /^/        |...作为开头 | db.user.find({username:/^/})         | 查询username中以小字作为开头的文档 |
| /值$/        |...作为结尾 | db.user.find({username:/小$/})         | 查询username中以小字作为结尾的文档 |
| $in         |...| db.user.find({age:{$in:[18,20,30]})   | 查询年龄在18,20,30的文档      |
| $nin        | 不在...| db.user.find({age:{$nin:[18,20,30]}}) | 查询年龄不在 1,20,30的文档     |
| $ne         | 不等于 !=   | db.user.find({age:{$ne:18}})          | 查询年龄不为18的文档           |

6、AND 查询
    db.col.find({key1:value1, key2:value2}).pretty()
    db.集合名.find({条件一,条件二,,,})

6.1、示例:    
    db.user.find({name:"张三",age:{$gt:10}}) #查询name为张三的 且 年龄 大于10岁的
    db.user.find({name:"张三",age:10})         #查询name为张三的 且 年龄为10岁的

7、OR 查询
    db.集合名.find({$or:[{条件一},{条件二},,,]})

7.1、示例:
    db.user.find({$or:[{name:"张三"},{name:"赵六"}]})   #查询name为张三 或者为赵六的所有数据

8、LIMIT  取值
    db.集合名.find().limit(num)   #从第0个开始取几个
    db.user.find().limit(5)   #从0开始取5条数据

9、skip 跳过几个
    db.集合名.find().skip(num) #跳过几条数据
    db.user.find().skip(2) #从第三条数据 取到最后

10、limit  skip 配合使用
    db.集合名.find().skip().limit(num)
    db.user.find().skip(2).limit(2)  #从第三个开始 取2个

11、SORT 排序
    在MongoDB中使用使用sort()方法对数据进行排序
    sort()方法可以通过参数指定排序的字段,并使用 1-1 来指定排序的方式
    其中 1 为升序排列,而-1是用于降序排列。

    db.集合名.find().sort({key:1|-1})  #升序或者降序
    db.user.find().sort({age:1})  #查询所有数据 按照年龄 升序
    db.user.find().sort({age:-1})  #查询所有数据 按照年龄 降序

2.5.3、改

1、更新操作符  `$set直接修改   $inc累加修改`
    db.集合名.update(条件,数据,{multi:true}) 更改
    db.user.update({name:"张三"},{$inc:{age:5}}) #修改name为张三的文档  将age在原有的基础上 加5
    db.user.update({name:"张三"},{$set:{age:5}}) #修改name为张三的文档  将age的值 修改为5
    db.user.update({name:"张三"},{$set:{age:5}}) #将name为张三的文档 的年龄 修改为 5

2、updateOne()  更新一条
    db.user.updateOne({'name':'lisi'}, {$inc:{'age':5}})

3、updateMany(query,update) 更新多条
    db.user.updateMany({'name':'lisi'}, {$inc:{'age':5}})

2.5.4、删

1、主体结构
    db.集合名.remove(条件) #默认将所有都匹配到的数据进行删除
    db.集合名.remove(条件,1) #只删除 第一个匹配到的数据
    db.集合名.remove(条件,{justOne:true}) #只删除 第一个匹配到的数据

1.1、示例
    b.user.remove({'age':{$gt: 30}})  # 删除年龄大于30的所有数据
    b.user.remove({'age':{$gt: 30}}, 1)  # 删除年龄大于30的一条数据
    db.col.remove({})  清空集合 "col" 的数据

23.2 版本后还有以下几种语法可用于删除文档:(建议)

    deleteOne() 删除一条
    db.user.deleteOne({'age':{$gt: 0}})

    deleteMany() 删除多条
    db.user.deleteMany({'age':{$gt: 0}})

2.6、数据库删除与退出

1、数据库删除:
    db.dropDatabase()

2、数据库的退出:
    exit

2.7、Python操作MongoDB

2.7.1、导入 pymongo

from pymongo import MongoClient

2.7.2、连接服务器

1、连接MongoDB
    连接MongoDB我们需要使用PyMongo库里面的MongoClient
    一般来说传入MongoDB的IP及端口即可
    第一个参数为地址host,第二个参数为端口port,端口如果不传默认是270172、代码
    conn = MongoClient("localhost")
    MongoClient(host='127.0.0.1',port=27017)

2.7.3、连接数据库

# 连接数据库
db = conn.数据库名称

# 连接集合
collection = db.collection_name

2.7.4、数据相关操作

1、插入数据
    insert_one 插入一条数据
    insert_many() 插入多条数据

    data.inserted_id 返回id
    data.inserted_ids

2、查询数据
2.1、查询一条
    db.user.find_one()

2.2、带条件查询
    db.user.find({"name":"张三"})

2.3、模糊查询
     {"name":{'$regex':"张"}}
     {'xxx':re.compile('xxx')}  

2.4、sort 排序
    年龄 大于10
    data = db.user.find({"age":{"$gt":10}}).sort("age",1) #年龄 升序 查询  pymongo.ASCENDING   --升序
    data = db.user.find({"age":{"$gt":10}}).sort("age",-1) #年龄 降序 查询    pymongo.DESCENDING --降序

2.5、limit 取值
    取三条数据
    db.user.find().limit(3)
    m= db.user.find({"age":{"$gt":10}}).sort("age",-1).limit(3)

2.6、skip  从第几条数据开始取
    db.user.find().skip(2)


3、update 修改
    update_one() 第一条符合条件的数据进行更新
    db.user.update_one({"name":"张三"},{"$set":{"age":99}})

    update_many() 将所有符合条件的数据都更新
    db.user.update_many({"name":"张三"},{"$set":{"age":91}})

4、remove 删除
    删除操作比较简单,直接调用remove()方法指定删除的条件即可,符合条件的所有数据均会被删除,

4.1、删除一条
    delete_one()即删除第一条符合条件的数据
    collection.delete_one({“name”:“ Kevin”})

4.2、删除多条
    delete_many()即删除所有符合条件的数据,返回结果是DeleteResult类型
    collection.delete_many({“age”: {$lt:25}})

4.3、可以调用deleted_count属性获取删除的数据条数。
    result.deleted_count

5、关闭连接
    conn.close()

三、redis数据库

3.1 Redis 简介

Redis特点:
    1、Redis是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。
    2、Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
    3、Redis不仅仅支持简单的key-value类型的数据,同时还提供listset,zset,hash等数据结构的存储。

Redis和MongoDB的区别:
    Redis是完全在内存中保存数据的数据库,使用磁盘只是为了持久性目的
    Redis数据全部存在内存,定期写入磁盘
    当内存不够时,可以选择指定的LRU算法删除数据,持久化是使用RDB方式或者aof方式。

    mongodb是文档型的非关系型数据库,MongoDB更类似MySQL,支持字段索引、游标操作
    其优势在于查询功能比较强大,擅长查询JSON数据,能存储海量数据,但是不支持事务。

3.2、 Redis下载、安装及启动

1、下载地址:
    https://github.com/ServiceStack/redis-windows
    https://github.com/MSOpenTech/redis/releases

2、设置  redis.windows.conf
    455行 maxheap 1024000000   设置最大的数据堆的大小
    387行 requirepass 123456        设置数据库的密码

3、启动服务
    cd C:\redis64-2.8.2101
    C:\redis64-2.8.2101>redis-server.exe redis.windows.conf  #执行 redis-server.exe 并加载Windows的配置文件
    C:\redis64-2.8.2101>dump.rdb  为数据文件

4、测试是否连接成功
    再打开一个新的终端
    输入密码 (这个密码就是在redis.windows.conf里面设置的密码)
    C:\redis64-2.8.2101>redis-cli.exe
    127.0.0.1:6379>auth '123456'    

5、注意:
    密码 为 字符串类型

3.3、Redis的数据类型

3.3.1、Redis数据类型一览

1. 字符串 String
2. 哈希 hash
3. 列表 list
4. 集合 set
5. 有序集合 zset

3.3.2、Redis数据类型——String

1、概述:
    String是redis最基本的类型,最大能存储512MB的数据
    String类型是二进制安全的,即可以存储任何数据、比如数字、图片、序列化对象等
    一个key对应一个value

2、设置键值
    set key value
    set name "zhangsan"

3、设置键值及过期时间,以秒为单位
    setex key seconds value
    setex name 10 'zhangsan'

4、查看有效时间,以秒为单位
    ttl key
    ttl name

5、取消过期时间
    persist key
    persist name

6、只有在 key 不存在时设置 key 的值
    setnx key value
    setnx name 'a'

7、设置多个键值
    mset key value [key value ……]
    mset name 'zs' age 18     


8、根据键获取值,如果键不存在则返回None(null 0 nil)
    get key
    get name

9、根据多个键获取多个值
    mget key [key ……]
    mget name age

10、返回 key 中字符串值的子字符
    getrange key start end
    getrange name 0 4

11、将给定 key 的值设为 value ,并返回 key 的旧值(old value)
    getset key value
    getset name 'x'

12、将key对应的值加1
    incr key   
    incr age

13、将key对应的值减1
    decr key
    decr age

14、将key对应的值加整数
    incrby key intnum
    incrby age 10    `    

15、将key对应的值减整数
    decrby key intnum
    decrby age 10

16、获取值长度
    strlen key
    strlen age

17、查找所有的 key
    keys *

18、判断键是否存在,如果存在返回1,不存在返回0
    exists key
    exists name

19、查看键对应的value类型
    type key
    type name

20、删除键及对应的值
    del key [key ……]

21、设置过期时间,以秒为单位
    expire key seconds
   `expire age 10`

22、查看有效时间,以秒为单位
    ttl key

23、以毫秒为单位返回 key 的剩余的过期时间
    pttl key

24、移除 key 的过期时间,key 将持久保持
    persist key

25、删除所有的key
    flushdb    删除当前数据库中的所有
    flushall        删除所有数据库中的key

26、修改 key 的名称(仅当 newkey 不存在时,将 key 改名为 newkey)
    rename key newkey

27、将key移动到指定的数据库中
    Move key db

28、随机返回一个key
    randomkey

3.3.2、Redis数据类型——hash

1、概述:hash用于存储对象
    {
        name:"tom",
        age:18
    }
    hash 是一个键值(key=>value)对集合。

2、设置单个值
    hset key field value
    hset myhash name lucky
    HGET myhash name

3、设置多个值
    hmset key field value [field value ……]
    hmset myhash a 1 b 2 c 3

4、为哈希表 key 中的指定字段的整数值加上增量 increment
    hincrby key field incrment
    hincrby hh age 10

5、只有在字段 field 不存在时,设置哈希表字段的值
    hsetnx key field value

6、获取一个属性的值
    hget key field
    `hget name field1`

7、获取多个属性的值
    hmget key filed [filed ……]

8、获取所有字段和值
    hgetall key

9、获取所有字段
    hkeys key

10、获取所有值
    hvals key

11、返回包含数据的个数
    hlen key

12、判断属性是否存在,存在返回1,不存在返回0
    hexists key field
    `hexists a x`

13、删除字段及值    
    hdel key field [field ……]
    `hdel a x y z`

14、返回值的字符串长度  起始版本 3.2    
    hstrlen key field

3.3.3、Redis数据类型——列表 list

1、概述:Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)

2、在头部插入
    lpush key value [vlaue ……]
    lpush demo 2 3`

3、将一个值插入到已存在的列表头部,列表不存在时操作无效
    Lpushx  key val
    lpushx list 'a'

4、在尾部插入
    rpush key value [vlaue ……]
    rpush demo 2 1

5、为已存在的列表添加值
    rpushx  key val
    rpushx mm 'a'    

6、移除并返回key对应的list的第一个元素
    lpop key
    lpop demo

7、移除并返回key对应的list的最后一个元素
    rpop key
    rpop demo

8、返回存储在key的列表中的指定范围的元素
    lrange key  start end
    lrange demo 0 -1    #查看列表中的所有元素
    注意:start end都是从0开始
    注意:偏移量可以是负数

9、裁剪列表,改为原集合的一个子集
    ltrim key start end
    ltrim demo 1 -1    #将索引为1 到 -1的元素裁剪出来
    注意:start end都是从0开始
    注意:偏移量可以是负数

10、返回存储在key里的list的长度
    llen key

11、返回列表中索引对应的值
    lindex key index
    LINDEX mylist 0

3.3.4、Redis数据类型——集合 set

1、概述:无序集合,元素类型为String类型,元素具有唯一性,不重复

2、添加元素
    sadd key member [member ……]
    sadd set 'a' 'b' 'c'

3、返回key集合中所有元素
    smembers key
    smembers set

4、返回集合元素个数
    scard key
    scard set

5、移除并返回集合中的一个随机元素
    spop  key
    spop set

6、返回集合中一个或多个随机数
    srandmember  key  count
    s set        #返回一个随机元素
    srandmember set 2    #返回2个随机元素

7、移除集合中一个或多个成员
    srem  key   member1 [memkber2]
    srem set 'd' 'b'ss

8、求多个集合的交集s
    sinter key [key ……]
    sinter m l    #求集合l和集合m的交集

9、求多个集合的差集
    sdiff key [key ……]
    sdiff m l    #求差集 注意比较顺序

10、判断元素是否在集合中,存在返回1,不存在返回0
    sismember key member
    sissmember m 'a'   #集合m中是否存在元素'a'

3.3.5、Redis数据类型——有序集合 zset

1、概述:
    a、有序集合,元素类型为String,元素具有唯一性,不能重复
    b、每个元素都会关联一个double类型的score(表示权重),通过权重的大小排序,元素的score可以相同

2、添加
    zadd key score member [score member ……]
    zadd zset 1 a 5 b 3 c 2 d 4 e

3、有序集合中对指定成员的分数加上增量 increment
    Zincrby    key increment  mcfaember
    zincrby zset 10 'a'   #给a的权重上加10

4、返回指定范围的元素
    zrange key start end
    zrange z1 0 -1

5、返回元素个数
    zcard key
    zcard z1

6、返回有序集合key中,score在minmax之间的元素的个数
    zcount key min max

7、返回有序集合key中,成员member的score值
    zscore key member
    zscore l 'c'    #s返回c的权重
    
8、当前集合所有的值和权重
    ZRANGE key 0 -1 WITHSCORES

9、返回有序集合中指定分数区间内的成员,分数由低到高排序。
    ZRANGEBYSCORE key min max [WITHSCORES][LIMIT offset count]
    minmax可以是-inf和+inf,这样一来,你就可以在不知道有序集的最低和最高score值的情况下,使用ZRANGEBYSCORE这类命令。

10、从排序的集合中删除一个或多个成员
    当key存在,但是其不是有序集合类型,就返回一个错误。
    ZREM key member [member ...]

3.4、Redis 安全

1、注意:当前密码修改后如果服务重启则需要重新设定
    
2、我们可以通过 redis 的配置文件设置密码参数,这样客户端连接到 redis 服务就需要密码验证,这样可以让你的 redis 服务更安全。


3、实例
    我们可以通过以下命令查看是否设置了密码验证:

    127.0.0.1:6379> CONFIG get requirepass
    1) "requirepass"
    2) ""

    默认情况下 requirepass 参数是空的,这就意味着你无需通过密码验证就可以连接到 redis 服务。

    你可以通过以下命令来修改该参数:

    127.0.0.1:6379> CONFIG set requirepass "lucky"
    OK
    127.0.0.1:6379> CONFIG get requirepass
    1) "requirepass"
    2) "lucky"

    设置密码后,客户端连接 redis 服务就需要密码验证,否则无法执行命令。

4、语法
    AUTH命令基本语法格式如下:
    127.0.0.1:6379> AUTH password

5、实例
    127.0.0.1:6379> AUTH "lucky"
    OK
    127.0.0.1:6379> SET mykey "Test value"
    OK
    127.0.0.1:6379> GET mykey
    "Test value"

3.5、Redis 数据备份与恢复

1、SAVE命令用于创建当前数据库的备份。

2、语法
    redis 127.0.0.1:6379> SAVE

3、实例
    redis 127.0.0.1:6379> SAVE
    OK

4、该命令将在 redis 安装目录中创建dump.rdb文件。

5、如果需要恢复数据,只需将备份文件 (dump.rdb) 移动到 redis 安装目录并启动服务即可。
   
6、获取 redis 目录可以使用CONFIG命令,如下所示:
    redis 127.0.0.1:6379> CONFIG GET dir
    1) "dir"
    2) "/usr/local/redis/bin"

    以上命令CONFIG GET dir输出的 redis 安装目录为 /usr/local/redis/bin7、创建 redis 备份文件也可以使用命令 **BGSAVE**,该命令在后台执行。

8、实例
    127.0.0.1:6379> BGSAVE
    Background saving started

3.6、Python操作redis

1、安装
    pip install redis

2、导入
    import  redis

3、连接方式
    + StrictRedis:实现大部分官方的命令
    + Redis:是StrictRedis的子类,用于向后兼容旧版的redis。
    官方推荐使用StrictRedis方法。

4、举例(普通连接):
    import redis

    # decode_responses=True  自动解码
    r = redis.Redis(host='127.0.0.1',port=6379,password='123c456',db=0,decode_responses=True) #默认数据库为0
    r = redis.StrictRedis(host='10.10.2.14',port=6379,password='123456',decode_responses=True)

5、连接池:connection pool
    管理对一个redis server的所有连接,避免每次建立,释放连接的开销。
    默认,每个redis实例都会维护一个自己的连接池,可以直接建立一个连接池,作为参数传给redis,这样可以实现多个redis实例共享一个连接池。

6、举例(连接池):
    pool = redis.ConnectionPool(host='127.0.0.1',port=6379,db=0,password='123456',decode_responses=True)
    r = redis.Redis(connection_pool=pool)

http://www.kler.cn/a/469949.html

相关文章:

  • stm32week3
  • “AI智慧语言训练系统:让语言学习变得更简单有趣
  • Element-UI:如何实现表格组件el-table多选场景下根据数据对某一行进行禁止被选中?
  • 51单片机——8*8LED点阵
  • ceph集群配置
  • 求职:求职者在现场面试中应该注意哪些问题?
  • 【Java数据结构】二叉树
  • 内网穿透的应用-自托管文件分享系统PicoShare搭建流程与远程共享实战教程
  • 大数据-240 离线数仓 - 广告业务 测试 ADS层数据加载 DataX数据导出到 MySQL
  • LInux单机安装Redis
  • 现代前端框架
  • html+css+js网页设计 体育 中满体育4个页面
  • html 元素中的data-v-xxxxxx 是什么?为什么有的元素有?有的没有?
  • 并行通信和串行通信
  • JVM调优,参数在哪里设置的?
  • STM32F4适配WINUSB2.0
  • Tableau数据可视化与仪表盘搭建-数据可视化原理
  • 从单点 Redis 到 1 主 2 从 3 哨兵的架构演进之路
  • Spring AMQP ----消息转换器
  • C#编程中dynamic类型
  • BOOST 在计算机视觉方面的应用及具体代码分析(二)
  • 计算机网络--根据IP地址和路由表计算下一跳
  • 海外招聘丨 弗拉瑞克商学院—博士研究员:智能家居技术业务和能源管理中的数据分析和人工智能
  • 大疆无人机炸机,视频文件打不开怎么办
  • 数据项目相关的AWS云计算架构设计
  • 基于springboot+vue的餐饮连锁店管理系统的设计与实现