Mysql/MongoDB/Redis

概述

图示

0cfaaf944e2347dda9e8c9592861c12f.jpeg

Redis对比Map的优势

  • redis运行在独立的服务端,能为多个后端提供服务
  • redis具有丰富的数据结构
  • redis能够进行持久化

配置MongoDB

初始化

  1. 创建%mongodb_home%\data\db:存放数据库
  2. 创建%mongodb_home%\data\mongod.log:存放日志
  3. 配置%mongodb_home%\bin\mongod.cfg

//修改dbPath和path

storage:
  dbPath: %mongodb_home%\data\db
  journal:
    enabled: true
systemLog:
  destination: file
  logAppend: true
  path:  %mongodb_home%\data\mongod.log

net:
  port: 27017
  bindIp: 127.0.0.1

手动开启服务

mongod --config %mongodb_home%\bin\mongod.cfg
没有数据库,会自动创建

连接数据库

安装CLI命令mongosh

C:\Users\Administrator>mongosh
>.....

配置系统服务

mongod --install --config %mongodb_home%\bin\mongod.cfg

配置MySQL

初始化数据库

mysqld --initialize --console
.......................
A temporary password is generated for root@localhost: tliNw)Qza1#2

生成数据库文件、临时密码,并打印生成信息

用户名:root
临时密码:tliNw)Qza1#2
%MYSQL_HOME%目录下生成data文件夹

手动开启服务

mysqld --port=3307 --console   

3307端口开启mysql服务,并打印开启信息

连接数据库修改密码 

mysql -u root -P 3307 - p
Enter password:tliNw)Qza1#2

.............
mysql> alter user 'root'@'localhost' identified by '123456';  //首次连接修改密码 

配置mysql系统服务

mysqld                                              配置mysql服务,与sc命令效果相同

--install [服务名称]                             默认是MySQL 

--port=[端口号]                                  默认是3306

--max-connections=[最大连接数]      默认151

--datadir=[数据库文件路径]               默认是%MYSQL_HOME%/data

--defaults-file=[配置文件]                  默认是%MYSQL_HOME%/my.ini

  • mysqld --verbose --help:帮助指令
  • sc query 服务名:查询系统服务
  • sc delete 服务名:删除系统服务

SQL&Mysql

数据库的操作

  • 创建数据库:create database 数据库名称
  • 删除数据库:drop database 数据库名称
  • 切换数据库:use 数据库名称
  • 展示所有数据库:show databases
  • 导入数据库文件:source 数据库文件路径

数据表的操作

  • 创建数据表:create table 数据表名称(配置项)
  • 删除数据表:drop table 数据表名称
  • 修改数据表:alter table 数据表名 相应操作
  • 展示当前数据库所有数据表:show tables

数据的操作

  • 增加数据:insert into 数据表名称 相应操作
  • 删除数据:delete from 数据表名称 相应操作
  • 修改数据:update 数据表名称 相应操作
  • 查询数据:select * from 数据表名称 相应操作

查询语句的顺序

  1. from 数据表1 , 数据表2 , ...
  2. where:分组前筛选(不能使用聚合函数)
  3. group by 列名1 , 列名2 , ....
  4. 聚合函数:count、max、min、avg、sum
  5. having:分组后筛选(能使用聚合函数)
  6. select distinct? 列名&运算 as 别名1 , 列名&运算 as 别名2 , ...
  7. order by 列名1 desc/asc , 列名2 desc/asc 
  8. limit:起始位置? , 返回行数

where条件

范围

>、<、=、!=、>=、<=

between A and B

In(item1,item2,item3)

字符串匹配

like "a%_"

%:任意长度的任意字符

_:任意字符

空值Is NULL、not Is NULL
逻辑运算符()、not、and、or(按照优先级顺序)

exists(子查询):有查询结果,条件为真

Age>any(子查询):Age大于任一查询结果,条件为真

Age>all(子查询):Age大于所有查询结果,条件为真

数据表连接

  • from A , B:合并表(100)=A表(10)*B表(10)
  • from A join B on A.age=B.age:合并表(100)-[A.age!=B.age]
  • from A left join B on A.age=B.age:合并表(100)-[A.age!=B.age] + 未选中的A表数据
  • from A right join B on A.age=B.age:合并表(100)-[A.age!=B.age] + 未选中的B表数据

常用字段单位

  • Int(32位,-21亿~21亿)、BigInt(64位)、Decimal(总位数无限长,小数位数<=总位数)
  • Float(32位,10^-8~340亿)、Double(64位)
  • Varchar(最多80个汉字)、Text(最多5百万汉字)
  • Date(24位,年月日)、DateTime(64位,年月日时分秒)

