缓存
文章平均质量分 55
我才是真的封不觉
某外企高级开发,菜鸟一个,希望在博客记录自己技术的成长,目标是成为一个好脾气的技术大牛。
b站账号 觉哥学java
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
分布式缓存技术-redis基础篇 (redis里只有五种数据类型?redis的数据类型源码与底层实现是?为啥这样设计?不同数据类型应用场景是?被面试官问倒了就赶紧来瞅瞅把)
一、前言 这一节主要 就是 一些发展 比较 介绍 大致看看就好 1.1redis诞生历程 它是为了记录用户访问记录而诞生的,最开始的数据结构就是下面这种,就是简单的队列 1.2 关系型数据库与非关系型数据库的区别 1.2.1关系型数据库 我们都知道 一般数据都存在关系型数据库 mysql oracle 这些里面 那么 为什么 还要用到 非关系型数据库 redis呢? 看看下面俩图 特点 不足 1.2.2 非关系型数据库 非关系数据库具有的特点 非关...原创 2021-09-28 20:03:47 · 453 阅读 · 0 评论 -
分布式缓存技术-redis高级篇 (redis为啥这么快?同事又删库跑路咋办?没关系,教你)
一、发布订阅模式 1.1 直接订阅与发送 如下是订阅指定频道后 然后发送消息的命令 1.2 按规则订阅然后发送 lua脚本 阻塞其它客户端和命令的执行原创 2021-09-28 19:42:32 · 367 阅读 · 0 评论 -
143-商城业务-购物车-ThreadLocal用户身份鉴别
1.做了啥,咋做的 标题写的ThreadLocal,阅读它的源码会发现,他就是一个线程Thread对象作为键的实现了map接口的类。 之前我们说了分布式session解决方案springsession其实就是把session保存到redis中,这里在拦截器的预处理中取到session,判断是否包含用户信息, 从而确定是否登录,若是没登录可以让跳转到登录页面,也可以就保存到离线购物车,之前京东还有离线购物车,但是现在好像没有了 这里为什么要用threadlocal对象呢,因为拦截器与对应拦截方...原创 2021-05-08 17:19:46 · 503 阅读 · 0 评论 -
140-商城业务-认证服务-一篇文章带你解决单点登录+流程演示+源码提供
1.什么是单点登录 SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统 实现方式,下面摘录自百度百科,可能大家对cookie与session都不明白什么意思,下面我简单介绍下 cookie:是本次实现单点登录的核心参与人员,它通常是保存在内存中的,有失效性,有域名关联,在浏览器f12能看到 这里就是 2.简要单点登录系统 体验 (1)配置域名映射 (2)访问客户端1 跳转到认证服务器,填写用户信息后进行认证 (3)认证成功后成功跳转到..原创 2021-04-30 22:27:02 · 378 阅读 · 1 评论 -
135-商城业务-认证服务-注册功能整体实现
这里完成主体功能,省略部分细节了,比如对手机号与用户名的重复校验,后面赶着面试,得做快点 1.前端注册表单核心代码 <form method="post" action="/regist" class="one"> <div class="register-box"> <label class="username_label">用 户 名 <input maxlength="20" name="userName" type.原创 2021-04-25 00:01:47 · 265 阅读 · 0 评论 -
133-商城业务-认证服务-验证码防刷校验
1.auth服务引入redis依赖 2.添加redis主机与端口的配置端口默认为6379 3.添加验证码前缀 4.添加验证码刷新频率异常 5.后端代码 6.前端代码 7.发送短信直接在通过feign调用第三方服务中打印或者存到redis中算了这样来测试,就不用真实的验证码短信服务了 ...原创 2021-04-20 22:47:22 · 1451 阅读 · 0 评论 -
day104-缓存-分布式锁-分布式锁原理与使用
1.原理 分布式锁的一个基本原理就是多个服务内的多个线程访问某资源时,全都到同一个地方占坑,这个地方就是缓存,被所有服务共享的缓存,第一个访问的线程会去缓存中设置 一个keyvalue缓存,由于是原子性的操作,后面的线程设置同样key时缓存失败,从而实现一个分布式的锁 2.linux命令实现方式 指令参考 http://www.redis.cn/commands/set.html 从上链接可以看到当给set指令添加NX选项时,只有当key不存在时才能缓存该数据 (1)复制四个链接 ..原创 2021-02-10 01:55:52 · 393 阅读 · 0 评论 -
day103-缓存-缓存使用-本地锁在分布式下的问题
1.模拟分布式环境 我们一般的项目都是分布式应用而不是单机的 拷贝配置 拷贝三次设置不同端口号然后启动 2.压测及问题分析 这里要访问gulimall.com为了经过nginx监听然后负载均衡 结果分析 查看到几个应用打印的结果,可以看到有两台机器查询了数据库,为啥呢, 这是因为我们加的锁是加在this对象的,他虽然是单例的,但只是在单机应用中,若是个应用,对象是不一样的 所以出现查询多次数据库的情况,所以我们需要使用分布式锁,来保证加的同一把锁 ...原创 2021-02-06 02:41:02 · 347 阅读 · 0 评论 -
day102-缓存-缓存使用-加锁解决缓存击穿问题以及加锁位置的重要性
1.加锁 @Override public Map<String, List<Catelog2Vo>> getCatalogJson() { //先从缓存中尝试获取,若为空则从数据库中获取然后放入缓存 ValueOperations<String, String> opsForValue = stringRedisTemplate.opsForValue(); String catalogJson = o原创 2021-02-06 01:59:09 · 523 阅读 · 0 评论 -
day101-缓存-缓存使用-缓存穿透、雪崩、击穿问题及解决方案
使用缓存时,分布式环境下可能出现很多问题,下面我来说典型的三个 1.穿透 2.雪崩 3.击穿 4.总结 缓存穿透:查询一个数据库与缓存都永不存在的数据,导致每次都要查db 解决方法=》从db查出null结果也缓存,并加上短暂的过期时间 缓存雪崩:大面积缓存同时失效 解决方法=》缓存加过期时间时加随机值,别都加一样的,比如1-5分钟随机 缓存击穿:某一个缓存key,单点失效后,导致数据库被高并发请求同时访问 解决方法=》加锁,第一个请求进来时就加锁,后面的请求自然从缓存中能查.原创 2021-02-05 19:54:57 · 232 阅读 · 0 评论 -
day100-缓存-缓存使用-压力测试出的内存泄露及解决(Lettuce低版本bug问题解决)
1.压测 查看聚合报告 填表发现使用缓存后,获取三级分类比之前快了很多,吞吐量多了几百 2.出现内存泄露问题分析及解决 我上面压测没报错是因为我使用的springboot版本高点,视频内的springboot版本低些,所以带的lettuce版本也低,该lettuce有个bug,会报下面错误,直接内存不够分配 分析:解决方式有两种,使用高版本lettuce,或者切换使用jedis 使用jedis前记得屏蔽data-redis内携带的lettuce依赖,jedis版本无需指名,...原创 2021-02-05 15:54:01 · 1696 阅读 · 1 评论 -
day99-缓存-缓存使用-改造三级分类业务
1.三级分类业务代码改造 将原本一个方法改为俩方法,代码如下 @Override public Map<String, List<Catelog2Vo>> getCatalogJson(){ //先从缓存中尝试获取,若为空则从数据库中获取然后放入缓存 ValueOperations<String, String> opsForValue = stringRedisTemplate.opsForValue();原创 2021-02-05 15:14:20 · 248 阅读 · 0 评论 -
day97-缓存-缓存使用-本地缓存与分布式缓存介绍及使用场景
1.为什么及什么时候使用缓存 前面对三级分类请求已经做了几方面的优化,然而吞吐量还不算太理想,这个时候我们就需要使用缓存了 什么场景需要使用缓存呢? 读模式下基本的流程 伪代码及注意设置过期时间 写模式下基本的流程 这个我就不多说了,就是在写入数据库的同时把缓存也同时更新 2.本地缓存与分布式缓存 本地缓存适用于单机应用,比如map做本地缓存,就是 如果是分布式情况下 分布式本地缓存带来的问题 1)缓存不共享 在这种情况下,每个服务都有一个缓存,但是这个缓存并不原创 2021-02-04 15:39:54 · 405 阅读 · 0 评论
分享