1.0 NoSQL 简介
- nosql是not only SQL的缩写
- memcache Redis MongoDB被称为nosql三剑客
- 所以NoSQL数据库的最大优势体现为:高性能、高可用性和可伸缩性。
- LRU:最近最少使用 (缓存数据的算法)
2.0 Redis简介
2.1 概念
- 支持 strings, hashes ,lists ,sets ,sorted sets
2.2 官方地址
-
官网地址 https://redis.io/
-
下载地址 https://redis.io/download
-
命令参考地址 http://redisdoc.com
2.3 应用场景
- 缓存
- 数据临时存储位置
- 分布式环境下解决Session不一致问题时的Session库
- 流式数据去重(数据放在set里面来达到去重)
3.0 Redis安装
-
上传并解压
-
安装C语言编译环境
-
修改安装环境
-
编译安装
-
启动Redis服务器
4.0 Redis五种常用数据结构(重点)
4.1 总体结构
4.2 String类型
- key对应的一个单一值
4.3 List类型
- 底层是基于链表实现
- peek获取单不删除数据 pop获取删除数据
- 可以用作栈或者队列
4.4 Set类型
- Redis的Set是String类型的无序集合。它是基于哈希表实现的。
4.5 Hash类型
- 本身就是一个键值对集合。可以当做Java中的Map<String,String>对待
4.6 ZSet类型
- 成员不允许重复,分数可以重复
5.0 Redis命令行操作(重点)
5.1 基本操作
5.2 Key操作
- 查询 keys *
- 判断存在 exists key
- TTL 查看还可以存活多久
- expire key seconds设置过期时间
- persist key移除过期时间
5.3 String类型操作(常用的)
-
setbit 修改二进制 (从左往右 第一位是0)
setbit 6 1 setbit 7 0
-
ex 参数用于设置存活的秒数
-
px 参数用于设置存活的毫秒数
-
nx 参数用于新增(若已经存在,则新增失败)
-
xx 参数用于更新(若不存在,则更新失败)
-
m 参数用于对多个值进行操作
-
MSET,MGET,MSETNX
5.4 List类型操作
- 只能从左到右读,有两套角标可以混着用,但是start 要在end前面 (0 ~ -1是遍历)
5.5 Set类型操作(常用的)
- 不允许空集合存在
- smembers key 查看所有数据
- sismember key member 是否存在这个元素
5.6 Hash类型操作(常用的)
略
5.7 ZSet类型操作
总结:重点是String set hash三部分
如何使用Redis选择的问题:
- 使用Redis存储什么?
- 类型选择问题? 数据量小的时候用hash(rediskey(k-v)) 数据量大的时候使用string(k-v):避免数据热点的问题(做负载均衡)
- RedisKey设计(求日活 新增什么的有影响)
string类型的就是简单的k-v
set就是k和v的集合
6.0 Redis持久化机制(面试题)
6.1 RDB
6.1.1 机制描述
- 每隔一定的时间把内存中的数据作为一个快照保存到硬盘上的文件中。Redis默认开启RDB机制。
6.1.2 触发时机
- 配置上写着
6.1.3 相关配置
略
6.1.4 思考
RDB机制能够保证数据的绝对安全吗?
- 不能保证绝对安全
6.2 AOF
6.2.1 机制描述
- 保存生成数据的命令
6.2.2 AOF基本配置
- aof和rdb共存的时候 优先选择aof
6.2.3 AOF重写
- 把几步命令合成一步
6.3 持久化文件损坏修复
-
第一步:备份要修复的appendonly.aof文件
-
第二步:执行修复程序
bin/redis-check-aof --fix ./appendonly.aof
-
第三步:重启Redis
注意:所谓修复持久化文件仅仅是把损坏的部分去掉,而没法把受损的数据找回。
6.4 扩展阅读
6.4.1 RDB
- 适合大规模数据恢复(用的是快照)
- 会丢失最后一次快照之后的修改
6.4.2 AOF
- appendsync always可以保持数据的完整性
- 文件体积比RDB大很多
6.4.3 RDB和AOF并存
- Redis重启的时候会优先载入AOF文件来恢复原始的数据
- 但是并不要关闭RDB
6.4.4 使用建议
- 如果Redis仅仅作为缓存可以不使用任何持久化方式
7.0 Redis事务控制(面试题)
7.1 Redis事务控制相关命令
略
7.2 命令队列执行失败的两种情况
略
7.3 Watch
- 采用的是乐观锁
7.4悲观锁和乐观锁
- 悲观锁:只能是一个人访问,锁定
- 乐观锁:可以多人访问,当发生碰撞,那么放弃自己的操作
8.0 Redis主从复制机制(面试题)
- 写在master 读在slave
8.1 读写分离的好处
- 性能优化
- 避免单点故障
8.2 搭建步骤
略
8.3 主从关系
- slave挂了之后,重启之后就会成为master
- master挂了之后,slave依旧是slave,但是集群没有master,只能等master重新启动
8.4 初步测试
略
8.5 哨兵模式
8.5.1 作用
8.5.2 相关概念
- 主观下线
- 客观下线
8.5.3 配置方式
- 简单起见我们只配置一台哨兵。
8.5.4 启动哨兵
-
这个 1 是客观下线
-
slave挂了之后,重启也会成为slave ;master挂了之后,重新选举master,把其他机器作为新master的slave
9.0 发布订阅(了解)
9.1 订阅一个频道
- SUBSCRIBE cctv
9.2 在一个频道上发布消息
- PUBLISH cctv hai