Redis前文
1.NoSql概述
1.DAL数据库访问层
网站的瓶颈:
1.数据量如果太大,一个机器放不下
2.数据索引,
3,访问量(读写混合),一个服务器承受不了
2.Memcached(缓存) + MySQL+垂直拆分(读写分离)
网站80%都在读,每次都要查询数据库,十分麻烦,所以可以提供缓存来提高访问效率。
发展过程:优化数据结构和索引==》》文件缓存(I/O)==》》Memcache(缓存)
3.分库分表+水平拆分+MySql集群
本质:数据库(读写)
MySAM: 表锁
iNNODB: 行锁
分库分表解决写的压力
4.时代的发展
MySQL如果存储较大的文件,博客,图片,数据库表会很大,效率就很低
用户的表如果更大,是很困难的,比如增加一列,就要增加n行
5.为什么要用NoSQL?什么是NoSQL?
用户个人信息,社交网络,地理位置。用户自己产生的数据、用户日志等等爆发式的增长
这时候可以使用NoSQL来解决这些情况。
NoSQL == Not Only SQL
关系型数据: 表格,行,列
非关系型数据:
很多的数据类型,用户个人类型,社交网络,地理位置。这些数据类型的存储不需要一个固定的格式!
6.NoSQL特点
1.方便扩展(数据之间没有关系,很好扩展)
2.大数据量高新能(Redis 一秒写8万次,读取11万次,NoSQL的缓存记录级,是一种细粒度的缓存,性能比较高)
3.数据类型式多样性的(不需要事先设计数据库!随取随用,如果数据量十分大,就无法设计了)
4.传统RDBMS和NoSQL
传统RDBMS:
--结构化组织
--SQL
--数据和关系都存在单独的表中
--操作,数据定义语言
--严格的一致性
--基础的事务
和NoSQL
NoSQL
--不仅仅是数据
--没有固定的查询语言
--键值对存储,列存储,文档存储,图形数据库(社交关系)
--最终一致性
--CAP定理和BASE(异地多活!)
--高性能,高可用,高可扩
大数据:
海量数据
多样化数据
实时性数据
高并发
高可扩
高性能
2.阿里巴巴演进分析
敏捷开发、极限编程
底层架构
数据存储
1.商品的基本信息
名称、价格、商家信息
关系型数据库就可以解决 MySQL
2.商品的描述、评论(文字比较多)
文档型数据库中,MongoDB
3.图片
--分布式文件系统 FastDfs
--淘宝 TFS
--Gooale的 GFS
--Hadoop HDFS
--阿里云 oss
4.商品的关键字
--搜索引擎 solr elasticsearch
--ISerach: 多隆
5.商品热门的破短信息
--内存数据库
--Redis Tair、Menache..
6.商品的交易,外部的支付接口
--三方应用
中间层可以去差异化
大型互联网应用问题
–数据类型太多
–数据源繁多,经常重构
–数据要改造,大面积改造
缓存设计
3.NoSQL的四大分类
1.KV键值对
- 新浪:Redis
- 美团:Redis + Tair
- 阿里、百度:Redis + memecache
2.文档型数据库(bson格式和json一样)
-
MongoDB
- MongoDB是一个基于分布式存储的数据库,C++编写,主要用于处理大量的文档
- MongoDB是一个介于关系型数据库和非关系型数据库中的产品! MongoDB是非关系型数据库中功能最丰富,最像关系型数据库的。
-
ConthDB
3.列存储数据库
- HBase
- 分布式文件系统
4.图关系型数据库
- 不是存储图片的,放的是关系:比如朋友圈社交网络,广告推荐
- Neo4j,InfoGrid
4.Redis入门
1.redis是什么?
(Remote Dictionary Server)远程字典服务
Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API
-
redis可以干什么?
1.内存存储,持久化,内存是断电即失、所以说持久化很重要,(rdb、aof)
2.效率高,可以用于高速缓存
3.发布订阅系统
4.地图信息分析
5.定时器、计数器(浏览器)
特性
1.多样化的数据类型
2.持久化
3.集群
4.事务
。。。。
学习中要用到的
redis-benchmark性能测试
测试
测试100个连接, 100000个请求
redis-benchmark -h localhost -p 6379 -c 100 -n 10000
2.基础知识
默认有16个数据库
select 数字 #可以切换数据库
DBSIZE #查看数据库大小
keys * #查看数据库所有的key
flushdb #清空当前数据库数据
flushall #清空所有数据库数据
默认有16个数据库
为什么redis端口号是6379?
是因为一个舞女名字缩写
redis是单线程的
官方表示,redis是基于内存操作的,cpu不是redis性能的瓶颈,redis的瓶颈是根据机器的内存和网络带宽,既然可以使用单线程来实现,就使用了单线程。
redis是单线程为什么这么块?
redis是10万+的qps
1.误区:高性能的服务器一定是多线程的
2.误区:多线程(cpu上线文切换)一定比单线程快
对cpu>内存>硬盘的速度有一定的了解
核心:redis是将所有的数据都放在内存中,所以说使用单线程的操作效率是最快的。对于内存系统来说,如果没有上下文切换,效率就是最高的,这就是最佳的方案。
比如:单个cpu对单块内存进行读写,如果进行上下文切换,效率会降低
3.redis的基础命令:
作用:数据库、缓存、消息中间件
基础命令:
启动:在bin目录下:redis-server myconfig/redis.conf
关闭:shutdown exit
设置: set name zzzzz
查询key: keys *
查询某个key是否存在: exists key
删除某个key: move key
设置某个key的过期时间: expire key 10 ##设置10s过期
查看某个key的剩余时间: ttl key
查看某个key的类型: type key