没有合适的资源?快使用搜索试试~ 我知道了~
学习 Redis 可以帮助你构建更快、更可靠、更可扩展的应用程序,同时也为你的职业生涯增加价值。 1.Redis 是一个高性能的键值存储系统,它可以用作数据库、缓存或消息传递系统,从而提高应用程序的响应速度和处理能力; 2.通过使用 Redis 作为缓存层,可以减少对主数据库的直接访问,减轻数据库负担,提高数据检索速度。支持多种数据结构,如字符串、哈希、列表、集合等,这使得它在处理复杂数据时更加灵活和高效。同时提供了多种持久化选项,包括 RDB 快照和 AOF 日志,确保数据的安全性和可靠性。Redis 支持主从复制、哨兵系统和集群模式,有助于构建高可用性和可扩展的分布式系统。 3.Redis 能够处理大量的并发操作,适合需要快速读写访问的大数据处理场景,Redis 支持发布/订阅模式,可以用于实现实时消息传递、通知和聊天功能 4.通过使用 Redis 减少对昂贵数据库资源的依赖,可以降低基础设施的成本
资源推荐
资源详情
资源评论
对比点 redis memcached
存储方
式不同
数据不仅可以存放在内存中,通过持久化
可以存放到硬盘中
数据存在内存中,断点消失,数据不
能超过内存大小
数据类
型不同
复杂的数据类型 字符串,哈希,列表。集
合,有序集合等
数据类型支持相对简单 文本 二进制
底层模
型不同
构建了 vm 机制 1gb 只有 1mb
1什么是Redis
简单来说 redis 就是一个数据库,不过与传统数据库不同的是 redis 的数据是存在内存中的,所以读写
速度非常快,因此 redis 被广泛应用于缓存方向。另外,redis 也经常用来做分布式锁。redis 提供了多
种数据类型来支持不同的业务场景。除此之外,redis 支持事务 、数据持久化、LUA脚本、LRU驱动事
件、多种集群方案。
2redis 和 memcached 的区别
3Redis 的数据过期淘汰策略
Redis 中数据过期策略采用定期删除+惰性删除策略
定期删除策略 Redis 启用一个定时器定时监视所有的 key,判断key是否过期,过期的话就删除。这种
策略可以保证过期的 key 最终都会被删除,但是也存在严重的缺点:每次都遍历内存中所有的数据,非
常消耗 CPU 资源,并且当 key 已过期,但是定时器还处于未唤起状态,这段时间内 key 仍然可以用
惰性删除策略 在获取 key 时,先判断 key 是否过期,如果过期则删除。这种方式存在一个缺点:如果
这个 key 一直未被使用,那么它一直在内存中,其实它已经过期了,会浪费大量的空间。
定期删除+惰性删除策略 这两种策略天然的互补,结合起来之后,定时删除策略就发生了一些改变,不
在是每次扫描全部的 key 了,而是随机抽取一部分 key 进行检查,这样就降低了对 CPU 资源的损耗,
惰性删除策略互补了为检查到的key,基本上满足了所有要求。但是有时候就是那么的巧,既没有被定时
器抽取到,又没有被使用,这些数据又如何从内存中消失?没关系,还有内存淘汰机制,当内存不够用
时,内存淘汰机制就会上场
Redis 内存淘汰机制有以下几种策略:
noeviction:当内存不足以容纳新写入数据时,新写入操作会报错。(Redis 默认策略)
allkeys-lru:当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的 Key。(推荐使
用)
allkeys-random:当内存不足以容纳新写入数据时,在键空间中,随机移除某个 Key。
volatile-lru:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,移除最近最少使
用的 Key。这种情况一般是把 Redis 既当缓存,又做持久化存储的时候才用。
volatile-random:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,随机移除某
个 Key。
volatile-ttl:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,有更早过期时间的
Key 优先移除。
修改内存淘汰机制只需要在 redis.conf 配置文件中配置 maxmemory-policy 参数即可。
4 Redis 都有哪些应用场景
缓存:这应该是 Redis 最主要的功能了,也是大型网站必备机制,合理地使用缓存不仅可以加 快数
据的访问速度,而且能够有效地降低后端数据源的压力。
共享Session:对于一些依赖 session 功能的服务来说,如果需要从单机变成集群的话,可以选择
redis 来统一管理 session。
消息队列系统:消息队列系统可以说是一个大型网站的必备基础组件,因为其具有业务 解耦、非实
时业务削峰等特性。Redis提供了发布订阅功能和阻塞队列的功 能,虽然和专业的消息队列比还不
够足够强大,但是对于一般的消息队列功 能基本可以满足。比如在分布式爬虫系统中,使用 redis
来统一管理 url队列。
分布式锁:在分布式服务中。可以利用Redis的setnx功能来编写分布式的锁,虽然这个可能不是太
常用。 当然还有诸如排行榜、点赞功能都可以使用 Redis 来实现,但是 Redis 也不是什么都可以
做,比如数据量特别大时,不适合 Redis,我们知道 Redis 是基于内存的,虽然内存很便宜,但是
如果你每天的数据量特别大,比如几亿条的用户行为日志数据,用 Redis 来存储的话,成本相当的
高。
5为什么要做Redis分区
redis分区就是将数据分布到不同的redis实例中,因此对于每个redis实例所存储的内容仅仅是所有内容的
一个子集
分区可以让Redis管理更大的内存,Redis将可以使用所有机器的内存。如果没有分区,你最多只能使用
一台机器的内存。
分区使Redis的计算能力通过简单地增加计算机得到成倍提升,Redis的网络带宽也会随着计算机和网卡的
增加而成倍增长。
6什么是缓存雪崩?怎么解决?
由于缓存层承载着大量请求,有效地 保护了存储层,但是如果缓存层由于某些原因不能提供服务,当大
量缓存key失效时,大量的请求访问直接请求数据库,导致数据库服务器无法抗住请求或挂掉的情况,在
这些情况下,所有的请求都会直接请求到数据库,可能会造成数据库宕机的情况。
预防缓存雪崩时,建议遵守以下几个原则
缓存时间不一致 合理规划缓存的失效时间,可以给缓存时间加一个随机数,防止统一时间过期;
数据库压力评估 合理评估数据库的负载压力,这有利于在合理范围内部分缓存失,数据库也可以
正常访问;
限流降级策略 对数据库进行过载保护或应用层限流,这种情况下一般是在网站处于大流量、高并发
时,服务器整体不能承受时,可以采用的一种限流保护措施;
Redis 高可用架构 最后还可以考虑多级缓存设计,实现缓存的高可用。
7什么是缓存穿透?怎么解决?
缓存穿透是指查询一个根本不存在的数据,缓存中和数据库中都不存在,这样的数据不在缓存中,会导
致请求全部落到数据库上,有可能出现数据库宕机的情况。
造成这种情况的原因有 系统设计不合理、缓存数据更新不及时,或爬虫等恶意攻击
预防和解决缓存穿透问题,可以考虑以下两种方法
缓存空对象: 将空值缓存起来,但是这样就有一个问题,大量无效的空值将占用空间,非常浪费。
空值的过期时间的把控,避免数据库中有数据后出现数据不一致
布隆过滤器拦截: 将所有可能的查询key 先映射到布隆过滤器中,查询时先判断key是否存在布隆
过滤器中,存在才继续向下执行,如果不存在,则直接返回。布隆过滤器有一定的误判,所以需要
你的业务允许一定的容错性。
8缓存击穿
缓存击穿是指当缓存中某个热点数据过期了,在该热点数据重新载入缓存之前,有大量的查询请求穿过
缓存,直接查询数据库。这种情况会导致数据库压力瞬间骤增,造成大量请求阻塞,甚至直接挂掉。
缓存击穿解决方案
设置key永不过期 在设置热点key的时候,不给key设置过期时间即可。不过还有另外一种方式也
可以达到key不过期的目的,就是正常给key设置过期时间,不过在后台同时启一个定时任务去定时
地更新这个缓存。
使用分布式锁 保证同一时刻只能有一个查询请求重新加载热点数据到缓存中,这样,其他的线程
只需等待该线程运行完毕,即可重新从Redis中获取数据。锁的对象就是key,这样,当大量查询同
一个key的请求并发进来时,只能有一个请求获取到锁,然后获取到锁的线程查询数据库,然后将
结果放入到缓存中,然后释放锁,此时,其他处于锁等待的请求即可继续执行,由于此时缓存中已
经有了数据,所以直接从缓存中获取到数据返回,并不会查询数据库。
9 Redis 分布式锁
分布式锁是控制分布式系统之间同步访问共享资源的一种方式。在单机或者单进程环境下,多线程并发
的情况下,使用锁来保证一个代码块在同一时间内只能由一个线程执行
分布式锁的作用是当多个进程不在同一个系统中,用分布式锁可以控制多个进程对资源的访问。
分布式锁实现方式
可以使用 Memcached 实现分布式锁:Memcached 提供了原子性操作命令 add,线程获取到锁。
key 已存在的情况下,则 add 失败,获取锁也失败
剩余10页未读,继续阅读
资源评论
微刻时光
- 粉丝: 748
- 资源: 12
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- COMSOL蛇形流道燃料电池pemfc,温度、液态水、膜态水均有考虑,阳极通入氢气,阴极通入空气,物理模型包含双极板,液态水做了
- 基于Python的A++系统管家设计源码
- 基于Python的初学者HTML网页爬虫设计源码实践
- 光伏超级电容与蓄电池混合储能系统能量管理仿真 仿真模型+参考文献+注释 1光伏Boost:MPPT采用扰动观察法实现最大功率
- 基于Python和Shell语言的公开接口API设计源码
- 基于Java实现的中介者模式设计源码分析
- 基于Vue3的SpringBoot+Vue前后端分离仓库管理系统设计源码
- 经典文献复现:孤岛划分,最优断面相关 题目:考虑频率及电压稳定约束的主动解列最优断面搜索方法 最新复现,全网独一份,接相关代码定
- 基于Java语言的机试题设计源码示例
- 基于Java开发的相亲系统设计源码
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功