首页 > 数据库 >Redis缓存基础知识(一)

Redis缓存基础知识(一)

时间:2023-01-29 22:12:45浏览次数:62  
标签:AOF 缓存 持久 过期 Redis 基础知识 内存 Key

一、基本概念

1. Redis:属于开源的、键值对型的数据存储系统。支持网络、可基于内存、可持久化的日志型数据库。它可用作数据库、缓存、消息中间件。

2. 分析:正因为Redis是基于内存的,因此对于内存有非常高的要求,会把数据实时写到内存中,再定时同步到文件;作为数据库而言,可靠性没有Oracle关系型数据库那么稳定,但Redis可作为缓存层的Cache层,它可缓存计数、排行榜样和队列(订阅关系)等数据库结构。

 二、Redis优缺点

1. 主要优点:

(1).完全基于内存,数据实时读写内存,定时闪回到文件中,性能极高,读写速度快,Redis能支持超过100Kb/s的读写速度

(2).支持高并发,官方宣传支持10万级别的并发读写

(3).支持机器重启后 ,重新加载模式,不会丢失数据

(4).支持主从模式复制,支持分布式

(5).丰富的数据类型——Redis支持Strings、Lists、Hashes、Sets以及Ordered Sets数据类型

(6).原子——Redis的所有操作都是原子性的

(7).丰富的特性——Redis还支持Publish/Subscribe等特性

(8).开源

2.主要缺点

(1).数据库容量受到物理内存的限制,不能实现海量数据的高性能读写

(2).没有原生的可扩展机制,不具备自身可扩展能力,需要依赖客户端来实现分布式读写

(3).Redis使用的最佳方式是全部数据In-Memory,虽然Redis也提供持久化功能,但实际更多的是一个disk-backed功能,和传统意义上的持久化区别较大

(4).Redis适合场景主要局限在较小数据量的高性能操作和运算上

(5).相比于关系型数据库,其存储结构相对简单,因此Redis并不能对复杂的逻辑关系提供很好的支持

(6).Redis不支持复杂逻辑查询,不适合大型项目的要求

三、Redis常见应用场景

1.缓存:现在几乎是所有中大型网站都在用的提升手段,合理的利用缓存能够提升网站的访问速度,大大降低数据库的压力

2.排行榜:借助Redis提供的有序集合(sorted set)能轻松实现排行榜功能

3.计数器:应用在电商网站的浏览量、视频点击量等方面。这时适合使用Redis提供的incr命令来实现计数器功能,由于是单线程的原子操作,保证了统计不会出错,本身又是内存操作,速度非常快。

4.分布式session分享:集群模式下,基于Redis实现session共享

5.分布式锁:在维护库存、“秒杀”购物等一些场合,为保证并发访问时操作的原子性,可利用Redis实现分布式锁来完成这些功能

6.最新列表:Redis列表结构,LPUSH可在列表头部插入一个内容ID作为关键字,LTRIM可用来限制列表的数量,这样列表永远为N个ID,无须查询最新列表,直接根据ID去到对应的内容页即可

7.位操作:用于数据量上千万甚至上亿的场景下,经典应用如上亿用户的活跃度统计等。位操作使用setbit、getbit、bitcount等命令

8.消息队列:Redis提供发布/订阅及阻塞队列功能,能实现一个简单的功能较弱消息队列系统。在一些功能简单的应用系统里可以使用。

四、Redis将所有数据放入内存中的原因

1.Redis为了达到最快的读写速度将所有数据放入内存中,所有客户端访问数据集都在内存中进行。

2.如果开启了持久化则通过异步的方式将数据写入磁盘,在内存中操作本身就比从磁盘操作要快,且不受磁盘I/O速度的影响

3.如果内存使用达到设置的上限,Redis的写命令会返回错误信息(但是读命令仍可以正常返回)

4.如果已开启虚拟内存功能,当内存用尽时,Redis就会把那些不经常使用的数据存储到磁盘;反之,如果Redis里的虚拟内存被禁了,它就会用操作系统的虚拟内存(交换内存),但这时Redis的性能会急剧下降。

五、Redis内存优化建议和高性能原因分析

1.内存优化建议

(1).尽可能使用哈希表(hash数据结构),因为Redis在储存小于100个字段的Hash结构上,其存储效率非常高,在不需要使用集合set或list操作的情况下,尽可能使用hash结构

(2).根据业务场景,考虑使用BITMAP

(3).充分利用共享对象池:Redis在启动时会自动创建0-9999的整数对象池,对于0-999的内部整数类型的元素、整数值对象都会直接引用整数对象池中的对象,因此尽量使用0-9999整数对象可节省内存

(4).合理使用Redis提供的内存回收策略,比如过期数据清除,expire设置数据过期时间等

2.高性能原因分析

(1).完全基于内存

(2).数据结构简单

(3).采用单线程

(4).使用多路I/O复用模型,为非阻塞IO

(5).Redis直接自己构建了VM机制,没有使用OS的Swap,而是自己实现。通过VM功能可以实现冷热数据分离,可避免因内存不足而造成访问速度下降的问题

六、Redis持久化和Key过期删除策略

1.两种持久化方式

(1).RDB持久化:在指定的时间间隔内将内存中的数据以快照写入磁盘,实际操作过程是创建(fork)一个子进程,先将数据集写入临时文件,写入成功后,再替换之前的文件,用二进制压缩存储。

