1. NOSQL 和 Redis介绍 (了解)
- 泛指非关系型的数据库
- nosq一般可以存储多种数据类型, 除了基本类型(数字、字符串、日期),还可以存储json、html等文件类型
- 数据以键值方式存取, 不能像关系型数据库一样使用外键建立表之间的关系, 不适合用于关系特别复杂的数据查询场景
- 每种nosql数据库都有自己的api和语法, 不支持SQL语法
- “事务”的支持:sql对事务的支持非常完善,而nosql基本不支持事务
- NoSQL中的产品种类相当多, 各有自己擅长的业务场景
- Redis优势
- 性能极高 – 内存型数据库,读写速度极快
- 丰富的数据类型 – 支持存储 Strings, Lists, Hashes, Sets 及 Ordered Sets 等多种数据类型。
- 原子性 – Redis的所有操作都是原子性的,并且支持事务 (不支持回滚)。
- 数据持久化 – 可以将内存数据保存到磁盘中, 并提供多种存储机制。
- 数据备份 – 支持主从模式 (master - slave) 的数据备份。
- 集群 – 支持集群, 并实现了哨兵机制。
- 丰富的特性 – 设置过期时间, 发布/订阅, 通知等机制。
- Redis应用场景
- session存储 (性能更好, 方便设置过期时间)
- 购物车 (以请求令牌token作为key,记录当前用户购物车中的商品及其数量)
- 网页缓存 (将 请求的url/返回的网页内容 作为redis的key/value进行缓存)
- 实时排行 (利用zset的数据权重分析数据排行, 按排名展示数据)
2. 配置
- redis中有两种数据持久化机制
- RDB
- 两种保存方式 1> 主动保存 (save命令) 2> 触发自动持久化策略( save 60 100 )
- AOF
- 采用命令重放机制(默认策略: 每秒将执行过的增/删/改命令保存到一个文件中, 当重新启动redis数据库时, redis系统会读取该文件中的所有命令, 并重新执行一遍)
- 从数据安全性上, aof机制会更加安全, 但是性能消耗也更大
- RDB
3. 客户端&服务端 命令
开启数据库
redis-server # 以默认配置启动
sudo redis-server redis.conf # 以自定义配置启动, 推荐
redis-server --help # 查看帮助⽂档
查看端口号,是否启动redis
lsof -i:6379
# 或者
ps aus | grep redis
客户端
连接数据库
redis-cli # 以默认配置连接
redis-cli -h 127.0.0.1 -p 6379 # 连接指定服务的数据库
redis-cli --help # 查看帮助⽂档
测试连接
ping
- 如果连接成功会返回一个pang
切换数据库
- 数据库没有名称,默认有16个,通过0-15来标识,连接redis默认选择第一个数据库
select 10
数据持久化
bgsave # 异步持久化数据库,后台保存数据,还可以继续进行数据库的操作
清空数据库
flushall # 清空所有数据库
flushdb # 清空当前数据库
关闭数据库
shutdown [NOSAVE] [SAVE] # 关闭数据库, 使用SAVE则会先持久化数据库再退出
- shutdown 关闭数据库
- 如果设置了rdb的自动持久化策略, 则会在关闭数据库前隐式的执行save命令
- 如果不想让rdb文件同步内存中的数据变化, 则使用 shutdown nosave
- 如果没有设置rdb的自动持久化策略, 但是想要保存内存中的数据到rdb文件, 则使用 shutdown save
强制杀死数据库 (不推荐)
# 查看数据库进程pid
lsof -i:6379
或
ps aux | grep redis
# 杀死redis数据库进程
sudo kill -9 pid
Redis高级配置
1. 数据库主从
- 数据库主从(双机热备): 对数据库中的数据进行备份,来达到负载均衡
- 主数据库: 主要负责增删改数据
- 从数据库: 主要负责对主数据库的数据进行实时同步(备份数据), 并完成数据查询工作(减少主数据库压力, 不具备增删改功能)
- 哨兵模式: 开启一个独立的进程, 来监听数据库状态, 如果主数据库下线, 哨兵会在主数据库的从数据库中推选一个从数据库暂时作为主数据库
2. 数据库集群
- 数据库集群: 如果服务器的数据库非常大, 就需要配置数据库集群, 让多台计算机共同来存储数据库数据
- redis数据库集群 会将数据自动进行分区保存(让数据库容量负载均衡)
- redis数据库集群: 至少3个主数据库, 3个从数据库
- 设置5个配置: port 3个cluster配置 开启aof (appendonly)