Redis学习笔记
本文基于B站UP主【遇见狂神说】视频教程 【Redis最新超详细版教程通俗易懂】进行整理/记录,仅用于个人学习交流使用
Redis官方中文文档:http://www.redis.cn/
目录标题
- Redis学习笔记
- 一、NoSQL
- 1.什么是NoSQL?
- 2.NoSQL特点:
- 3.传统的 RDBMS
- 4.3V和3高
- 5.NoSQL四大分类
- 二、Redis入门
- 1.概述
- 2.Windows下安装
- 3.Linux下安装
- 4.性能测试
- 5.基础知识
- 6.Redis是单线程的
一、NoSQL
1.什么是NoSQL?
not only sql (不仅仅是sql)
泛指非关系型数据库,随着web2.0互联网的诞生;传统的关系型数据库很难对付web2.0时代!尤其是超大规模的高并发社区,暴露出很多难以克服的问题。
2.NoSQL特点:
- 方便扩展(数据之间没有关系,很好扩展)
- 大数据量高性能(redis一秒可以写8W次,读11万次,NoSQL的缓存记录级,是一种细粒度的缓存,性能会比较高!)
- 数据类型多样的!(不需要事先设计数据库,随取随用)
- 传统的 RDBMS 和 NoSQL
3.传统的 RDBMS
RDBMS(关系型数据库)
结构化组织 SQL 数据和关系都存在单独的表中 row col 操作,数据定义语言 严格的一致性 基础的事务 …
Nosql
不仅仅是数据 没有固定的查询语言 键值对存储,列存储,文档存储,图形数据库(社交关系) 最终一致性 CAP定理和BASE 高性能,高可用,高扩展 …
4.3V和3高
大数据时代的3V :主要是描述问题的
海量Velume
多样Variety
实时Velocity
大数据时代的3高 : 主要是对程序的要求
高并发
高可扩
高性能
5.NoSQL四大分类
KV键值对:
新浪: Redis
美团:Redis + Tair
阿里、百度:Redis + memecache
文档型数据库(bson格式 和json一样):
MongoDB (一般必须要掌握)
MongoDB 是一个基于分布式文件存储的数据库,C++ 编写,主要用来处理大量的文档!
MongoDB 是一个介于关系型数据库和非关系型数据中中间的产品!MongoDB 是非关系型数
据库中功能最丰富,最像关系型数据库的!
ConthDB
列存储数据库
HBase
分布式文件系统
图关系数据库
# 他不是存图形,放的是关系,比如:朋友圈社交网络,广告推荐!
Neo4j ,InfoGrid;
二、Redis入门
1.概述
Redis是什么?
Redis(Remote Dictionary Server ),即远程字典服务。
是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
Redis能干什么?
1.内存存储、持久化,内存是断电即失的,所以需要持久化(RDB、AOF)
2.高效率、用于高速缓冲
3.发布订阅系统
4.地图信息分析
5.计时器、计数器(eg:浏览量)
…
特性:
1.多样的数据类型
2…持久化
3.集群
4.事务
…
2.Windows下安装
下载:https://github.com/microsoftarchive/redis/releases/tag/win-3.2.100
解压:
运行:开启服务,redis-server.exe
使用客户端,redis-cli.exe
基础命令:
Redis不推荐使用 windows下使用,更推荐在 linux下
3.Linux下安装
安装过程有点麻烦,建议查询专业的文档
在此不再赘述
4.性能测试
性能测试
redis-benchmark:Redis官方提供的性能测试工具,参数选项如下:
# 测试:100个并发连接 100000请求
redis-benchmark -h localhost -p 6379 -c 100 -n 100000
5.基础知识
redis默认有16个数据库
默认使用的第0个;
16个数据库为:DB 0~DB 15 默认使用DB 0 ,
可以使用 select n 切换到DB n,
DBSIZE 可以查看当前数据库的大小,与key数量相关。
清除当前数据库:flushdb
清除所有数据库:flushall
查询所有的key:keys *
6.Redis是单线程的
Redis是基于内存操作的。
所以Redis的性能瓶颈不是CPU,而是机器内存和网络带宽。
那么为什么Redis的速度如此快呢,性能这么高呢?QPS达到10W+ (每秒请求数)
Redis为什么单线程还这么快?
- 误区1:高性能的服务器一定是多线程的?
- 误区2:多线程(CPU上下文会切换!)一定比单线程效率高!
核心:Redis是将所有的数据放在内存中的,所以说使用单线程去操作效率就是最高的,多线程(CPU上下文会切换:耗时的操作!),对于内存系统来说,如果没有上下文切换效率就是最高的,多次读写都是在一个CPU上的,在内存存储数据情况下,单线程就是最佳的方案。
Redis的单线程具体指的是什么?
Redis 确实是单线程模型,指的是执行 Redis 命令的核心模块是单线程的,而不是整个 Redis 实例就一个线程,Redis 其他模块还有各自模块的线程的。
Redis基于Reactor模式开发了网络事件处理器,这个处理器被称为文件事件处理器。它的组成结构为4部分:多个套接字、IO多路复用程序、文件事件分派器、事件处理器。
因为文件事件分派器队列的消费是单线程的,所以Redis才叫单线程模型。
Redis 不仅仅是单线程
一般来说 Redis 的瓶颈并不在 CPU,而在内存和网络。如果要使用 CPU 多核,可以搭建多个 Redis 实例来解决。
其实,Redis 4.0 开始就有多线程的概念了,比如 Redis 通过多线程方式在后台删除对象、以及通过 Redis 模块实现的阻塞命令等。
redis6.0这个 Theaded IO 指的是在网络 IO 处理方面上了多线程,如网络数据的读写和协议解析等,需要注意的是,执行命令的核心模块还是单线程的。