Redis入门(一)
MySQL:
早年MyISAM: 表锁,十分影响效率!高并发下就会出现严重的锁问题
转战Innodb:行锁
为什么要用NoSQL?
用户的个人信息,社交网络,地理位置。用户自己产生的数据,用户日志等等爆发式增长!
什么是NoSQL?
nosql == Not Only SQL
泛指非关系型数据库的,随着web2.0互联网的诞生!传统的关系型数据库很难对付web2.0时代!尤其是超大规模的高并发的社区!暴露出来很多难以克服的问题,NoSQL在当今大数据环境下发展的十分迅速,Redis是发展最快的,而且是我们当下必须要掌握的技术!
很多的数据类型用户的个人信息,社交网络,地理位置。这些数据类型的存储不需要一个固定的格式!不需要多月的操作就可以横向扩展的!Map<String,Object>使用键值对来控制!
NoSQL特点
解耦!
1、方便扩展(数据之间没有关系,很好扩展!)
2、大数据量高性能(Redis一秒写8W次,读取11W,NoSQL的缓存记录级,是一种细粒度的缓存,性能会比较高!)
3、数据类型是多样型的!(不需要事先设计数据库!随取随用!如果是数据量十分大的表,很多人就无法设计了!)
4、传统RDBMS和NoSQL
传统的RDBMS
-- 结构化组织
-- SQL
-- 数据和关系都存在但单独的表中
-- 操作,数据定义语言
-- 严格的一致性
-- 基础的事务
-- ......
NoSQL
-- 不仅仅是数据
-- 没有固定的查询语言
-- 键值对存储,列存储,文档存储,图形数据库(社交关系)
-- 最终一致性
-- CAP定理 和 BASE(异地多活)
-- 高性能,高可用,高可扩展
-- ......
了解:3V+3高
大数据时代的3V:主要是描述问题的
1.海量Volume
2.多样Variety
3.实时Velocity
大数据时代的3高:主要是对程序的要求
1.高并发
2.高可扩
3.高性能
真正在公司中的实践:NoSQL+RDBMS结合使用!
商品的描述、评论(文字比较多)
文档型数据库:MongoDB
图片:
分布式文件系统:FastDFS
- 淘宝自己的 TFS
- Google的 GFS
- Hadoop HDFS
- 阿里云的 oss
商品的关键字(搜索)
- 搜索引擎 solr elasticsearch
- ISearch
商品热门的波段信息
- 内存数据库
- Redis Tair、Memache . . .
大型互联网应用问题:
- 数据类型太多了!
- 数据源繁多,经常重构!
- 数据要改造,大面积改造!
解决问题:
解决方案:UDSL(统一数据服务平台)
Nosql的四大分类
KV键值对:
- 新浪:Redis
- 美团:Redis + Tair
- 阿里、百度:Redis + memecache
文档型数据库(bson格式和json一样):
- MongoDB(一般必须要掌握)
- MongoDB是一个基于分布式文件存储的数据库,C++编写,主要用来处理大量的文档!
- MongoDB是一个介于关系型数据库和非关系型数据库中间的产品!MongoDB是非关系型数据库中功能最丰富,最像关系型数据库的!
- ConthDB
列存储数据库:
- HBase
- 分布式文件系统
图关系数据库:
- 不存图形,存的是关系,比如:朋友圈社交网络,广告推荐!
- Neo4j, InfoGrid
Redis入门
概述
Redis是什么?
Redis(Remote Dictionary Server ),即远程字典服务!
是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
免费和开源!是当下最热门的NoSQL技术之一,也被人们称之为结构化数据库!
Redis能干嘛?
1、内存存储、持久化,内存中是断电即失,所以说持久化很重要(RDB、AOF)
2、效率高,可以用于高数缓存
3、发布订阅系统
4、地图信息分析
5、计时器、计数器(浏览量!)
6、......
特性
1、多样的数据类型
2、持久化
3、集群
4、事务
. . . . . .
Linux安装
1、下载安装包并上传Linux服务器
2、解压redis安装包
tar -zxvf redis-6.0.3.tar.gz
3、进入解压后的文件
4、基本的环境安装
yum install gcc-c++
make
make install
5、redis的默认安装路径
/usr/local/bin
6、将redis配置文件,复制到我们当前目录下
7、修改配置
vi redis.conf
8、启动redis服务
通过指定的配置文件启动redis
9、使用redis-cli连接
10、查看redis的进程是否开启
11、如何关闭redis服务
测试性能
redis-benchmark是一个压力测试工具!
官方自带的性能测试工具
序号 |
选项 |
描述 |
默认值 |
1 |
-h |
指定服务器主机名 |
127.0.0.1 |
2 |
-p |
指定服务器端口 |
6379 |
3 |
-s |
指定服务器 socket |
|
4 |
-c |
指定并发连接数 |
50 |
5 |
-n |
指定请求数 |
10000 |
6 |
-d |
以字节的形式指定 SET/GET 值的数据大小 |
3 |
7 |
-k |
1=keep alive 0=reconnect |
1 |
8 |
-r |
SET/GET/INCR 使用随机 key, SADD 使用随机值 |
|
9 |
-P |
通过管道传输 <numreq> 请求 |
1 |
10 |
-q |
强制退出 redis。仅显示 query/sec 值 |
|
11 |
--csv |
以 CSV 格式输出 |
|
12 |
-l |
生成循环,永久执行测试 |
|
13 |
-t |
仅运行以逗号分隔的测试命令列表。 |
|
14 |
-I |
Idle 模式。仅打开 N 个 idle 连接并等待。 |
|
简单测试:
#测试:100个并发连接 100000请求
redis-benchmark -h localhost -p 6379 -c 100 -n 100000
基础知识
redis默认有16个数据库
默认使用的是第0个
可以使用select进行切换
redis-cli -p 6379
select 3
# 查看数据库大小
dbsize
查看数据库所有的key
keys *
清除当前数据库
flushdb
清除全部数据库的内容
flushall
Redis是单线程的!6.0开始支持多线程
Redis是C语言写的,官方提供的数据为100000+的QPS,完全不比同样是使用key-value的Memecache差!
Redis为什么单线程还这么快?
1、误区1:高性能的服务器一定是多线程的?
2、误区2:多线程(CPU上下文会切换!)一定比单线程效率高!
核心:redis是将所有的数据全部放在内存中的,所以使用单线程去操作效率就是最高的,多线程(CPU上下文会切换:耗时的操作!!!),对于内存系统来说,如果没有上下文切换效率就是最高的!多次读写都是在一个CPU上的,在内存情况下,这个就是最佳的方案!