NoSQL概述
单机Mysql(用户量不大通过DAL查询就能满足需求): 当Mysql单表访问超过三百万后就一定要建立 索引(B+ Tree) , 因为单机Mysql是读写混合访问当建立索引后也不能满足需求时就需要升级数据库了
当单机Mysql不能满足需求时则需要 Memcached(缓存, 当需要多次访问同一数据时,可以将该数据放在缓存中当用户访问时优先访问缓存, 可以减少数据库的压力,前提是数据未改变) + 垂直拆分(把一张表的列拆分成多个表) + 读写分离,如三台数据库 数据相同 其中一台只用作写入,其他两台只做同步数据并提供访问
如果以上都不能满足访问量的需求,则需要继续升级: 水平拆分(当表的数据超过两百万行时就会变慢, 需要把表行拆分成多个表) + Mysql集群(以上述的读写分离的三台数据库为一个节点,有多个节点时称为集群) + 分库分表(把一个数据库及其表分成多份分别存储在集群的各个节点) , 通过集群的机制均衡的分配访问量,数据库稳定 效率也提高了
虽然Mysql一直在升级, 但如今关系型数据库已经无法支撑 大数据(如用户的个人信息, 社交网络, 地理位置, 用户产生的数据, 用户日志等) 时代的数据量了
NoSQL = Not Only SQL(不仅仅是SQL) , 泛指非关系型数据库
NoSQL特点:
1.方便扩展
2.数据量大,性能高(如 Redis一秒写8万次, 读11万次, Mysql的缓存是表级的, 而Nosql是记录级的,该记录可以不停更新是一种细粒度的缓存,性能高)
3.数据类型是多样型的(不需要事先设计数据库, 随取随用)
传统RDBMS和NoSQL的区别
RDBMS: 结构化组织(表,列,行),固定的格式(数据类型局限于表中的列),严格的一致性, 有固定的查询语言
NoSQL: 没有固定的查询语言, 存储方式多样性(键值对存储, 列存储, 文档存储, 图形数据库), 高可扩展(可随时水平拆分,当机器不够时可随时扩展机器)
NoSQL的四大分类: 1.KV键值对 Redis 2.文档型数据库 MongoDB 3.列存储数据库 HBase 4.图关系数据库 Neo4j, infoGrid
Windows安装: https://github.com/dmajkic/redis/downloads 但windows的停更很久了, 官方更推荐Linux下使用Redis
Linux安装: wget http://download.redis.io/releases/redis-stable.tar.gz 虽然取消了版本号以stable为最新版,但官方视乎没有更新stable为最新版本了, 可以通过访问
download.redis.io/releases/ 查看最新版本的redis自行选择版本下载
以源码的方式安装(安装时需要root权限)
tar zxf redis-stable.tar.gz cd redis-stable/ make -j4 make install mkdir -p /etc/redis/ cp redis.conf /etc/redis/
这样Redis就安装在 /usr/local/bin/ 下了
whereis redis-server redis-server: /usr/local/bin/redis-server ls /usr/local/bin/
自此安装成功
redis-server /etc/redis/redis.conf redis-server默认是非daemon(守护进程) 所以会占用终端, 需要修改/etc/redis/redis.conf文件里的 daemonzie yes 这样才能以守护进程启动
redis-cli -p 6379 因为 redis-cli 软链接建立在 /usr/bin/ 下了所以可以直接启动redis-cli, 而不用像server一样要指定配置文件启动 服务端默认监听6379端口
退出redis 在redis-cli连接状态下输入 shutdown 就会把启动的redis-server关闭, 再使用quit退出客户端
Linux安装参考: https://blog.csdn.net/guotianqing/article/details/114103122
redis-benchmark [option] [option value] 自带的性能测试工具: 参考: https://www.runoob.com/redis/redis-benchmarks.html
redis-benchmark -c 100 -n 100000 一百个并发连接, 每个连接10万个请求
Redis默认有16个数据库, 默认使用第0个
select number 切换数据库
DBSIZE 查看当前数据库大小
keys * 查看当前数据库所有key get key 就可以获得value了
flushdb 清除当前数据库数据 flushall清除所有数据库数据
exists key 判断key是否存在
详细命令 https://www.runoob.com/redis/redis-keys.html