前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【原创】Redis

【原创】Redis

作者头像
零点
发布2023-03-03 20:40:56
2980
发布2023-03-03 20:40:56
举报
文章被收录于专栏:微科技微科技

Redis基础

Redis五种保存数据的类型

String,Map,List,Set,Zset Redis的工作线程始终只有一个(单线程)

分布式锁

分布式锁为了解决无效请求和重复请求发送到数据库。这种锁是排他锁。

缓存穿透

缓存穿透:数据库中没有当前数据,Redis中当没有该数据(在Redis库中查不到对应的key) 解决方案:在Redis中添加key,设置value为空设置该缓存的时间短点。

缓存击穿

缓存击穿:热点key过期,或当前有大量的请求访问Redis中没有的key。缓存击穿热点key的本质就是瞬时大量重复请求访问。 解决方案:因为无法判断某个时刻瞬时的请求中查询的热点key,所有需要对重复请求使用分布式锁解决。

缓存雪崩

缓存雪崩:大量热点key同时过期或者Redis宕机,导致大量请求直接访问数据库。 解决方案:设置key的清除时间为随机时间,或者使用互斥锁。

缓存回收策略(删除过期key)

1.定时过期:每个设置过期时间的key都需要创建一个定时器,到过期时间就会立即清除。该策略可以立即清除过期数据,对内存友好,但是会占用大量的CPU资源去处理过期数据,从而影响Redis的执行响应时间。 2.惰性过期:请求时会判断key是否过期,过期则删除。该策略最大化地节省CPU资源,对内存不友好,导致大量Key没有再次被访问,占用大量内存。 3.定期过期:每隔一定的时间,会扫描数据库的expires字典中一定数量的key,并清除其中已过期的key。该策略是前两者的折中方案。通过调整定时扫描的时间间隔和每次扫描的限定耗时,可以在不同情况下使得CPU和内存资源达到最优的平衡效果。

缓存淘汰

内存空间不足时会触发淘汰机制: 1.noeviction 策略 : 当 Redis 缓存达到了 maxmemory 配置的值后,再有写入请求到来时,redis 将不再提供写入服务,直接响应错误 2.volatile-ttl 策略 : 在筛选时,会针对设置了过期时间的键值对,根据过期时间的先后进行删除,越早过期的越先被删除 3.volatile-random 策略 : 在设置了过期时间的键值对中,进行随机删除 4.volatile-lru 策略 :使用 LRU 算法筛选设置了过期时间的键值对 5.volatile-lfu 策略 : 使用 LFU 算法选择设置了过期时间的键值对 6.allkeys-random 策略,从所有键值对中随机选择并删除数据; 7.allkeys-lru 策略,使用 LRU 算法在所有数据中进行筛选。 8.allkeys-lfu 策略,使用 LFU 算法在所有数据中进行筛选。

缓存的持久化方案

1.RDB:以二进制形式保存数据。 优点: 将某个时间点redis内的所有数据保存下来,当大量数据需要恢复时速度快。 由于RDB操作是由FROK子进程进行操作,对其他给客户端提供读写服务的影响会非常小。 缺点: 大概率会丢失较长时间的数据。 同步时可能会影响redis的工作。 2.AOF:redis每次执行一个命令,都会将这个命令原本的语句记录到.aod文件当中,然后通过fsync策略,将命令执行后的数据持久化到磁盘中(不包含读命令)。 优点: 可以更好的保护数据的不丢失,一般AOF会每隔1秒,通过后台的线程去执行fsync操作,如果redis进程挂掉,最多丢失1秒的数据。 AOF是将命令直接追加在文件末尾,写入性能非常高,适合做灾难性误删除操作。 缺点: AOF文件相比RDB文件比较大。 AOF每次命令都会写入,相比RDB定时同步数据消耗性能更多。 AOF数据恢复比较慢。

Redis集群方案

1.哨兵模式:哨兵是Redis集群中非常重要的组件,主要有以下功能。

