参考链接:https://github.com/datawhalechina/fun-rec
一、Mysql 基础
1.1 SQL书写规范
- 1.以分号“;”结尾;
- 2.不区分关键字大小写(表名和列名也一样);
- 3.表中的数据区分大小写;
- 4.常数的书写方式固定,日期字符串用引号括起来,数字直接书写。
1.2 数据类型
1.2.1 数值型
数值型包含整型和浮点型:
- 整型数据:TINYINT、INTEGER、SMALLINT、MEDIUMINT、DECIMAL 、NUMERIC 和BIGINT。
- 浮点型数据:DECIMAL、FLOAT、REAL 和 DOUBLE PRECISION。
1.2.2 时间型
- 表示时间值的有日期和时间,具体类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR。
1.2.3 字符串型
- 常见的字符串类型是指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。
1.3 数据库的基本操作
创建:create
选择:use,alter
插入:insert into
增加:add
删除:drop,delete
更新:update,modify,change
1.4 常用函数
where:对表进行条件过滤,然后再进行分组处理。
Group by:根据指定的列名,对表进行分组。
Having:为聚合结果指定条件。
Order by:对表的查询结果根据某指定的字段进行排序。
二、Mongodb 基础
2.1 MongoDB简介
MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。在高负载的情况下,添加更多的节点,可以保证服务器性能。MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB 将数据存储为一个文档,数据结构由键值对(key=>value)组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。
2.2 MongoDB主要特点
- 1.MongoDB 是一个面向文档存储的数据库,操作起来比较简单和容易。
- 2.可以在MongoDB记录中设置任何属性的索引 (如:FirstName="Sameer",Address="8 Gandhi Road")来实现更快的排序。
- 3.可以通过本地或者网络创建数据镜像,这使得MongoDB有更强的扩展性。
- 4.如果负载的增加(需要更多的存储空间和更强的处理能力) ,它可以分布在计算机网络中的其他节点上这就是所谓的分片。
- 5.Mongo支持丰富的查询表达式。查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。
- 6.MongoDb 使用update()命令可以实现替换完成的文档(数据)或者一些指定的数据字段 。
- 7.Mongodb中的Map/reduce主要是用来对数据进行批量处理和聚合操作。
- 8.Map和Reduce。Map函数调用emit(key,value)遍历集合中所有的记录,将key与value传给Reduce函数进行处理。
- 9.Map函数和Reduce函数是使用Javascript编写的,并可以通过db.runCommand或mapreduce命令来执行MapReduce操作。
- 10.GridFS是MongoDB中的一个内置功能,可以用于存放大量小文件。
- 11.MongoDB允许在服务端执行脚本,可以用Javascript编写某个函数,直接在服务端执行,也可以把函数的定义存储在服务端,下次直接调用即可。
- 12.MongoDB支持各种编程语言:RUBY,PYTHON,JAVA,C++,PHP,C#等多种语言。
- 13.MongoDB安装简单。
2.3 MongoDB 创建数据库
一个mongodb中可以建立多个数据库。
MongoDB的默认数据库为"db",该数据库存储在data目录中。
MongoDB的单个实例可以容纳多个独立的数据库,每一个都有自己的集合和权限,不同的数据库也放置在不同的文件中。"show dbs" 命令可以显示所有数据的列表。
执行 "db" 命令可以显示当前数据库对象或集合。
运行"use"命令,可以连接到一个指定的数据库。
2.4 MongoDB 创建集合
- 使用 createCollection() 方法来创建集合。db.createCollection(name, options)
- 使用 drop() 方法来删除集合。db.collection.drop()
2.5 MongoDB 文档操作
文档的数据结构和 JSON 基本一样,所有存储在集合中的数据都是 BSON 格式,BSON 是一种类似 JSON 的二进制形式的存储格式,是 Binary JSON 的简称。
- 使用 insert()或save()方法向集合中插入文档。
save()方法:如果 _id 主键存在则更新数据,如果不存在就插入数据。该方法新版本中已废弃,可以使用 db.collection.insertOne() 或 db.collection.replaceOne() 来代替。
insert()方法: 若插入的数据主键已经存在,则会抛 org.springframework.dao.DuplicateKeyException 异常,提示主键重复,不保存当前数据。 - 使用 update() 和 save() 方法来更新集合中的文档。
- 使用 remove() 函数是用来移除集合中的数据。
- 使用 find() 方法查询文档,find() 方法可以传入多个键(key),每个键(key)以逗号隔开,即常规 SQL 的 AND 条件。
- OR 条件语句使用了关键字 $or。
- 使用 sort() 方法对数据进行排序,sort() 方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而 -1 是用于降序排列。
- 使用 update_one() 方法修改文档中的记录。
- 使用 delete_one() 方法来删除一个文档。
- delete_many() 方法如果传入的是一个空的查询对象,则会删除集合中的所有文档。
三、Redis 基础
3.1 Redis简介
Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSIC语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库。内存数据库,读写非常高速,可达10w/s的评率,一般应用于数据变化快、实时通讯、缓存等。但内存数据库通常要考虑机器的内存大小。Redis 是完全开源免费的,遵守 BSD 协议,是一个灵活的高性能 key-value 数据结构存储,可以用来作为数据库、缓存和消息队列。
相比于其他的 key-value 缓存产品有以下三个特点:
- Redis 支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载到内存使用。
- Redis 不仅支持简单的 key-value 类型的数据,同时还提供 list,set,zset,hash 等数据结构的存储。
- Redis 支持主从复制,即 master-slave 模式的数据备份。
3.2 Redis 基本操作命令
- 使用/etc/redis/redis.conf下面的配置文件来启动Redis。
- 通过redis-cli,可以连上服务器端的redis服务。
- 通过 redis-cli 停止Redis,或通过杀掉redis服务进程。
- 通过select命令进行切换。
- 使用FLUSHDB删除当前选择的数据库中的所有数据,使用FLUSHALL删除所有数据库里面的数据。
- 使用DBSIZE查看当前选择的库中key的数量。
3.3 Key的操作命令
- 设置过期时间。
expire 命令设置 key 的过期时间,时间过期后,key 会被自动删除,设置成功返回1,key不存在返回0。
ttl 命令以秒为单位返回key的剩余过期时间,如果key不存在返回 -2 key 存在但没有关联超时时间则返回 -1 。 - type命令以字符串的形式返回存储在 key 中的值的类型,可返回的类型有:string, list, set, zset,hash 和 stream,如果key值不存在返回none。
- del命令删除指定的key,不存在的key忽略,返回0,如果key存在,返回删除的key的个数。
- set命令将key指定为指定的字符串,如果key存在,则会覆盖原来的值。
- get命令返回与键 key 相关联的字符串值。
- append命令将指定的key追加值。如果key存在,并且是字符串,则会将value追加到key原值的末尾,如果key值是非字符串则会报错,当key不存在时候,改命令类似于set,简单将key设定为value。
- incr 命令将 key 中储存的数字值增一。如果key不存在,key值会被初始化为0,在进行incr操作。如果字符串类型的值不能表示为数字,则会报错。
- decr命令将 key 中储存的数字值减一,和incr命令相似。
- Strlen 命令将获取指定 key 所储存的字符串值的长度,如果key存储的不是字符串类型或不存在时,返回错误。
- Setrange命令是将从偏移量 offset 开始, 用 value 参数覆盖键 key 储存的字符串值。
- Getrange命令返回存储在 key 中的字符串的子串,由 start 和 end 偏移决定(都包括在内)。负数偏移提供相对字符串结尾的偏移。并且该命令会通过将结果范围限制为字符串的实际长度来处理超出范围的请求。
- MSET命令设置多个 key 的值为各自对应的 value。如果key存在,则会用新值替换旧值,如果key不存在,会重新创建,该命令总是返回“OK”,因为 MSET不会失败。
- MGET命令返回所有(一个或多个)给定 key 的值,值的类型是字符串。 如果给定的 key 里面有某个 key 不存在或者值不是字符串,那么这个 key 返回特殊值 nil 。
四、总结
通过学习mysql,mongodb,redis这三个数据库可知,每个数据库有各自的优势。Mysql是一个非关系型数据库,拥有较为成熟的体系;MongoDB 并不是单纯的内存数据库,它由 C++ 语言编写,是一个基于分布式文件存储的开源数据库系统;Redis是一个内存数据库,所有数据都是放在内存中的,持久化是使用 RDB 方式或者 aof 方式。