Java基础知识——Redis

本文详细介绍了Redis的基础知识,包括它的持久化方式(RDB和AOF)、内存模型、事务机制、删除策略以及高速缓存策略。文章探讨了Redis如何在单线程环境下实现高效操作,解释了Redis事务不支持原子性和持久性的原因,并讨论了Redis在数据一致性方面的挑战。此外,还提到了Redisson框架的分布式锁和Redlock的概念,以及Redis在高并发场景下的应用。
摘要由CSDN通过智能技术生成

MVC模式,Model-View-Controller。
在后端代码中,为了保证代码的整洁,易读性,一般会采用分层的办法,自顶向下分为controller层,service层,dao层,数据层或者叫持久层(直接与数据库打交道)。有时候,为了达到解耦的目的,会在上述基层中间加入响应的接口层,以使得接口与实现分离。
如图层次关系所示,DAO层一般负责对数据库进行增删改查各种操作,Service层调用DAO层的操作完成自己的功能需求,Controller层负责接收web请求,并调用Service做出相应的处理。
在这里插入图片描述

知识点列表:

开发

视图层技术——HTML,CSS,JS,AJAX,Tiles,Velocity,FreeMarker
持久层技术——MyBatis,Hibernate
Spring , Spring MVC:一个贯穿整个项目的框架,为项目开发带来依赖注入,面向切面编程的功能
项目构建工具Maven
日志Log4j
版本控制 Git
数据库技术:SQL语句,参数调优
操作系统:熟练掌握一种Linux系统,原理,Shell命令

服务器技术:
熟练使用并理解一个应用服务器技术的原理(Tomcat)
熟练使用并理解一个Web服务器技术的原理(Nginx)

附加:
缓存技术:熟练使用并理解一种缓存技术(Redis,Memcache,EhCache)
非关系型数据库:熟练使用并理解一种非关系型数据库(MongoDB)
中间件技术:JMS:activeMQ和kafka,RPC: Dubbo
设计模式:了解并能够使用几种最主要的设计模式
网络:熟练使用并理解一个网络开发技术(Netty),熟悉http,TCP协议
Java虚拟机:熟悉jvm运行原理,内存分布

Redis

持久化方式
Redis数据结构
事务和清理
高速策略
集群模式
分布式锁

基本概念

开源免费
NOSQL数据库(非关系型数据库) KV数据库
1:面向列的数据库:HBase
2:K-V数据库:Redis
特点:能够存储数据结构,但是对数据关系难以刻画
适用场景:储存用户信息(比如会话)、配置文件、参数、购物车等等。这些信息一般都和ID(键)挂钩
3:文档数据库:MongoDB
特点:文档数据库通常以 JSON 或 XML 格式存储数据(可以看作增强版的KV)
4:图形数据库:Neo4j

Redis通常使用运用于Linux操作系统上,而Linux为终端服务器,在实际开发的时候可以利用secureCRT模拟终端

为什么要使用:高并发,高性能
目的:缓存(热点数据:经常访问的数据),消息中间件
基于内存的数据库 二八定律80%的业务访问集中在20%的数据上
适用情况
1:高并发业务
2:读多于写
3:业务不常更新
4:数据量不大
缓存:
读:先从Redis数据库中读,成功则返回。失败则读数据库,并写入Redis
写:先写数据库,再删除redis数据
高并发写:
首先都先写入Redis缓存,当高并发读写事务结束后,再将Redis进行持久化

持久化

参考资料
持久化:
RDB快照:以快照的形式保存到硬盘的二进制文件(dump.rdb文件)。即Snapshot快照存储(默认设置)
创建快照来获得存储在内存里面的数据在某个时间点上的副本。Redis创建快照之后,可以对快照进行备份,可以将快照复制到其他服务器从而创建具有相同数据的服务器副本(Redis主从结构,主要用来提高Redis性能),还可以将快照留在原地以便重启服务器的时候使用。

在这里插入图片描述
命令:save
因为Redis是单线程,会阻塞其进行,所以其执行有一定的风险
优化方案:bgsave,会单独生成一个后台线程来生成RDB文件
在这里插入图片描述
启动方式三:自动执行save配置,本质上是bgsave
save second changes:单位时间内的数量达标

在这里插入图片描述
AOF只追加文件:将执行的命令写入磁盘文件AOF文件。当恢复的时候直接从AOF恢复数据库
执行流程:
数据——redis内存——AOF缓冲区——AOF磁盘
AOF缓冲取——AOF磁盘有三种不同的持久化策略
appendfsync always #AOF缓冲区有修改都会写入AOF磁盘,这样会严重降低Redis的速度
appendfsync everysec #每秒钟同步一次,显示地将多个写命令同步到硬盘
appendfsync no #让操作系统决定何时进行同步

AOF重写:bgrewriteaof
原因:
当开启的AOF时,随着时间推移,AOF文件会越来越大,而重写会优化命令,减少文件的大小。
比如先后执行了“set foo bar1 set foo bar2 set foo bar3” 此时AOF文件会记录三条命令,这显然不合理,因为文件中应只保留“set foo bar3”这个最后设置的值,前面的set命令都是多余的
Redis 服务器会维护一个 AOF 重写缓冲区,该缓冲区会在子进程创建新AOF文件期间,记录服务器执行的所有写命令。当子进程完成创建新AOF文件的工作之后,服务器会将重写缓冲区中的所有内容追加到新AOF文件的末尾,使得新旧两个AOF文件所保存的数据库状态一致。最后,服务器用新的AOF文件替换旧的AOF文件,以此来完成AOF文件重写操作

方法:在这里插入图片描述

在这里插入图片描述
比较:
RDB:数据小,存储速度慢,恢复速度快,丢失速度多,启动级低
AOF相反
如果两个都配了优先加载AOF
混合持久化:结合RDB和AOF的优点。在重写的时候,直接将RDB写入新AOF,之后再将AOF 重写缓冲区写入新AOF

综上:不能保证数据的可靠性,即使是AOF的appendfsync always也可能丢失当前数据

如何保持缓存和数据的一致性?
实时策略——用户体验好,是默认应该使用的策略;
异步策略——适用于并发量大,但是数据没有那么关键的情况,好处是实时性好;
定时策略——并发量实在太大,数据量也大的情况,异步都难以满足的场景;

实时策略:写入的过程&#x

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值