修饰符

  • Not Null:非空
  • Default:默认值
  • Auto_Increament:自增
  • Unique:唯一
  • Primary Key:主键
  • Foreign Key:外键;外键必须参照对应的主键,取值于对应的主键

映射关系

  • 一对多:需要两张表,多表的外键参照一表的主键
  • 多对多:需要三张表,关系表有两个外键AB,外键A参照A表主键,外键B参照B表主键

Method&Mongodb

数据库的操作

  • 创建数据库:use 数据库名称&&创建集合&&集合中添加数据
  • 删除数据库:use 数据库名称&&db.dropDatabase()
  • 切换数据库:use 数据库名称
  • 展示所有数据库:show databases

集合的操作

  • 创建集合:db.createCollection(name,option)||不存在的集合插入文档
  • 删除集合:db.集合名称.drop()
  • 展示当前数据库所集合:show tables||show collections

文档的操作

  • db.集合名称.insertOne({...})
  • db.集合名称.insertMany([{...},{...},...])
  • db.集合名称.deleteOne()
  • db.集合名称.deleteMany()
  • db.集合名称.updateOne(filter,update,options)
  • db.集合名称.updateMany(...)
  • db.集合名称.find(filter)

SQL&Node&Mysql

JavaNode

导入模块

import com.mysql.cj.jdbc.Driver

import java.sql.Connection;

import java.sql.DriverManager;

const mysql=require('mysql2')

建立连接

var driver=new Driver()

DriverManager.registerDriver(driver)

var conn=DriverManager.getConnection(

    url,root,pwd

)

var stmt=conn.createStatement()

const conn=mysql.createConnection({

    host,root,pwd,database

})

const pool=mysql.createPool({

    host,root,pwd,database

})

操作数据库

var result=stmt.executeUpdate(

    "delete from car where price=15"

)

const res1=await conn/pool.query(

    ‘insert into ??(name,age)’ values(?,?)',

    ["stu","Tom",11]

)

const res2=await conn/pool.execute(

    ‘insert into stu(name,age)’ values(?,?)',

    ["Tom",11]

)

断开连接

stmt.close()

conn.close()

await conn/pool.end()

事务机制JDBC默认提交

Method&Node&Mongodb

mongodbmongoose

导入模块

const {MongoClient} =require('mongodb')

const mongoose = require('mongoose');

建立连接

const client=new MongoClient(

  `mongodb://'${ip}:${port}`

)

await client.connect()

await mongoose.connect(

 `mongodb://${ip}:${port}/${dbName}`

)

操作数据库const result=await client.db('school')
    .collection('student')
    .find({})
    .toArray()

const mySchema = new Schema({
  name: { type: String, default: 'hahaha' },
  age: { type: Number, min: 18, index: true },
  bio: { type: String, match: /[a-z]/ },
  date: { type: Date, default: Date.now },
  buff: Buffer
});

const MyModel = mongoose.model(

        'Ticket', mySchema

)

await MyModel.find({...})

断开连接

await client.close()

mongoose不识别localhsot,但识别127.0.0.1 

Prisma

Cli

prisma init初始化项目,生成prisma/schema.prisma和.env
prisma generate

安装Prisma 客户端的依赖:@prisma/client

检查schema.prisma的数据模型定义

生成 Prisma 客户端代码,用来增删改查数据库

生成 TypeScript 类型定义

生成迁移文件migration.sql

prisma migrate dev --name init

首先运行prisma generate

根据schema.prisma的模型,生成数据库、数据表

prisma db push
prisma db pull根据数据库,生成schema.prisma的模型

CRUD&Mysql

  • const prisma=new PrismaClient()
  • prisma.表名.create(...)
  • prisma.表名.createMany(...)
  • prisma.表名.delete(...)
  • prisma.表名.deleteMany(...)
  • prisma.表名.update(...)
  • prisma.表名.updateMany(...)
  • prisma.表名.upsert
  • prisma.表名.findUnique(...)
  • prisma.表名.findMany(...)
  • prisma.表名.findFirst(...)

配置Redis

安装redis

  • 去官网看
  • sudo apt-get install redis

配置文件

/etc/redis.conf 或 /etc/redis/redis.conf 

#bind 127.0.0.1:注释掉只允许本机访问

daemonize yes:允许后台启动redis服务

requirepass 123456:开启密码验证

redis-server&redis-cli的使用

  • redis-server /etc/redis.conf:依据/etc/redis.conf配置文件,开启redis服务
  • redis-cli -h host -p port -a password ping:查看redis服务状态
  • redis-cli -h host -p port -a password shutdown:关闭redis服务
  • redis-cli -h host -p port -a password:客户端连接redis服务

