1.1、Redis是什么
Redis:官网
高性能带有数据结构的Key-Value内存数据库
Remote Dictionary Server(远程字典服务器 )是完全开源的,使用ANSIC语言编写遵守BSD协议,例如String、Hash、List、Set、SortedSet等等。数据是存在内存中的,同时Redis支持事务、持久化、LUA脚本、发布/订阅、缓存淘汰、流技术等多种功能特性提供了主从模式、Redis Sentinel和Redis Cluster集群架构方案。
Redis是一个开源的(BSD许可)内存数据结构存储,用作数据库、缓存、消息代理和流引擎。Redis提供数据结构,如字符串、散列、列表、集合、带范围查询的排序集合、位图、超日志、地理空间索引和流。Redis具有内置的复制、Lua脚本、LRU逐出、事务和不同级别的磁盘持久性,并通过Redis Sentinel和Redis Cluster的自动分区提供高可用性。
1.2、Redis的主流功能
-
分布式缓存,挡在MySql数据库之前的带刀护卫
-
内存存储和持久化(RDB+AOF)redis支持异步将内存中的数据写到硬盘上,同时不影响继续服务
-
高可用架构搭配
-
缓存穿透、击穿、雪崩
-
分布式锁
-
队列
-
排行榜+点赞
-
...
与传统数据库关系(MySql)
Redis是Key-Value数据库(NoSQL一种),mysql是关系数据库(有一定的约束)
Redis数据操作主要在内存(查的快),而MySql主要存储在磁盘
Redis在某一些场景使用中要明显优于MySql,比如计数器,点赞,排行榜等方便
Redis通常用于一些特定场景,需要与MySql一起配合使用
**两者并不是相互替换和竞争关系,而是通用和配合关系。**redis帮mysql减负
1.3、Redis的优势
性能极高 - Redis能读的速度是110000次/秒,写得速度是81000次/秒 Redis数据类型丰富,不仅仅支持简单的Key-Value类型的数据,同时还提供list、set、zest、hash等数据结构的存储 Redis支持数据的持久化,可以将内存中的数据保持在磁盘中 ,重启的时候可以再次加载进行使用 Redis支持数据的备份,即master-slave(主从)模式的数据备份
1.4、redis7新特性浅谈
官网github.com/redis/redis/releases查看
1.版本号第二位是基数,则为非稳定版,如2.7,2.9
Function
Function是Redis脚本方案的全新实现,在Redis 7.0之前用户只能使用EVAL命令族来执行Lua脚本 ,但是Redis对Lua脚本的持久化和主从复制一直是undefined状态,在各个大版本甚至release版本中也都有不同的表现。因此社区也直接要求用户在使用Lua脚本时必须在本地保存一份(这也是最为安全的方式),以防止实例重启、主从切换时可能造成的Lua脚本丢失,维护Redis中的Lua脚本一直是广大用户的痛点。
Function的出现很好的对Lua脚本进行了补充,它允许用户向Redis加载自定义的函数库,一方面相对于EVALSHA的调用方式用户自定义的函数名可以有更为清晰的语义,另一方面Function加载的函数库明确会进行主从复制和持久化存储,彻底解决了过去Lua脚本在持久化上含糊不清的问题。
那么自7.0开始,Function命令族和EVAL命令族有了各自明确的定义:FUNCTION LOAD会把函数库自动进行主从复制和持久化存储;而SCRIPT LOAD则不会进行持久化和主从复制,脚本仅保存在当前执行节点。并且社区也在计划后续版本中让Function支持更多语言,例如JavaScript、Python等,敬请期待。
总的来说,Function在7.0中被设计为数据的一部分,因此能够被保存在RDB、AOF文件中,也能通过主从复制将Function由主库复制到所有从库,可以有效解决之前Lua脚本丢失的问题,我们也非常建议大家逐步将Redis中的Lua脚本替换为Function。
Multi-part AOF
AOF是Redis数据持久化的核心解决方案,其本质是不断追加数据修改操作的redo log,那么既然是不断追加就需要做回收也即compaction,在Redis中称为AOF rewrite。
然而AOF rewrite期间的增量数据如何处理一直是个问题,在过去rewrite期间的增量数据需要在内存中保留,rewrite结束后再把这部分增量数据写入新的AOF文件中以保证数据完整性。可以看出来AOF rewrite会额外消耗内存和磁盘IO,这也是Redis AOF rewrite的痛点,虽然之前也进行过多次改进但是资源消耗的本质问题一直没有解决。
阿里云的Redis企业版在最初也遇到了这个问题,在内部经过多次迭代开发,实现了Multi-part AOF机制来解决