目录
redis简介
redis是一个nosql(not only sql不仅仅只有sql)数据库,翻译成中文叫做非关系型型数据库。
redis特性
- 存取速度快,Redis的所有数据都是存放在内存中的,所以把数据放在内存中是Redis速度快的最主要原因。Redis是用C语言实现的,一般来说C语言实现的程序“距离”操作系统更近,执行速度相对会更快。
- Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
- Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。String, List, Hash, Set, Sorted Set, Geo, HyperLogLog, Bitmap, Stream 等。
- Redis支持数据的备份,即master-slave模式的数据备份。
-
Redis哨兵模式,监控、提醒、自动故障转移
-
Redis事务,MULTI:开启事务,其后执行的命令都将被存入命令队列,直到执行EXEC,这些命令才会被原子执行[begin transaction],DISCARD:事务回滚[rollback],WATCH监视key
redis应用场景
- 实现会话缓存(session cache)
- 队列,由于redis中value数据结构的特性,可以实现一些缓存队列(秒杀,抢购,12306等)关于redis队列的实现方式有两种:1、生产者消费者模式。2、发布者订阅者模式。【redis】Redis中的队列list实现秒杀活动抢购_天涯共明月的博客-CSDN博客_redis队列实现秒杀
- 排行榜,同样的sorted set能轻易地帮我们实现这一功能(微博热搜)使用redis进行排行榜的小秘诀 - 简书
- 发布/订阅,redis支持这一特性,但是使用较少,订阅新闻频道(体育,军事等),关注大V,关注好友,系统消息广播。你还不了解Redis的发布/订阅功能与Redis的Stream吗_Hollis的技术博客_51CTO博客
- 计数器:使用Redis原子操作,用于社交网络的转发数,评论数,粉丝数,关注数等Redis实现计数器---接口防刷_当年的春天的博客-CSDN博客_redis实现计数器
- cookie自动过期,限时优惠价格,限制每分钟的访问次数
- 分布式锁 Redis分布式锁_冯小鸟的探戈的博客-CSDN博客_redis分布式锁
- 位图,签到记录,redis内构建一个足够长的数组,每个数组元素只能是0和1两个值,然后这个数组的下标index用来表示用户id(必须是数字哈),那么很显然,这个几亿长的大数组就能通过下标和元素值(0和1)来构建一个记忆系统。Redis位图实现7天连续签到_weixin_45970536的博客-CSDN博客_redis 连续签到
- 缓存(数据查询、短连接、新闻内容、商品内容等等)。(最多使用) 分布式集群架构中的session分离。 聊天室的在线好友列表。 任务队列。(秒杀、抢购、12306等等) 应用排行榜。 网站访问统计。
- 数据过期处理(可以精确到毫秒)(发送验证码)
Redis使用方式
SpringBoot集成Redis
1.在pom里导入一个jar包
2.配置redis的ip和端口号,密码,连接池
3. 注入Template开始用
Redis底层原理
1.数据持久化原理?
redis的持久化分为两种方法,在通常使用的过程有RDB和AOF两种最常使用
AOF模式默认条件下是封闭状态,如果需要开启则需要修改配置文件
只要开启了AOF模式,则持久化的方式以AOF模式为主
开启AOF持久化方式:appendonly yes
(1)数据要求不严谨的时候,可以选用RDB模式
(3)双选,需要搭建主从结构,主机RDB,从机AOF,可以保证业务允许。
2.redis主从备份模式机器原理?
redis集群方式中,为了避免单点故障,通常在实际中需要建立分布式集群来维护实际生产业务。在redis服务中提供了一种主从备份模式,就是一台主服务可以有从节点服务,一旦主服务因为意外而宕机了,系统立马就将从节点身份变成主节点服务,这样继续提供服务,就不会出现因主节点宕机而产生单点故障的情况。
主从备份模式是单向数据拷贝的,只能从主节点向从节点备份数据。
主从备份模式的作用?
a>数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。
b>故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复;实际上是一种服务的冗余。
c>负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务(即写Redis数据时应用连接主节点,读Redis数据时应用连接从节点),分担服务器负载;尤其是在写少读多的场景下,通过多个从节点分担读负载,可以大大提高Redis服务器的并发量。
d>高可用基石:除了上述作用以外,主从复制还是哨兵和集群能够实施的基础,所以说主从复制是Redis高可用的基础。
手动操作:
slaveof <masterip> <masterport>,直接再启动服务是就指定要成为谁的从属节点。
在从属服务客户端使用命令:slaveof no one ,即可解除该服务的从属关系,就是自身也是一个主服务,可以行自由的读写操作。
主从模式的哨兵监控机制?
哨兵模式实际使用中,根据实际情况至少使用三个哨兵机制来监控主从模式结构。比如说,在一台服务上可以启动多个redis服务,多台机器,每台机器至少启动一个哨兵服务来监控主从模式结构,目的是为保证系统能持续性的提供服务,不至于因为宕机造成终端服务,从而影响业务。
redis哨兵模式的配置方法参考:Redis哨兵(Sentinel)模式的配置方法及其在Java中的用法
3.redis key 过期清理的原理?
定期清理+懒汉式清理。隔一段时间进行一次清理,清除掉过期的 key。比如一分钟或者是十分钟清理一次。同时使用懒汉式清理,每次获取key的时候能判断一下,是否过期,是否需要清理。
4.内存策略
redis服务器运行在内存中,数据也在内存中保存. 如果一直往里存,总有一天内存资源不够用,所以需要研究如何优化内存.
(1)LRU算法
维度:T 时间
LRU:least recently used,最近最少使用
(2)LFU算法
维度:引用的次数,最不常使用
LFU:least frequently used
(3)随机算法
随机算法:灭霸的响指
(4)TTL算法
说明:将设定了超时时间的数据提前删除
key1:ttl 100秒
key2:ttl 10秒
先删除key2
自建集群和云产品的特点与区别
云数据库Redis版(ApsaraDB for Redis)是兼容开源Redis协议标准、提供混合存储的数据库服务,基于双机热备架构及集群架构,可满足高吞吐、低延迟及弹性变配等业务需求。
硬件部署在云端,提供完善的基础设施规划、网络安全保障和系统维护服务,用户可以专注于业务创新。
相比自购服务器搭建Redis数据库,云数据库Redis在数据安全、运维投入、内核优化等方面都有一定的优势。
对比项 | 云数据库Redis | 自建Redis |
---|---|---|
安全防护 | 事前防护: | 事前防护:
|
事中保护:SSL加密访问。 | 事中保护:需要自行通过第三方工具实现SSL加密访问。 | |
事后审计:审计日志。 | 事后审计:无审计功能。 | |
备份恢复 | 企业版(性能增强型)支持数据闪回功能,可以恢复指定时间点的数据。更多信息,请参见通过数据闪回按时间点恢复数据。 | 仅支持一次性全量恢复。 |
运维管理 |
| |
部署和扩容 | 即时开通,弹性扩容。 | 需要自行完成采购硬件、机房托管、部署机器等工作,周期较长,且需要自行维护节点关系。 |
高可用 |
| |
内核优化 |
|
云数据库Redis容灾架构演进
当云数据库Redis实例因不可预料的原因(例如设备故障、机房断电等)发生故障,容灾机制可用于保障数据的一致性和业务可用性。云数据库Redis提供多种灾备方案供您选择,可满足不同的业务场景。
图 1. Redis容灾架构演进
云redis特性
云数据库Redis版支持多种架构,数据可持久化存储,可用性高,且支持弹性扩展和智能运维。
1.架构灵活
- 双机热备架构
系统工作时主节点(Master)和备节点(Replica)数据实时同步,主节点故障时系统自动进行秒级切换,备节点接管业务(期间会有秒级的闪断),主备架构保障系统服务具有高可用性。详情请参见标准版-双副本。
- 集群架构
集群(Cluster)实例采用分布式架构,每个节点都采用一主一从的高可用架构,能够进行自动容灾切换和故障迁移。多种集群规格可适配不同的业务压力,可按需扩展数据库性能。详情请参见集群版-双副本。
- 读写分离架构
读写分离(Read-Write Splitting)实例由Proxy服务器、主备节点及只读节点组成提供高可用、高性能、高灵活的读写分离服务,解决热点数据集中及高并发读取的业务需求,最大化地节约用户运维成本。详情请参见读写分离版。
2.数据安全
- 数据持久化存储
采用内存加硬盘的混合存储方式,在提供高速数据读写能力的同时满足数据持久化需求。
- 备份及一键恢复
每天自动备份数据,数据容灾能力强,免费支持数据一键恢复,有效防范数据误操作,极大地降低发生业务损失的可能性。
- 多层网络安全防护
- VPC私有网络在TCP层直接进行网络隔离保护。
- DDoS防护实时监测并清除大流量攻击。
- 持1000个以上IP白名单配置,直接从访问源进行风险控制。
- 支持密码访问鉴权方式,确保访问安全可靠。
- 深度内核优化
阿里云专家团队对源码Redis进行深度内核优化,有效防止内存溢出,修复安全漏洞,为您保驾护航。
3.高可用性
- 主从双节点
标准版与集群版的双副本实例均有主从双节点,避免单点故障引起的服务中断。
- 自动检测与恢复
自动侦测硬件故障,发生故障时能够进行故障转移,在数秒内恢复服务。
- 资源隔离
实例级别的资源隔离可以更好地保障单个用户服务的稳定性。
4.弹性扩展
- 数据容量扩展
云数据库Redis版支持多种内存规格的产品配置,您可以根据业务量升级内存规格。
- 性能扩展
支持集群架构下弹性扩展数据库系统的存储空间及吞吐性能,突破海量数据高QPS性能瓶颈,轻松应对每秒百万次的读写需求。
相关操作方法请参见变更实例配置。
5.智能运维
- 监控平台
提供CPU使用率、连接数、磁盘空间利用率等实例信息实时监控及报警,随时随地了解实例动态,更多信息请参见云数据库Redis可观测性能力介绍。
- 可视化管理平台
管理控制平台对实例克隆、备份、数据恢复等高频高危操作可便捷地进行一键式操作。
- 可视化DMS平台
专业的DMS数据管理平台,提供可视化的数据管理,全面提升研发、运维效率。
- 数据库内核版本管理
主动升级,快速修复缺陷,免去日常版本管理苦恼;优化Redis参数配置,最大化利用系统资源。
云redis应用场景
云数据库Redis版适合多种场景中的数据存储,尤其是请求并发量大的场景。
1.游戏行业应用
游戏行业可以选择云数据库Redis版作为重要的部署架构组件。
- 场景一:Redis作为存储数据库使用
游戏部署架构相对简单,主程序部署在ECS上,所有业务数据存储在Redis中,作为持久化数据库。云数据库Redis版支持持久化功能,主备双机冗余数据存储。
- 场景二:Redis作为缓存加速应用访问
Redis作为缓存层,加速应用访问。数据存储在后端的数据库中(RDS)。
Redis的服务可靠性至关重要,一旦Redis服务不可用,将导致后端数据库无法承载业务访问压力。云数据库Redis版提供双机热备的高可用架构,保障极高的服务可靠性。主节点对外提供服务,当主节点出现故障,系统自动切换备用节点接管服务,整个切换过程对用户全部透明。
2.电商行业应用
电商行业中对于Redis大量使用,多数在商品展示、购物推荐等模块。
- 场景一:秒杀类购物系统
大型促销秒杀系统,系统整体访问压力非常大,一般的数据库根本无法承载这样的读取压力。云数据库Redis版支持持久化功能,可以直接选择Redis作为数据库系统使用。
- 场景二:带有计数系统的库存系统
底层用RDS存储具体数据信息,数据库字段中存储具体计数信息。云数据库Redis版来进行计数的读取,RDS存储计数信息。云数据库Redis版部署在物理机上,底层基于SSD高性能存储,可以提供极高的数据读取能力。
3.视频直播类应用
视频直播类业务往往会重度依赖Redis业务去存储用户数据及好友互动关系。
- 双机热备保障高可用
云数据库Redis版提供双机热备的方式,可以极大的提高服务可用性。
- 集群版解决性能瓶颈
云数据库Redis版提供集群版实例,破除Redis单线程机制的性能瓶颈,可以有效的应对视频直播类流量突起,有效地支撑高性能的需求。
- 轻松扩容应对业务高峰
云数据库Redis版可支持一键扩容,整个升级过程对用户全透明,可以从容应对流量突发对业务产生的影响。
Redis常见问题
缓存雪崩:redis中大量数据过期,同时大量请求访问,直接请求数据库,导致数据库崩了。
解决方案:过期时间设置随机,防止大量数据同时过期。
缓存击穿:缓存没有数据但是数据库有数据,导致大量请求直接访问数据库,导致数据库挂掉。
解决方案:热点数据不过期,互斥锁
缓存穿透:大量请求恶意访问数据库没有的数据,导致数据库崩掉。
解决方案:参数异常校验,eg:id小于0直接返回,或者第一次访问数据库没有的数据就在缓存创建一条数据,然后设置一个返回值,过期时间短一点。
布隆过滤器,将需要的数据放到过滤器,缓存不存在该数据就去过滤器查,如果有就去DB查然后更新缓存KV,没有直接return,主要是利用高效的算法判断数据是否存在。缺点:一定的误识别和删除困难。
如何避免:
事前:Redis 高可用,主从+哨兵,Redis cluster,避免全盘崩溃。
事中:本地 ehcache 缓存 + Hystrix 限流+降级,避免MySQL 被打死。
事后:Redis 持久化 RDB+AOF,一旦重启,自动从磁盘上加载数据,快速恢复缓存数据。