笔记整理自【尚硅谷】Redis 6 入门到精通 超详细 教程
Redis——NoSQL及Redis概述
技术的分类
- 解决功能性的问题:Java、Jsp、RDBMS、Tomcat、HTML、Linux、JDBC、SVN
- 解决扩展性的问题:Struts、Spring、SpringMVC、Hibernate、Mybatis
- 解决性能的问题:NoSQL、Java线程、Hadoop、Nginx、MQ、ElasticSearch
NoSQL数据库是为了解决性能问题而产生的一种技术,而 Redis 就是典型的 NoSQL 数据库。
1. NoSQL数据库
Ⅰ. NoSQL数据库概述
NoSQL (NoSQL = Not Only SQL),意即 “不仅仅是SQL”,泛指 非关系型的数据库。
NoSQL 不依赖业务逻辑方式存储,而以简单的 key-value 模式存储。因此大大的增加了数据库的扩展能力。
- 不遵循SQL标准
- 不支持ACID
- 远超于SQL的性能
NoSQL适用场景
- 对数据高并发的读写
- 海量数据的读写
- 对数据高可扩展性的
NoSQL不适用场景
- 需要事务支持
- 基于sql的结构化查询存储,处理复杂的关系,需要即席查询
- (用不着sql的和用了sql也不行的情况,请考虑用NoSql)
NoSQL解决问题
-
解决 CPU 及内存压力
-
解决 IO 压力
Ⅱ. 常见的NoSQL数据库对比
Memcache | ||
---|---|---|
✔️ 很早出现的NoSql数据库 ✔️ 数据都在内存中,一般不持久化 ✔️ 支持简单的 key-value 模式,支持类型单一 ✔️ 一般是作为缓存数据库辅助持久化的数据库 |
Redis | ||
---|---|---|
✔️ 几乎覆盖了 Memcached 的绝大部分功能 ✔️ 数据都在内存中,支持持久化,主要用作备份恢复 ✔️ 除了支持简单的 key-value 模式,还支持多种数据结构的存储,比如 list、set、hash、zset 等。 ✔️ 一般是作为缓存数据库辅助持久化的数据库 |
MongoDB | ||
---|---|---|
✔️ 高性能、开源、模式自由 (schema free) 的文档型数据库 ✔️ 数据都在内存中, 如果内存不足,把不常用的数据保存到硬盘 ✔️ 虽然是 key-value 模式,但是对 value (尤其是 json) 提供了丰富的查询功能 ✔️ 支持二进制数据及大型对象 ✔️ 可以根据数据的特点替代RDBMS ,成为独立的数据库。或者配合RDBMS,存储特定的数据。 |
2. Redis概述及安装
Ⅰ. 概述
- Redis 是一个开源的 key-value 存储系统。
- 和 Memcached 类似,它支持存储的 value 类型相对更多,包括 string (字符串)、list (链表)、set (集合)、zset (sorted set – 有序集合)、hash (哈希类型)。
- 这些数据类型都支持 push/pop、add/remove 及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。
- 在此基础上,Redis 支持各种不同方式的排序。
- 与 memcached一样,为了保证效率,数据都是缓存在内存中。
- 区别的是 Redis 会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件。
- 并且在此基础上实现了 master-slave (主从) 同步。
- 单线程 + I/O 多路复用。
配合关系型数据库做高速缓存
-
高频次,热门访问的数据,降低数据库 I/O
-
分布式架构,做 session 共享
多样的数据结构存储持久化数据
Ⅱ. 安装
Redis官方网站 | Redis中文官方网站 |
---|---|
http://redis.io | http://redis.cn/ |
-
6.2.1 for Linux(
redis-6.2.1.tar.gz
)➢ 不用考虑在windows环境下对Redis的支持
-
安装 C 语言的编译环境
yum install centos-release-scl scl-utils-build yum install -y devtoolset-8-toolchain scl enable devtoolset-8 bash
-
测试 gcc 版本
gcc --version
-
下载 redis-6.2.1.tar.gz 放置 /opt 目录
-
解压至当前目录
tar -zxvf redis-6.2.1.tar.gz
-
解压完成后进入目录
cd redis-6.2.1
-
在redis-6.2.1目录下再次执行 make 命令(只是编译好)
make
-
跳过 make test 继续执行:make install
make install
-
默认安装在
/usr/local/bin
redis-benchmark:性能测试工具,可以在自己本子运行,看看自己本子性能如何 redis-check-aof:修复有问题的AOF文件,rdb和aof后面讲 redis-check-dump:修复有问题的dump.rdb文件 redis-sentinel:Redis集群使用 redis-server:Redis服务器启动命令 redis-cli:客户端,操作入口
-
前台启动(不推荐)
前台启动,命令行窗口不能关闭,否则服务器停止。
/usr/local/bin 目录下启动 redis
redis-server
-
后台启动(推荐)
➢ 备份 redis.conf
安装 redis 的目录 /opt/redis-6.2.6 中将 redis.conf 复制到任意一个文件夹下
cp redis.conf /etc/redis.conf // 将redis.conf复制到/etc/下
➢ 修改 /etc/redis.conf 配置文件
修改 redis.conf (我的在128行 ) 文件将里面的 daemonize no 改成 yes,让服务在后台启动。
vim redis.conf
➢ /usr/local/bin 目录下启动 redis
redis-server /etc/redis.conf
-
查询 redis 是否启动
ps -ef | grep redis
-
用客户端访问 redis
redis-cli
-
测试验证
ping
-
关闭 redis
➢ kill 进程
➢ 命令 shutdown
Ⅲ. Redis相关知识介绍
端口 6379 从何而来 Alessia Merz => 九键 | |
---|---|
默认16个数据库,类似数组下标从
0
0
0 开始,初始默认使用
0
0
0 号库 使用命令 select <dbid> 来切换数据库。如: select 8 。统一密码管理,所有库同样密码。 |
Redis 是单线程 + 多路 IO 复用技术
多路复用是指使用一个线程来检查多个文件描述符(Socket)的就绪状态,比如调用select和poll函数,传入多个文件描述符,如果有一个文件描述符就绪,则返回,否则阻塞直到超时。得到就绪状态后进行真正的操作可以在同一个线程里执行,也可以启动线程执行(比如使用线程池)。
串行 vs 多线程 + 锁 (memcached) vs 单线程 + 多路 IO 复用 (Redis)
- 与Memcache三点不同:支持多数据类型,支持持久化,单线程 + 多路IO复用(效率更高)