RDB持久化优点:

I.只有一个文件dump.rdb,方便持久化

II.容错性好,一个文件可以保存到安全的磁盘

III.实现了性能最大化(它创建单独子进程完成持久化,让主进程继续处理命令,主进程不进行I/O操作,从而保证Redis的高性能)

IV.RDB是一个紧凑压缩的二进制文件,RDB重启时加载效率比AOF持久化更高,在数据量大时更加明显

RDB持久化缺点:

I.有可能数据丢失,不适合可用性要求比较高的场景;两次RDB持久化的时间间隔里,系统一旦宕机,则该段时间内的数据因没有写入磁盘将丢失

II.由于RDB是通过创建(fork)子进程协助完成数据持久化工作的,因此,当数据集较大时,可能会导致整个服务器间歇性暂停服务

(2).AOF持久化:以日志的形式记录服务器所处理的每一个写、删除操作,查询操作不会记录

AOF持久化优点:

I.实时持久化,数据安全

II.它通过append模式写文件,即使中途服务器宕机,可以通过Redis-check-aof工具解决数据一致性问题

III.AOF机制的rewrite模式:AOF文件的文件大小触碰到临界点时,rewrite模式会被运行,重写内存中的所有数据,从而大大缩小文件体积

AOF持久化缺点:

I.AOF持久化文件通常比RDB持久化文件大很多

II.比RDB持久化启动效率低,数据集大的时候较为明显

III.AOF文件体积可能迅速变大,需要定期执行重写操作来降低文件体积

2.Key过期删除策略

(1).主节点的过期删除策略

I.定时删除:在设置Key过期时间的同时,创建定时器timer,让定时器在Key过期时间到来时,立即执行对Key的删除操作  (对内存友好,对CPU不友好)

II.惰性删除:不管Key是否过期,每次获取Key时都检查是否过期,如果过期就删除该Key,否则返回该Key  (对CPU友好,对内存不友好)

III.定期删除:是上述两种过期策略的折中,即对内存有何和CPU时间友好的折中方法。每隔一段时间执行一次删除过期键任务

说明:惰性删除是被动删除策略,定时删除和定期删除是主动删除策略

(2).从节点的过期删除策略

Redis从节点不会对Key做过期扫描,从节点对过期Key的处理是被动的。主节点在Key到期时,会在AOF文件里增加一条del指令。AOF文件被同步到从节点以后,从节点根据AOF中的这个del指令来执行删除过期Key的操作

从节点的这个过期Key的处理策略,会导致一个问题,主节点已经删除的过期Key,在从节点中还会暂时存在。因为AOF同步del指令是异步的。

标签:AOF,缓存,持久,过期,Redis,基础知识,内存,Key
From: https://www.cnblogs.com/codeboy-top/p/17073743.html

相关文章

  • JS基础知识
    1.简单数据类型  1.1字符串型String   1.1.1字符串长度        1.1.2字符串拼接            1.1.3字符串拼接加强 ......
  • Redis批量查询
    Redis批量处理在开发中,有时需要对Redis进行大批量的处理。比如Redis批量查询多个Hash。如果是在for循环中逐个查询,那性能会很差。这时,可以使用Pipeline(管道)。Pip......
  • 学习笔记——redis事务、乐观锁、悲观锁
    2023-01-29一、redis事务与乐观锁相关命令1、redis事务(1)redis事务的含义redis事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序执行。事务在执行过程中,不......
  • 浏览器缓存
    浏览器缓存分为:强缓存和协商缓存缓存:(frommemorycache)内存缓存和(fromdiskcache)磁盘缓存强缓存:状态码为200不发送请求到服务器,直接读取本地缓存。发送的请求服务器接......
  • .net core 使用redis
    参照:.NET6使用Redis-Lulus-博客园(cnblogs.com)九、.netcore(.NET6)添加通用的Redis功能-WeskyNet-博客园(cnblogs.com)......
  • redis的简易哨兵模式
    某一天突然收到通知说redis的服务器挂了,因为是支付服务用到的redis,所以赶紧去查一下对服务流程有没有影响,结果是一切正常,松了一口气。后面看了一下代码发现里面自己封装的......
  • SpringBoot中配置Redis
    SpringBoot中整合Redis缓存背景:工作中需要用到缓存之前都是用ConcurrentHashMap公司不让用redis那我就小试牛刀一下前端的App、网页在登录时,或是用户在进行一些敏感......
  • 干货|常用的电子元器件基础知识介绍
    电子元器件是电子行业的入门,但是有很多工程师对其还是一知半解,下面沐渥小编为大家介绍一下沐渥科技常用的电子元器件及其基础知识。1、电阻:电阻是电路中使用最多的元器件,因......
  • redis安装方式
    1、源码包编码安装操作系统版本centos7.6redis版本是7.0.81.1安装工具[root@localhost~]#yuminstallgccgcc-c++tcl-y1.2创建安装目录[root@localhos......
  • python 缓存函数结果,下次不会执行函数时直接获取结果[ lru_cache 、cache]
    学习路径:https://www.aiuai.cn/aifarm1963.htmlfromfunctoolsimportlru_cachefrompydanticimportBaseSettingsn=0classSettings(BaseSettings):envir......