底层原理计划--Redis
创始人
2025-05-30 00:48:31
0

Redis(缓存一套,–>分布式锁)
多级缓存方案
在这里插入图片描述

Why
1、数据高并发读写
2、海量数据读写
3、不经常改变,但是对MySQL查询压力大的
4、想要使用分布式锁的解决方案,还有缓存;
What
nosql 非关系型数据库
Redis是一款内存高速缓存数据库。Redis全称为:Remote Dictionary Server (远程数据服务),使用C语言编写,Redis是一个key-value存储系统(键值存储系统),支持丰富的数据类型,
如:
String
string
int
float
字符串最大空间不超过512m
规范项目名:业务名:类型:id
List
与java linkedlist类似,双向链表,支持正向反向检索
有序
可重复
插入,删除快
查询一般
应用场景:朋友圈点赞列表、评论列表
Set
与hashset类似
无序
元素不可重复
查找快
支持交集、并集、差集(相对来说SQL实现比较复杂,所以用redis更简洁)
Zset
也叫sortedset
可排序set 与treeset类似
元素不重复
查询速度快
应用:排行榜
Hash
value是无序字典
类似java hashmap
CRUD单个字段更容易
Redis跟memcache不同的是,储存在Redis中的数据是持久化的,断电或重启,数据也不会丢失。
与MySQL数据库不同的是,Redis的数据是存在内存中的。它的读写速度非常快,每秒可以处理超过10万次读写操作。因此redis被广泛应用于缓存。
Redis缓存提高查询效率
How
可以自己封装redis工具类,SpringDataRedis企业用的多,Spring提供的Redis Client,StringRedisTemplate是用于操作Reids的API工具。
Jedis 通常一般的设置缓存、过期时间、修改、删除。比较全面的Redis命令的支持
Ressdion
依赖lock4j-redisson-spring-boot-starter 或 redisson、redisson-spring-boot-starter
@Slf4j
@RunWith(SpringRunner.class)
@SpringBootTest(classes = TaskApplication.class)
public class ExceptionTest {
//way of first
//redisson-spring-boot-starter-3.13.6.jar
@Autowired
private RedissonClient redissonClient;
// //way of second
// //lock4j-redisson-spring-boot-starter-2.2.2.jar
// @Resource
// private LockTemplate lockTemplate;
//way of first
@Test
public void redisTest() {
RLock lock = redissonClient.getLock(“this_is_key”);
try {
lock.lock();
//模拟业务
Thread.sleep(5000);
} catch (Exception e) {
log.warn(“e:{}”, e);
} finally {
lock.unlock();
}
}
// //way of second
// @Test
// public void secondTest(){
// LockInfo lockInfo = null;
// try {
// lockInfo = lockTemplate.lock(“this_is_second_key”, 5000L, 0);
//
// Thread.sleep(5000);
// } catch (Exception e) {
// log.warn(“e:{}”, e);
// }
//
// lockTemplate.releaseLock(lockInfo);
// }
}
//请求超时时间小于等于0L,框架会用默认的请求超时时间,第四个参数决定lock方法用框架里面的自旋锁。设置超时时间。请求时间和过期时间是不一样的概念。
lockInfo = lockTemplate.lock(key, 50000,
0L, RedissonLockExecutor.class);
有些小伙伴认为,稍微把锁过期时间设置长一些就可以啦。其实我们设想一下,是否可以给获得锁的线程,开启一个定时守护线程,每隔一段时间检查锁是否还存在,存在则对锁的过期时间延长,防止锁过期提前释放。
当前开源框架Redisson解决了这个问题。我们一起来看下Redisson底层原理图吧:只要线程一加锁成功,就会启动一个watch dog看门狗,它是一个后台线程,会每隔10秒检查一下,如果线程1还持有锁,那么就会不断的延长锁key的生存时间。因此,Redisson就是使用Redisson解决了「锁过期释放,业务没执行完」问题。
在这里插入图片描述

Redis高级
缓存雪崩:由于原有缓存失效,新缓存未到期间(比如;我们设置缓存时采用相同的过期时间,在同一时刻出现大面积的缓存过期),所有原本应该访问缓存的请求都去查询数据库了,而对数据库cpu和内存造成巨大压力,严重的造成数据库宕机。从而形成一系列连锁反应,造成整个系统崩溃。
Redis为什么可以加锁
因为redis是一个单独的中间件,不同客户端可以往同一个redis或者集群中加锁,这样就能保证加锁的地方或者是资源相同的。并且由于redis也是单线程的,同时也支持lua脚本,可以保证并发安全的问题,所以可以很简单的实现分布式锁的功能。

相关内容

热门资讯

linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
C++ 机房预约系统(六):学... 8、 学生模块 8.1 学生子菜单、登录和注销 实现步骤: 在Student.cpp的...
JAVA多线程知识整理 Java多线程基础 线程的创建和启动 继承Thread类来创建并启动 自定义Thread类的子类&#...
【洛谷 P1090】[NOIP... [NOIP2004 提高组] 合并果子 / [USACO06NOV] Fence Repair G ...
国民技术LPUART介绍 低功耗通用异步接收器(LPUART) 简介 低功耗通用异步收发器...
城乡供水一体化平台-助力乡村振... 城乡供水一体化管理系统建设方案 城乡供水一体化管理系统是运用云计算、大数据等信息化手段࿰...
程序的循环结构和random库...   第三个参数就是步长     引入文件时记得指明字符格式,否则读入不了 ...
中国版ChatGPT在哪些方面... 目录 一、中国巨大的市场需求 二、中国企业加速创新 三、中国的人工智能发展 四、企业愿景的推进 五、...
报名开启 | 共赴一场 Flu... 2023 年 1 月 25 日,Flutter Forward 大会在肯尼亚首都内罗毕...
汇编00-MASM 和 Vis... Qt源码解析 索引 汇编逆向--- MASM 和 Visual Studio入门 前提知识ÿ...
【简陋Web应用3】实现人脸比... 文章目录🍉 前情提要🌷 效果演示🥝 实现过程1. u...
前缀和与对数器与二分法 1. 前缀和 假设有一个数组,我们想大量频繁的去访问L到R这个区间的和,...
windows安装JDK步骤 一、 下载JDK安装包 下载地址:https://www.oracle.com/jav...
分治法实现合并排序(归并排序)... 🎊【数据结构与算法】专题正在持续更新中,各种数据结构的创建原理与运用✨...
在linux上安装配置node... 目录前言1,关于nodejs2,配置环境变量3,总结 前言...
Linux学习之端口、网络协议... 端口:设备与外界通讯交流的出口 网络协议:   网络协议是指计算机通信网...
Linux内核进程管理并发同步... 并发同步并发 是指在某一时间段内能够处理多个任务的能力,而 并行 是指同一时间能够处理...
opencv学习-HOG LO... 目录1. HOG(Histogram of Oriented Gradients,方向梯度直方图)1...
EEG微状态的功能意义 导读大脑的瞬时全局功能状态反映在其电场结构上。聚类分析方法一致地提取了四种头表面脑电场结构ÿ...
【Unity 手写PBR】Bu... 写在前面 前期积累: GAMES101作业7提高-实现微表面模型你需要了解的知识 【技...