概述
图示
Redis对比Map的优势
- redis运行在独立的服务端,能为多个后端提供服务
- redis具有丰富的数据结构
- redis能够进行持久化
配置MongoDB
初始化
- 创建%mongodb_home%\data\db:存放数据库
- 创建%mongodb_home%\data\mongod.log:存放日志
- 配置%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.lognet:
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 数据表名称 相应操作
查询语句的顺序
- from 数据表1 , 数据表2 , ...
- where:分组前筛选(不能使用聚合函数)
- group by 列名1 , 列名2 , ....
- 聚合函数:count、max、min、avg、sum
- having:分组后筛选(能使用聚合函数)
- select distinct? 列名&运算 as 别名1 , 列名&运算 as 别名2 , ...
- order by 列名1 desc/asc , 列名2 desc/asc
- 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
Java | Node | |
导入模块 | 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
mongodb | mongoose | |
导入模块 | 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({ 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点),统一更新缓存
缓存何种数据
- 频繁访问、更新频率低的数据
- 热点数据
- 验证码
- 视频播放、点赞、收藏量,用户点赞、发布视频、关注、粉丝数