代码语言:javascript
复制
集群监控:负责监控redis master和slave进程是否正常工作。
消息通知:如果redis实例有故障,那么哨兵就会发送消息作为报警信息通知给管理员。
故障转移:如果master节点宕机,会自动将slave节点切换成master节点。
配置中心:如果发生故障转移,就会将新的master节点通知给客户端。

2.Redis Cluster是一种服务端Sharding技术,采用slot(槽)的概念,一共分为16384个槽,将请求发送到任意节点,接收请求的节点会将请求发送到正确的节点上执行。

代码语言:javascript
复制
通过哈希的方式,将数据分片,对保存数据的key进行取模,每个节点均分存储一定的数据。
每份数据分片会存储在互为主从的多节点上。
数据先写入到主节点,在同步到从节点。
同一分片多个节点间的数据不保持强一致性(不保证主从已完成全部数据的同步)。
读取数据时,当前节点会自动将请求转发到正确的节点上。

Redis主从复制原理

全量复制:主节点进行RDB持久化(生成RDB文件),该过程会消耗大量的cpu。主节点通过网络将RDB文件发送给从节点,从节点清空原有数据,将RDB数据进行导入。

增量复制:主从节点中都会维护一个偏移量,用于标记需要复制的开始位置(以主节点的偏移量为准)。主节点内部有一个先进先出的队列的缓冲区,将缓冲区的数据复制到从节点。

CAP理论和BASE理论

CAP理论

Consistency(一致性):所有节点在同一时间的数据完全保持一致。 Availability(可用性):保证服务的可用状态,不出现用户操作失败或者访问超时等情况。 Partition Tolerance(分区容错性):发生网络分区时,需要继续服务,也必须保证数据的一致性。

BASE理论

Basically Available(基本可用)、Soft state(软状态)和Eventually consistent(最终一致性)。 基本可用:响应时间上有时延,系统非核心功能在访问量大的时候可能不可用。 软状态:数据同步允许一定的延迟。 最终一致性:系统中的所有数据副本,在经过一段时间的同步后,最终能够达到数据一致性的状态。

负载均衡算法、类型

算法 1、轮询法:请求按顺序分配到后台服务器。 2、随机法:按照随机算法,根据服务器列表大小值来随机选取服务器。 3、源地址哈希法:通过根据客户端的ip地址,通过哈希函数计算得到的一个数值,用该数值取模运算,得到访问服务器的序号。 4、加权轮询法:对不同的服务器机器配置分配不同的权重,增加配置高的服务器处理请求的几率。 5、最小连接数:将请求分配到连接少的服务器上。 类型 DNS方式实现负载均衡:DNS用于域名解析,DNS可以指定访问的ip 软件负载均衡:Nginx:在应用进行负载均衡。七层负载均衡,支持HTTP、E-mail,同时支持4层负载均衡。

Redis实现分布式锁

使用SETNX实现: 语法:setnx key value 当key不存在时,将key的值设为value,并返回1 若key存在,则SETNX不做任何操作,并返回0 本质是:利用setnx针对key是否存在会进行判断,如果key已经存在,则其他请求执行SETNX则会返回0,在业务方法中对返回值进行判断,如果返回0,则无法操作该记录。当处理redis完成后删除设置的key就可以了。

Redisson实现分布式锁

Redisson为第三方java项目。Redisson对比Redis实现的分布式锁,会在底层开启一个后台线程,该线程用于定时检测锁是否还存在。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Redis基础
    • Redis五种保存数据的类型
      • 分布式锁
        • 缓存穿透
          • 缓存击穿
            • 缓存雪崩
              • 缓存回收策略(删除过期key)
                • 缓存淘汰
                  • 缓存的持久化方案
                  • Redis集群方案
                  • Redis主从复制原理
                  • CAP理论和BASE理论
                    • CAP理论
                      • BASE理论
                      • 负载均衡算法、类型
                      • Redis实现分布式锁
                      • Redisson实现分布式锁
                      相关产品与服务
                      云数据库 Redis
                      腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档