带你了解mysql+mongodb+redis

带你了解mysql+mongodb+redis 一.数据库类型关系型数据库SQL核心特征它严格遵循 ACID 原则原子性、一致性、隔离性、持久性所以数据一致性和事务支持极强非常适合银行、ERP等对准确性要求高的系统。SQL差异“细微差异”在实际中主要影响分页LIMIT vs ROWNUM和日期函数开发时需要注意。非关系型数据库NoSQL核心特征它放弃强一致性追求 CAP 理论一致性、可用性、分区容错性中的可用性和分区容错性所以读写性能极高扩展性强。二.Mysql使用mysql官方镜像wget https://dev.mysql.com/get/mysql-apt-config_0.8.40-1_all.debsudo dpkg -i mysql-apt-config_0.8.40-1_all.debsudo apt updateapt install mysql-serverapt install mysql-server直接使用Ubuntu镜像启动服务systemctl/service mysql start登录到数据库mysql -u root -p可以直接使用Ubuntu的root免密登录到mysql远程连接linux/etc/mysql/mysql.conf.d/mysqld.cnfbind_address0.0.0.0systemctl restart mysqlservice mysql restart开放用户的 host“%”阿里云、腾讯云 设置 防火墙模板/安全组1.进入MySQL2.MySQL指令数据库相关查看所有的数据库show databases;创建数据库create database qiku character set utf8;create database qiku;create database if not exists qiku character set utf8;查看当前数据库select database();只有选择数据库以后才能操作表切换数据库use 数据库名;删除数据库drop database 数据库名修改数据库编码alter database 数据库名 character set utf8;查找select * from 表名;查询所有数据大表效率低下慎用创建表id INT AUTO_INCREMENT PRIMARY KEY: 将id设为主键它会自动生成唯一值确保每行数据都可被唯一标识。username VARCHAR(50) NOT NULL: NOT NULL约束确保该字段必须有值。UNIQUE: 确保email字段的值不会重复插入数据插入一条数据插入多条数据查询所有用户的所有信息查询特定字段并按id排序条件查询查询用户名为 ‘alice’ 的记录更新用户 alice 的邮箱删除用户名为 ‘charlie’ 的记录添加一个 age (年龄) 列创建用户create user ‘用户名’‘主机’ identified by ‘123456’;%所有主机均可访问192.168.13.13修改密码alter user ‘用户名’‘主机’ identified by ‘123456’;删除用户drop user ‘用户名’‘主机’分配权限grant 权限1… on qiku.* to ‘用户名’‘host’取消权限revoke 权限1… on qiku.* to ‘用户名’‘host’约束主键约束primary key能够确定唯一的一行必须存在内容不重复组合主键Host与User两个字段共同组成User表的主键非空约束not null不能为空默认值default 100default ‘男’唯一约束Unique不能存在重复项自增长auto_increment维护了最大的增长值每次1检查check(age0)外键foreign key表与表之间存在关联关系外键关联创建表时设置外键create table name(… primary key(id), constraint fk_表_列 foreign key(列) references 表(列) on delete cascade on update cascade )给已有表设置外键alter table name add constraint fk_表_列 foreign key(列) references 表(列) on delete cascade on update cascade )删除外键alter table name drop foreign key 外键名关联关系一对一可以合并为一个表为了减少表数据量进行拆分把外键定义在任意一方案例用户表用户详情表一对多外键定义在多方案例用户表用户收货地址表多对多通过第三张表来存储关联关系第三张表存两个外键案例文章表标签表自关联自己关联自己案例分类表一级分类没有父级分类二.Mongodbmongodb文档型数据库 无固定结构Ubuntu 安装官方导入官方GPG密钥sudo apt-get install gnupg curlcurl -fsSL https://pgp.mongodb.com/server-8.0.asc | \sudo gpg -o /usr/share/keyrings/mongodb-server-8.0.gpg --dearmor添加MongoDB APT源echo deb [ archamd64,arm64 signed-by/usr/share/keyrings/mongodb-server-8.0.gpg ]https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/8.0 multiverse | sudo tee /etc/apt/sources.list.d/mongodb-org-8.0.list **更新并安装** sudo apt-get update sudo apt-get install -y mongodb-org **启动** mongod --config /etc/mongod.conf问题解决操作 指令连接本地默认实例 (27017端口) mongo连接指定主机和端口 mongo --host --port查看所有数据库 show dbs 或 show databases切换或创建数据库 use database_name查看当前数据库 db显示当前数据库的所有集合 show collections 或 show tables查看命令帮助 help 或 db.help() 集合操作操作 指令显式创建集合 db.createCollection(“collection_name”)隐式创建并插入文档 db..insertOne({…})删除集合 db..drop() 文档 CRUD 操作增 (Create)插入单个文档 db..insertOne({name: “Alice”, age: 25})插入多个文档: db..insertMany([{name: “Bob”}, {name: “Charlie”}])查 (Read)查询所有文档: db..find()条件查询: db..find({age: 25})比较运算符查询:大于: db..find({age: {KaTeX parse error: Expected EOF, got } at position 7: gt: 20}̲}) 小于等于: db.c…lte: 30}})逻辑运算符查询 (AND): db..find({KaTeX parse error: Expected }, got EOF at end of input: and: [{age: {gt: 20}}, {age: {KaTeX parse error: Expected EOF, got } at position 7: lt: 30}̲}]}) 其他常用查询: 模…exists: true}})数组长度匹配: db..find({tags: {KaTeX parse error: Expected EOF, got } at position 8: size: 3}̲}) 查询结果处理: 限制返…gt: 20}})改 (Update)更新单个文档: db..updateOne({name: “Alice”}, {KaTeX parse error: Expected EOF, got } at position 15: set: {age: 26}}̲) 更新多个文档: db.…gt: 30}}, {KaTeX parse error: Expected EOF, got } at position 24: …atus: senior}}̲) 数值增减 (inc): db..updateOne({name: “Alice”}, {KaTeX parse error: Expected EOF, got } at position 14: inc: {age: 1}}̲) 删 (Delete) 删…gt: 30}})索引管理操作 指令创建索引 (1升序-1降序) db..createIndex({name: 1})查看集合的所有索引 db..getIndexes()删除指定索引 db..dropIndex(“index_name”)管理与实用命令操作 指令删除当前数据库 db.dropDatabase()查看数据库统计信息 db.stats()查看当前集合的帮助 db..help()四.redis内存数据库键值对数据库安装apt install redis-server启动redis-server /etc/redis/redis.cnf连接redis-cli通用键Key操作操作 指令查看所有键生产慎用 KEYS *查看匹配模式的键 KEYS pattern如 KEYS user:*判断键是否存在 EXISTS删除键 DEL设置键的过期时间秒 EXPIRE查看键的剩余生存时间 TTL -1 永久-2 不存在查看键的数据类型 TYPE重命名键 RENAME old_key new_key随机返回一个键 RANDOMKEY从当前数据库移动键到指定数据库 MOVE db_index字符串String操作操作 指令设置键值 SET获取键值 GET设置键值并指定过期时间秒 SETEX仅当键不存在时设置分布式锁常用 SETNX批量设置 MSET …批量获取 MGET …追加值到字符串末尾 APPEND获取字符串长度 STRLEN数值增减原子操作 INCR 1DECR -1INCRBYDECRBY列表List操作特点有序可重复支持两端操作操作 指令从左侧插入元素 LPUSH从右侧插入元素 RPUSH从左侧弹出元素 LPOP从右侧弹出元素 RPOP获取指定范围的元素 LRANGE0 开始-1 表示最后获取列表长度 LLEN通过索引获取元素 LINDEX移除指定元素 LREM count0 从头删0 从尾删修剪列表保留指定范围 LTRIM集合Set操作特点无序元素唯一操作 指令添加元素 SADD移除元素 SREM获取所有元素 SMEMBERS判断元素是否存在 SISMEMBER获取集合大小 SCARD随机移除并返回一个元素 SPOP随机返回一个元素不移除 SRANDMEMBER求交集 SINTER求并集 SUNION求差集 SDIFF有序集合Sorted Set操作特点有序元素唯一每个元素关联一个分数score操作 指令添加元素 ZADD移除元素 ZREM获取元素分数 ZSCORE获取元素排名升序从0开始 ZRANK获取元素排名降序 ZREVRANK获取指定分数范围的元素 ZRANGE按分数升序获取指定分数范围的元素降序 ZREVRANGE获取指定分数范围的元素 ZRANGEBYSCORE获取集合大小 ZCARD获取指定分数范围内的元素个数 ZCOUNT哈希Hash操作特点类似对象/字典适合存储对象操作 指令设置字段值 HSET获取字段值 HGET批量设置字段 HMSET …批量获取字段 HMGET …获取所有字段和值 HGETALL获取所有字段名 HKEYS获取所有值 HVALS获取字段数量 HLEN判断字段是否存在 HEXISTS删除字段 HDEL数值增减 HINCRBY位图Bitmap操作操作 指令设置或清除指定位 SETBIT 0 或 1获取指定位的值 GETBIT统计被设置为 1 的位数 BITCOUNTHyperLogLog 操作基数统计操作 指令添加元素 PFADD获取基数估计值 PFCOUNT合并多个 HyperLogLog PFMERGEGEO 地理空间操作操作 指令添加地理位置 GEOADD获取位置的经纬度 GEOPOS计算两个位置之间的距离 GEODIST获取指定半径内的位置 GEORADIUS 单位m/km/ft/mi事务操作操作 指令标记事务开始 MULTI执行事务 EXEC取消事务 DISCARD监视键乐观锁 WATCH取消监视 UNWATCH发布/订阅Pub/Sub操作 指令订阅频道 SUBSCRIBE按模式订阅 PSUBSCRIBE发布消息 PUBLISH退订频道 UNSUBSCRIBE查看活跃频道 PUBSUB CHANNELS️数据库管理操作 指令切换数据库0-15默认16个 SELECT db_index清空当前数据库 FLUSHDB清空所有数据库 FLUSHALL查看数据库大小键数量 DBSIZE查看当前数据库的键数量 INFO keyspace保存数据到磁盘阻塞 SAVE后台保存数据到磁盘 BGSAVE从 RDB 文件恢复数据 LASTSAVE查看最后保存时间将当前数据库的键移动到指定数据库 MOVE db_index安全与管理操作 指令设置密码需重启生效 修改配置文件 requirepass运行时设置密码 CONFIG SET requirepass认证密码 AUTH查看当前连接的客户端 CLIENT LIST关闭当前客户端连接 CLIENT KILL ip:port查看 Redis 慢日志 SLOWLOG GET监控 Redis 实时命令 MONITOR生产慎用调试与性能操作 指令返回当前服务器时间 TIME返回 Redis 版本信息 INFO server执行命令并返回耗时微秒 SLOWLOGPing 测试延迟 PING模拟内存碎片整理 MEMORY PURGE查看内存使用情况 INFO memory查看键的内存占用 MEMORY USAGE