1. redis 的历史;
Redis(Remote Dictionary Server),远程词典服务器,
是 2010 年发布的一个非关系型数据库(no sql),以 键值对的方式存储将数据。
2. 特点
(1) 存储,读写速度极快(a. C语言编写; b. 单线程架构; c. 源码结构简单);
(2)性能稳定;
(3)支持的数据类型多:String,List, Hash, Set, ZSet ;
(4)支持的客户端语言种类较多: java, python, C, C++, PHP
(5)支持 2 种持久化方式: RDB 和 AOF;
2.1 数据类型整理:
2.1.1 String:存储的键值对,键:自定义, 值:一个字符串。适用于大段文字的缓存
2.1.2 List:存储的键值对,键:自定义, 值:一个数组,可以是二维的,严格来说是 ArrayList 集合。
、有下标。
2.1.3 Hash:存储的键值对,键:自定义, 值:一个键值对的 HashMap。
2.1.4 Set:存储的键值对,键:自定义, 值:一个键值对的 HashSet。
2.1.5 ZSet:存储的键值对,键:自定义, 值:有分数进行排序的 HashSet。直接查询出来的集合也是直接排序好了的。
3. 事务
Redis 的命令执行是自带锁的,执行成功,都执行成功, 执行失败,所有命令都执行失败, 保证了数据的 原子性;
4. 连接管道的持久性;
Redis 客户端连接服务器时 TCP 连接,多条命令一次io,减少了网络的开销;
客户端发送请求到服务器,然后持续阻塞监听;
服务器获取到请求,处理返回记过到客户端,客户端一次性读取服务器的多条相应,提高服务器的工作效率。
5. 分布式锁
Redis 支持配置分布式锁,
官方使用的是 RedLock, 加锁时设置一个字符串,和一个随机值。
取消:先进性对比, 然后删除 key 值。
6. 缺点:
常出现的问题; 缓存雪崩,击穿,穿透;
缓存穿透:缓存种没有数据, 数据库也没有数据,但是该数据被大量的请求,导致服务器压力较大;
缓存击穿:缓存种没有数据,数据库有数据。 大量请求数据库。
缓存雪崩:缓存种的数据同时大量失效,前台请求直接走向数据库, 造成数据库压力加大;
7. 存储到硬盘, 持久化;
两种方式: RDB, AOF
RDB: 定时将 redis 种的数据存储备份到 磁盘中。
优点:数据清晰,方便移动;
缺点:任务是定时的,服务器 宕机容易丢失大量数据;
AOF: 将操作日志进行存储。
优点:行为是即时的,可以最大限度的保证数据的完整性;
缺点:存储文件大,速度较慢。
8,应用场景
高频率访问,阶段性访问的数据,不是非常频繁的变更的热点数据信息。
9. 常用接口:
引用该文章,作者书写的比较详细。
https://blog.csdn.net/lydms/article/details/105224210
10. 搭建集群。
Redis 支持搭建 高可用集群,运用 "哨兵机制" 及时发现节点变化和自动转移。具体操作不详述;
哨兵机制:
a. 检查主从服务器是否正常;
b. 发现服务器异常,发送 “消息” 给管理者其他程序;
c. 主服务器宕机: 从其他 从服务器种选择一台充当新的 主服务器; 同时向客户端发送 新主服务器的地址,修改客户端的请求路径;修改其他从服务器存储的主服务器路径。
11. 应用场景
主要针对数据量比较庞大的系统:社交、媒体等、评论点赞、新闻排行榜等。
公共数据的缓存。
a. 缓存;
b. 排行榜系统;
c. 消息队列;
d. 计数器应用;
12. mongoDB 之间的比较。
Redis 和 mongoDB 都是 键值对 存储模式的 非关系型数据库。
区别:
Redis 是严格的键值对存储,用户自主设置键和值,一个对象一个值一条数据。清晰明了。如图:
mongoDB:一个类一个键,这个类中间存储的是数组,存储了多个对象。适用于存储操作日志、商品描述、详情、评论等大段文字等修改极少的数据。
mongoDB 没有事务支持。 mongodb 没有很多的数据类型,只有一个:集合(collection)