一、NoSQL入门和概述
- 互联网时代背景下大机遇,为什么使用nosql
- 随着访问量的上升,dao层对数据库的访问次数越来越多,因此数据库在性能方面出现了问题,程序员开始使用缓存技术缓解数据库的压力。
- 大数据:一般的数据库无法进行分析处理了,2006年提出的。
- MySQL存储引擎
- MyISAM: 表锁,十分影响效率,高并发下就会出现严重的锁问题
- Innodb:行锁,效率高【常用】
- 为什么要用NoSQL
- 用户个人信息,社交网络,地理位置,用户自己产生的数据,用户日志等等爆发式增长!
- 这时候我们就需要使用NoSQL数据库,NoSQL可以很好的处理以上的情况。
- 什么是NoSQL?
- NoSQL = Not Only SQL (不仅仅是SQL)
- 关系型数据库:以行和列记录的,一行是一条记录
- 泛指非关系型数据库
- redis是当下最流行的非关系型数据库,必须掌握
- NoSQL特点:
- 方便拓展,数据之间没有关系,就是一个键值对,key=value
- 大数据量高性能(Redis 一秒写8万次,读11万次,NoSQL的缓存记录级的,是一种细粒度的缓存,性能高)
- 数据类型多样性 (不需要事先设计数据库,随取随用)
- 传统的关系型数据库(RDBMS)和NoSql区别
- 传统的RDBMS
- 结构化组织
- SQL
- 数据和关系都存在单独的表中
- 数据操作,数据定义语言
- 严格的一致性
- 基础的事务
- …….
- NoSQL
- 不仅仅是数据 No only SQL
- 没有固定的查询语言
- 键值对存储,列存储,文档存储,图形数据库(社交关系)
- 最终一致性
- CAP定理和BASE
- 高性能,高可扩展性
- 传统的RDBMS
- NoSQL的四大分类
- KV键值对: key = value
- 新浪:Redis
- 美团:Redis + Tair
- 阿里、百度: Redis + memcache
- 文档型数据库(bson格式和json一样)
- MongoDB (一般必须要掌握)
- MongoDB 一个基于分布式文件存储的数据库,用来处理大量的文档
- MongoDB是一个介于关系型数据库和非关系型数据库中间的产品(NoSQL数据库中功能最丰富,最像关系型数据库的)
- ConthDB
- MongoDB (一般必须要掌握)
- 列存储数据库
- Hbase
- 分布式文件系统
- 图关系数据库
- 存储关系的数据库【不是存图形的。例如:朋友圈社交网络】
- Neo4j 、InfoGrid | 分类 | Examples举例 | 典型应用场景 | 数据模型 | 优点 | 缺点 | | —- | —- | —- | —- | —- | —- | | 键值(key-value)[3] | Tokyo Cabinet/Tyrant, Redis, Voldemort, Oracle BDB | 内容缓存,主要用于处理大量数据的高访问负载,也用于一些日志系统等等。[3] | Key 指向 Value 的键值对,通常用hash table来实现[3] | 查找速度快 | 数据无结构化,通常只被当作字符串或者二进制数据[3] | | 列存储数据库[3] | Cassandra, HBase, Riak | 分布式的文件系统 | 以列簇式存储,将同一列数据存在一起 | 查找速度快,可扩展性强,更容易进行分布式扩展 | 功能相对局限 | | 文档型数据库[3] | CouchDB, MongoDb | Web应用(与Key-Value类似,Value是结构化的,不同的是数据库能够了解Value的内容) | Key-Value对应的键值对,Value为结构化数据 | 数据结构要求不严格,表结构可变,不需要像关系型数据库一样需要预先定义表结构 | 查询性能不高,而且缺乏统一的查询语法。 | | 图形(Graph)数据库[3] | Neo4J, InfoGrid, Infinite Graph | 社交网络,推荐系统等。专注于构建关系图谱 | 图结构 | 利用图结构相关算法。比如最短路径寻址,N度关系查找等 | 很多时候需要对整个图做计算才能得出需要的信息,而且这种结构不太好做分布式的集群方案。[3] |
- KV键值对: key = value
二、Redis入门及安装Redis是什么?
1、Redis是什么
- Remote Dictionary Server 远程字典服务
- 是一个开源的,使用C语言编写的,可基于内存亦可持久化的日志型,key-value数据库,并且提供了多种语言API
- 是当下最热门的NoSQL技术之一,也被人们称之为结构化数据库
2、Redis能干啥?
- 内存存储,持久化,内存中是断电即失,所以说持久化很重要(RDB, AOF)
- 效率高,可以用来告诉缓存
- 发布订阅系统
- 地图信息分析
- 计时器,计数器(微信,微博浏览量…)
- ……
3、Redis特性:
- 多样的数据类型
- 持久化
- 集群
事务
Redis特征:数据之间没有必然的关联关系
- 内部采用单线程机制进行工作
- 高性能。官方提供测试数据 50个并发执行十万个请求,读的速度是11万,写的速度是8万。
- 多数据类型支持
- 持久化,可以进行数据灾难恢复【内存断电即失】
4、学习Redis需要的东西:
官网: https://redis.io/
中文网: https://www.redis.net.cn/
github: https://github.com/redis/redis
Redis推荐在linux服务器上搭建,基于linux学习redis
5、windows安装redis:
https://www.cnblogs.com/qiantao/p/12701199.html
Redis常用的指令
卸载服务:redis-server —service-uninstall
开启服务:redis-server —service-start
停止服务:redis-server —service-stop
redis端口号:6379
打开redis-cli.exe 输入 ping 回车 出现pong 就说明连接成功
6、Linux安装Redis
看博客园
如果没有c++的编译环境 需要 yum install gcc-c++
make 【编译】
linux默认安装redis路径:``**/usr/local/bin**
启动服务: 在redis目录下 **redis-server**``**【根据那个配置文件启动**``** kconfig/redis.conf**``**】**
连接服务: **redis-cli -p 6379**
查看redis进程是否开启 :ps -ef | grep redis
关闭服务: 在连接的状态下 shutdwown ``或`` exit
2021/3/24
启动redis指令 service redis start
7、Linux性能测试
redis-benchmark 压力测试工具,安装自带
序号 | 选项 | 描述 | 默认值 |
---|---|---|---|
1 | -h | 指定服务器主机名 | 127.0.0.1 |
2 | -p | 指定服务器端口 | 6379 |
3 | -s | 指定服务器 socket | |
4 | -c | 指定并发连接数 | 50 |
5 | -n | 指定请求数 | 10000 |
6 | -d | 以字节的形式指定 SET/GET 值的数据大小 | 2 |
7 | -k | 1=keep alive 0=reconnect | 1 |
8 | -r | SET/GET/INCR 使用随机 key, SADD 使用随机值 | |
9 | -P | 通过管道传输 |
1 |
10 | -q | 强制退出 redis。仅显示 query/sec 值 | |
11 | —csv | 以 CSV 格式输出 | |
12 | -l | 生成循环,永久执行测试 | |
13 | -t | 仅运行以逗号分隔的测试命令列表。 | |
14 | -I | Idle 模式。仅打开 N 个 idle 连接并等待。 |
测试 10个并发,十万请求数量redis--benchmark -h localhost -p 6379 -c 10 -n 100000
三、Redis基础
Redis默认有16个数据库【在redis.conf文件中】,默认使用的是第0个数据库
可以使用select 进行切换数据库
切换到第4个数据库
select 3
操作 | 备注 |
---|---|
select index | 切换数据库 从0开始 |
dbsize | 命令,查看当前数据库的大小 |
set key value | 可以存储value给key |
get key | 可以得到value |
keys * | 查看所有的key |
flushdb | 清除当前库 |
flushall | 清除所有库 |
1、Redis是单线程的
- redis不是多线程的
- Redis是很快的,Redis是基于内存操作的,CPU不是Redis性能瓶颈,Redis的性能瓶颈是根据机器的内存和网络带宽,既然可以使用单线程来实现,就用单线程了。
为什么单线程还这么快?
- redis使用C语言写的
- redis是将全部的数据放到内存中,直接堆内存操作,单线程是最快的