redis介绍
介绍
redis是一种基于键值(key-value)存储的缓存数据库,其中value可以为string、hash、list、set、zset等多种数据结构,同时还提供了键过期,发布订阅,事物,流水线等功能,可以满足很多应用场景。
Redis流水线:允许客户端一次将多个命令请求发送给服务器,并将被执行的多个命令请求的结果在一个命令回复中全部返回给客户端,使用这个功能可以有效地减少客户端在执行多个命令时需要与服务器进行通信的次数。
优点
- 速度快,数据放在内存中,官方给出的读写性能10万/s,与机器性能也有关
- c语言实现,与操作系统距离近
- 使用了单线程架构,预防多线程可能产生的竞争问题
- 持久化:发生断电或机器故障时数据可能会丢失,持久化到硬盘
- 原生态的Cluster分布式集群方案,支持分片
- 高可用与主从复制:哨兵机制实现高可用,保证redis节点故障发现和自动转移,实现多个相同数据的redis副本
应用场景
- 数据库缓存:合理使用缓存加快数据访问速度,降低后端数据源压力
- 排行榜:网站和论坛文章列表这些发布时间排行,主要利用到列表和有序集合
- 统计应用:视频网站播放数,文章浏览数
- 消息队列:发布消息和订阅内容
- 社交网络:收藏,赞,踩,粉丝,刷新等
为什么要用缓存数据库
- Oracle/Mysql:磁盘上的数据库,数据写入和读取都比较慢
- Redis:内存中的数据库,数据读写都比较快,但是数据容易丢失,不过也可以做持久化
- 数据存储,数据仓库选择Oracle/Mysql这种磁盘的数据库,而高并发,业务大的应用选择Redis这种内存数据库
- 大多数互联网架构中:Mysql+Redis搭配使用
Redis版本号采用标准惯例
主版本号.副版本号.补丁级别,一个副版本号就标记为一个标准发行版本,例如 1.2 、2.0、2.2、2.4、2.6、2.8,奇数的副版本号用来表示非标准版本(测试版本),例如:2.9.x发型版本时Redis3.0标准版本的非标准发型版本
redis发布历程
- 2010年,Redis1.0发布,基于list队列的数据结构,完成消息的生产和消费,但消息只能被消费一次,缺乏广播机制
- 2010年3月,Redis的开发工作由VMware主持。
- 2011年,Redis2.0发布,引入发布/订阅(pubsub)的数据结构,解决一些list不能解决的问题,基于pubsub完成channel的匹配和消息的广播,但是Redis异常、客户端断连都会导致消息丢失,消息缺乏堆积能力,不能削峰填谷。
- 2012年10月,Redis2.6发布,重构了大量的核心代码,支持从节点提供只读功能,发布Redis Sentinel第一版
- 2013年5月,Redis的开发由Pivotal赞助
- 2013年11月,Redis2.8发布,增加主从复制的功能,尝试性地支持IPV6,Redis Sentinel第二版
- 2015年4月,Redis3.0发布,增加Redis的分布式实现Redis Cluster,优化小对象内存访问,migrate连接缓存,Redis日志优化,lru算法大幅提升。
- 2016年5月,Redis3.2发布,新的list编码类型quicklist,新的RDB格式,Jemalloc更新到4.0.4版本
- 2017年7月,Redis4.0发布,提供了模块系统方便第三方开发者拓展redis的功能,提供了新的缓存剔除算法LFU,提供了非阻塞del和flushall/flushdb功能,有效解决删除大key(bigkey)可能造成的redis阻塞,提供了RDB-AOF混合持久化格式,提供memory命令实现对内存更全面监控统计,Redis Cluster兼容NAT和Docker
- 2018年10月,Redis5.0发布,对redis核心代码进行了重构,引入stream数据结构,考虑了list,pubsub在应用场景下的缺陷,对标kafka的模型重新设计全内存消息队列结构,但是由于是内存型消息队列,数据堆积成本高,故障回复可能会丢失数据。
- 2020年5月,Redis 6.0发布,ACL权限管控,多线程IO,客户端缓冲,Redis集群代理,过期Key回收优化,修复了5.0的链式复制不一致问题,disque消息队列模块,全面支持SSL协议并新增TSL协议,Redis-benchmark支持集群模式,重写Systemd支持,无磁盘复制副本。
- 2022年1月,Redis 7.0发布,包含了50多个新命令,Function函数库支持,集群分片的发布/订阅支持,集群支持主机名而不仅仅是IP地址,优化AOF/Lua/ACL/Cluster等功能【2022年9月,最新的版本是7.0.5】