写点什么

Redis 总结,学 Java 必看书籍

用户头像
极客good
关注
发布于: 刚刚

文章目录


[](


)Redis 简介




Redis 是一个使用 C 语言编写的,开源的(BSD 许可)高性能非关系型(NoSQL)的键值对数据库。


Redis 可以存储键和五种不同类型的值之间的映射。键的类型只能为字符串,值支持五种数据类型:字符串、列表、集合、散列表、有序集合。


与传统数据库不同的是 Redis 的数据是存在内存中的,所以读写速度非常快,因此 redis 被广泛应用于缓存方向,每秒可以处理超过 10 万次读写操作,是已知性能最快的 Key-Value DB。另外,Redis 也经常用来做分布式锁。除此之外,Redis 支持事务 、持久化、LUA 脚本、LRU 驱动事件、多种集群方案。


从 2010 年 3 月 15 日起,Redis 的开发工作由 VMware 主持。从 2013 年 5 月开始,Redis 的开发由 Pivotal 赞助。


[](


)Redis 的优缺点



[](

)优点


  • 读写性能优异, Redis 能读的速度是 110000 次/s,写的速度是 81000 次/s。

  • 支持数据持久化,支持 AOF 和 RDB 两种持久化方式。

  • 支持


【一线大厂Java面试题解析+核心总结学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 免费领取
复制代码


事务,Redis 的所有操作都是原子性的,同时 Redis 还支持对几个操作合并后的原子性执行。


  • 数据结构丰富,除了支持 string 类型的 value 外还支持 hash、set、zset、list 等数据结构。

  • 支持主从复制,主机会自动将数据同步到从机,可以进行读写分离。

[](

)缺点


  • 数据库容量受到物理内存的限制,不能用作海量数据的高性能读写,因此 Redis 适合的场景主要局限在较小数据量的高性能操作和运算上。

  • Redis 不具备自动容错和恢复功能,主机从机的宕机都会导致前端部分读写请求失败,需要等待机器重启或者手动切换前端的 IP 才能恢复。

  • 主机宕机,宕机前有部分数据未能及时同步到从机,切换 IP 后还会引入数据不一致的问题,降低了系统的可用性。

  • Redis 较难支持在线扩容,在集群容量达到上限时在线扩容会变得很复杂。为避免这一问题,运维人员在系统上线时必须确保有足够的空间,这对资源造成了很大的浪费。


[](


)数据类型




Redis 主要有 5 种数据类型,包括 String,List,Set,Zset,Hash,满足大部分的使用要求


具体可以参考[Redis 数据类型](


)


[](


)使用场景




由于 Redis 优异的读写性能,持久化支持等优势,Redis 的使用场景非常多,主要包括计数器,缓存,消息队列,分布式锁等,具体使用场景可以参考[Redis 使用场景](


)


[](


)持久化




Redis 是内存型数据库,为了之后重用数据(比如重启机器、机器故障之后回复数据),或者是为了防止系统故障而将数据备份到一个远程位置,需要将内存中的数据持久化到硬盘上。


Redis 提供了 RDB 和 AOF 两种持久化方式。默认是只开启 RDB,当 Redis 重启时,它会优先使用 AOF 文件来还原数据集。


Redis 持久化详解可以参考[Redis 持久化](


)


[](


)过期键的删除策略




Redis 中有个设置时间过期的功能,即对存储在 redis 数据库中的值可以设置一个过期时间。作为一个缓存数据库,这是非常实用的。如我们一般项目中的 token 或者一些登录信息,尤其是短信验证码都是有时间限制的,按照传统的数据库处理方式,一般都是自己判断过期,这样无疑会严重影响项目性能。


Redis 有三种不同的删除策略:立即删除,惰性删除,定时删除


具体可以参考[Redis 过期键的删除策略](


)


但是仅仅通过设置过期时间还是有问题的。我们想一下:如果定期删除漏掉了很多过期 key,然后你也没及时去查,也就没走惰性删除,此时会怎么样?如果大量过期 key 堆积在内存里,导致 redis 内存块耗尽了。怎么解决这个问题呢? redis 数据淘汰策略。


[](


)数据淘汰策略




可以设置内存最大使用量,当内存使用量超出时,会施行数据淘汰策略。


数据淘汰策略详解可参考[Redis 数据淘汰策略](


)


[](


)Redis 与 Memcached 的区别




两者都是非关系型内存键值数据库,现在公司一般都是用 Redis 来实现缓存,而且 Redis 自身也越来越强大了!Redis 与 Memcached 的区别请参考[Redis 与 Memcached 的区别](


)


[](


)事务




Redis 通过 MULTI、EXEC、WATCH 等命令来实现事务(transaction)功能。事务提供了一种将多个命令请求打包,然后一次性、按顺序地执行多个命令的机制,并且在事务执行期间,服务器不会中断事务而改去执行其他客户端的命令请求,它会将事务中的所有命令都执行完毕,然后才去处理其他客户端的命令请求。


事务中的多个命令被一次性发送给服务器,而不是一条一条发送,这种方式被称为流水线,可以减少客户端与服务器之间的网络通信次数从而提升性能。


在传统的关系式数据库中,常用 ACID 性质来检验事务功能的可靠性和安全性。在 Redis 中,事务总是具有原子性(Atomicity)、一致性(Consistency)和隔离性(Isolation),并且当 Redis 运行在某种特定的持久化模式下时,事务也具有持久性(Durability)。


[](


)事件




Redis 服务器是一个事件驱动程序。

[](

)文件事件


服务器通过套接字与客户端或者其它服务器进行通信,文件事件就是对套接字操作的抽象。


Redis 基于 Reactor 模式开发了自己的网络事件处理器,使用 I/O 多路复用程序来同时监听多个套接字,并将到达的事件传送给文件事件分派器,分派器会根据套接字产生的事件类型调用相应的事件处理器。


[](

)时间事件


服务器有一些操作需要在给定的时间点执行,时间事件是对这类定时操作的抽象。


时间事件又分为:


  • 定时事件:是让一段程序在指定的时间之内执行一次

用户头像

极客good

关注

还未添加个人签名 2021.03.18 加入

还未添加个人简介

评论

发布
暂无评论
Redis总结,学Java必看书籍