模块十五_分布式缓存redis

序言:

文章内容输出来源:拉勾教育Java高薪训练营。
本篇文章是学习课程中的一部分课后笔记

一、缓存原理&设计

1.什么是缓存

缓存原指CPU上的一种高速存储器,它先于内存与CPU交换数据,速度很快
现在泛指存储在计算机上的原始数据的复制集,便于快速访问。

2.使用缓存的优势
  • 提升用户体验
    用户体验(User Experience):用户在使用产品过程中建立起来的一种纯主观感受。
    缓存的使用可以提升系统的响应能力,大大提升了用户体验。
  • 减轻服务器压力
    客户端缓存、网络端缓存减轻应用服务器压力。
    服务端缓存减轻数据库服务器的压力。
  • 提升系统性能
    系统性能指标:响应时间、延迟时间、吞吐量、并发用户数和资源利用率等。
    缓存技术可以:
    缩短系统的响应时间
    减少网络传输时间和应用延迟时间
    提高系统的吞吐量
    增加系统的并发用户数
    提高了数据库资源的利用率
3.使用缓存的代价
  • 额外的硬件支出
    缓存是一种软件系统中以空间换时间的技术
    需要额外的磁盘空间和内存空间来存储数据
    搭建缓存服务器集群需要额外的服务器
    采用云服务器的缓存服务就不用额外的服务器了
    阿里云,百度云,提供缓存服务
  • 高并发缓存失效
    在高并发场景下会出现缓存失效(缓存穿透、缓存雪崩、缓存击穿)
    造成瞬间数据库访问量增大,甚至崩溃
  • 缓存与数据库数据同步
    缓存与数据库无法做到数据的时时同步
    Redis无法做到主从时时数据同步
  • 缓存并发竞争
    多个redis的客户端同时对一个key进行set值得时候由于执行顺序引起的并发问题
4.缓存的读写模式
  • Cache Aside Pattern(旁路缓存)
    最经典的缓存+数据库读写模式。
    读的时候,先读缓存,缓存没有的话,就读数据库,然后取出数据后放入缓存,同时返回响应。
cap.png
  • Read/Write Through Pattern
    应用程序只操作缓存,缓存操作数据库。
    Read-Through(穿透读模式/直读模式):应用程序读缓存,缓存没有,由缓存回源到数据库,并写入缓存。
    Write-Through(穿透写模式/直写模式):应用程序写缓存,缓存写数据库。
    该种模式需要提供数据库的handler,开发较为复杂。

  • Write Behind Caching Pattern
    应用程序只更新缓存。
    缓存通过异步的方式将数据批量或合并后更新到DB中
    不能时时同步,甚至会丢数据

二、Redis数据类型

1.Redis简介

Redis是一个Key-Value的存储系统,使用ANSI C语言编写。
key的类型是字符串。
value的数据类型有:
常用的:string字符串类型、list列表类型、set集合类型、sortedset(zset)有序集合类型、hash类型。
不常见的:bitmap位图类型、geo地理位置类型。
Redis5.0新增一种:stream类型
注意:Redis中命令是忽略大小写,(set SET),key是不忽略大小写的 (NAME name)

2.底层数据结构
数据结构.png
  • RedisDB结构
    Redis中存在“数据库”的概念,该结构由redis.h中的redisDb定义。
    当redis 服务器初始化时,会预先分配 16 个数据库
    所有数据库保存到结构 redisServer 的一个成员 redisServer.db 数组中
    redisClient中存在一个名叫db的指针指向当前使用的数据库
    RedisDB结构体源码:


    DB结构.png
  • RedisObject结构
    Value是一个对象,
    包含字符串对象,列表对象,哈希对象,集合对象和有序集合对象


    RedisObject结构.png

三、Redis持久化

1.RDB

RDB(Redis DataBase),是redis默认的存储方式,RDB方式是通过快照( snapshotting )完成的。这一刻的数据
不关注过程


rdb.png

优点
RDB是二进制压缩文件,占用空间小,便于传输(传给slaver)
主进程fork子进程,可以最大化Redis性能,主进程不能太大,复制过程中主进程阻塞
缺点
不保证数据完整性,会丢失最后一次快照以后更改的所有数据

2.AOF

AOF(append only file)是Redis的另一种持久化方式。Redis默认情况下是不开启的。开启AOF持久化后Redis 将所有对数据库进行过写入的命令(及其参数)(RESP)记录到 AOF 文件, 以此达到记录数据库状态的目的,这样当Redis重启后只要按顺序回放这些命令就会恢复到原始状态了。
AOF会记录过程,RDB只管结果

aof.png
保存模式.png
3.RDB与AOF对比

1、RDB存某个时刻的数据快照,采用二进制压缩存储,AOF存操作命令,采用文本存储(混合) 2、RDB性能高、AOF性能较低
3、RDB在配置触发状态会丢失最后一次快照以后更改的所有数据,AOF设置为每秒保存一次,则最多丢2秒的数据
4、Redis以主服务器模式运行,RDB不会保存过期键值对数据,Redis以从服务器模式运行,RDB会保存过期键值对,当主服务器向从服务器同步时,再清空过期键值对。
AOF写入文件时,对过期的key会追加一条del命令,当执行AOF重写时,会忽略过期key和del命令。

你可能感兴趣的:(模块十五_分布式缓存redis)