systemctl的使用

  • systemctl start redis:开启redis服务
  • systemctl stop redis:关闭redis服务
  • systemctl restart redis:重启redis服务
  • systemctl status redis:查看redis服务状态
  • systemctl enable redis:开机自启动redis服务
  • systemctl disable redis:取消开机自启动redis服务

防火墙指令

  • sudo ufw enable:启用防火墙
  • sudo ufw disable:禁用防火墙
  • sudo ufw status:防火墙状态
  • sudo systemctl stop ufw:停止放火墙服务
  • sudo systemctl disable ufw:开机时不启动放火墙服务

Cli&Redis

常用类型

  • String:类似Java字符串&Java数字
  • List:类似Java的List集合
  • Set:类似Java的Set集合
  • Hash:类似Java的Map集合

String类型

  • String起始下标0;下标n:第n+1项;下标-n:倒数第n项
  • set str v1 EX n:设置键值对;并且n秒后过期
  • set str v1 PX n:设置键值对;并且n毫秒后过期
  • get str:获取str键值对
  • del str:删除str键值对
  • incr str:str的数值加1
  • decr str:str的数值减1
  • incrby str num:str的数值加num
  • decrby str num:str的数值减num
  • append str v2:str的值以字符串的形式拼接上v2
  • strlen str:获取k1字符串长度
  • getrange str start end:获取字符串str[start]~str[end]
  • setrange str offset v2:覆盖式赋值str[offset]~str[offset+v2.length-1]
  • mset str1 v1 str2 v2……:批量设置键值对
  • mget str1 str2……:批量获取键值对的值

List类型

  • List起始下标0;下标n:第n+1项;下标-n:倒数第n项
  • linsert mylist before/after pivot newEl:插入新元素
  • lrem mylist 0 oldEl:删除mylist中所有oldEl
  • lrem mylist n oldEl:从左向右删除mylist中n个oldEl
  • lrem mylist -n oldEl:从右向左删除mylist中n个oldEl
  • lset mylist index newEl:修改mylist[index]元素
  • lindex mylist index:获取mylist[index]元素
  • lpos mylist e1 RANK 2:返回mylist列表中,匹配到的第2个e1元素位置
  • lpush mylist e1 e2 e3……:mylist左侧插入元素
  • rpush mylist e1 e2 e3……:mylist右侧插入元素
  • lpop mylist:mylist左侧抛出元素
  • rpop mylist:mylist右侧抛出元素
  • llen mylist:mylist的长度
  • lrange mylist start end:获取mylist[start]~mylist[end]元素
  • ltrim mylist start end:保留mylist[start]~mylist[end]元素,移除其他元素

Set类型

  • sadd mySet v1:mySet添加v1元素
  • srem mySet v1:mySet移除v1元素
  • sismember mySet v1:mySet是否存在v1元素
  • smembers mySet:获取mySet所有元素
  • scard mySet:mySet元素数量

Hash类型

  • hset hashMap f1 v1 f2 v2 ……:hashMap加入多个键值对
  • hdel hashMap f1 f2 ……:删除hashMap多个键值对
  • hget hashMap f:获取hashMap单个键值对的值
  • hmget hashMap f1 f2 ……:获取hashMap多个键值对的值
  • hgetall hashMap:获取hashMap所有键值对的值
  • hexists hashMap f:hashMap存在f键值对?
  • hkeys hashMap:hashMap所有键
  • hvals hashMap:hashMap所有值
  • hstrlen hashMap f:hashMap单个值的字符串长度
  • hincrby hashMap f num:hashMap的单个值加上num
  • hlen hashMap:hashMap的键值对总数

其他指令

flushall:清空redis数据库

Redis&Node

import {createClient} from 'redis'

const client=await createClient({
    password:"123456",
    socket:{
        host:"192.168.100.100",
        port:6379
    }
}).connect()

const k1=await client.get("k1")
console.log(k1)

Redis应用

更新策略

  • 我认为的准则:更新的数据,立刻写入mysql中
  • 实时更新缓存:mysql数据更改,同步更新缓存
  • 实时删除缓存:mysql数据更改,同步删除缓存
  • 延时更新缓存:更新数据积累一定量时,统一更新缓存
  • 定时更新缓存:设置固定时间(每晚12点),统一更新缓存

缓存何种数据

  • 频繁访问、更新频率低的数据
  • 热点数据
  • 验证码
  • 视频播放、点赞、收藏量,用户点赞、发布视频、关注、粉丝数
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

stealPigs-youth

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值