
缓存
文章平均质量分 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 · 306 阅读 · 0 评论 -
分布式缓存技术-redis高级篇 (redis为啥这么快?同事又删库跑路咋办?没关系,教你)
一、发布订阅模式1.1 直接订阅与发送如下是订阅指定频道后 然后发送消息的命令1.2 按规则订阅然后发送lua脚本 阻塞其它客户端和命令的执行原创 2021-09-28 19:42:32 · 312 阅读 · 0 评论 -
143-商城业务-购物车-ThreadLocal用户身份鉴别
1.做了啥,咋做的标题写的ThreadLocal,阅读它的源码会发现,他就是一个线程Thread对象作为键的实现了map接口的类。之前我们说了分布式session解决方案springsession其实就是把session保存到redis中,这里在拦截器的预处理中取到session,判断是否包含用户信息,从而确定是否登录,若是没登录可以让跳转到登录页面,也可以就保存到离线购物车,之前京东还有离线购物车,但是现在好像没有了这里为什么要用threadlocal对象呢,因为拦截器与对应拦截方...原创 2021-05-08 17:19:46 · 437 阅读 · 0 评论 -
140-商城业务-认证服务-一篇文章带你解决单点登录+流程演示+源码提供
1.什么是单点登录SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统实现方式,下面摘录自百度百科,可能大家对cookie与session都不明白什么意思,下面我简单介绍下cookie:是本次实现单点登录的核心参与人员,它通常是保存在内存中的,有失效性,有域名关联,在浏览器f12能看到这里就是2.简要单点登录系统 体验(1)配置域名映射(2)访问客户端1跳转到认证服务器,填写用户信息后进行认证(3)认证成功后成功跳转到..原创 2021-04-30 22:27:02 · 320 阅读 · 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 · 225 阅读 · 0 评论 -
133-商城业务-认证服务-验证码防刷校验
1.auth服务引入redis依赖2.添加redis主机与端口的配置端口默认为63793.添加验证码前缀4.添加验证码刷新频率异常5.后端代码6.前端代码7.发送短信直接在通过feign调用第三方服务中打印或者存到redis中算了这样来测试,就不用真实的验证码短信服务了...原创 2021-04-20 22:47:22 · 1324 阅读 · 0 评论 -
day104-缓存-分布式锁-分布式锁原理与使用
1.原理分布式锁的一个基本原理就是多个服务内的多个线程访问某资源时,全都到同一个地方占坑,这个地方就是缓存,被所有服务共享的缓存,第一个访问的线程会去缓存中设置一个keyvalue缓存,由于是原子性的操作,后面的线程设置同样key时缓存失败,从而实现一个分布式的锁2.linux命令实现方式指令参考http://www.redis.cn/commands/set.html从上链接可以看到当给set指令添加NX选项时,只有当key不存在时才能缓存该数据(1)复制四个链接..原创 2021-02-10 01:55:52 · 315 阅读 · 0 评论 -
day103-缓存-缓存使用-本地锁在分布式下的问题
1.模拟分布式环境我们一般的项目都是分布式应用而不是单机的拷贝配置拷贝三次设置不同端口号然后启动2.压测及问题分析这里要访问gulimall.com为了经过nginx监听然后负载均衡结果分析查看到几个应用打印的结果,可以看到有两台机器查询了数据库,为啥呢,这是因为我们加的锁是加在this对象的,他虽然是单例的,但只是在单机应用中,若是个应用,对象是不一样的所以出现查询多次数据库的情况,所以我们需要使用分布式锁,来保证加的同一把锁...原创 2021-02-06 02:41:02 · 288 阅读 · 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 · 472 阅读 · 0 评论 -
day101-缓存-缓存使用-缓存穿透、雪崩、击穿问题及解决方案
使用缓存时,分布式环境下可能出现很多问题,下面我来说典型的三个1.穿透2.雪崩3.击穿4.总结缓存穿透:查询一个数据库与缓存都永不存在的数据,导致每次都要查db解决方法=》从db查出null结果也缓存,并加上短暂的过期时间缓存雪崩:大面积缓存同时失效解决方法=》缓存加过期时间时加随机值,别都加一样的,比如1-5分钟随机缓存击穿:某一个缓存key,单点失效后,导致数据库被高并发请求同时访问解决方法=》加锁,第一个请求进来时就加锁,后面的请求自然从缓存中能查.原创 2021-02-05 19:54:57 · 184 阅读 · 0 评论 -
day100-缓存-缓存使用-压力测试出的内存泄露及解决(Lettuce低版本bug问题解决)
1.压测查看聚合报告填表发现使用缓存后,获取三级分类比之前快了很多,吞吐量多了几百2.出现内存泄露问题分析及解决我上面压测没报错是因为我使用的springboot版本高点,视频内的springboot版本低些,所以带的lettuce版本也低,该lettuce有个bug,会报下面错误,直接内存不够分配分析:解决方式有两种,使用高版本lettuce,或者切换使用jedis使用jedis前记得屏蔽data-redis内携带的lettuce依赖,jedis版本无需指名,...原创 2021-02-05 15:54:01 · 1545 阅读 · 1 评论 -
day99-缓存-缓存使用-改造三级分类业务
1.三级分类业务代码改造将原本一个方法改为俩方法,代码如下 @Override public Map<String, List<Catelog2Vo>> getCatalogJson(){ //先从缓存中尝试获取,若为空则从数据库中获取然后放入缓存 ValueOperations<String, String> opsForValue = stringRedisTemplate.opsForValue();原创 2021-02-05 15:14:20 · 202 阅读 · 0 评论 -
day97-缓存-缓存使用-本地缓存与分布式缓存介绍及使用场景
1.为什么及什么时候使用缓存前面对三级分类请求已经做了几方面的优化,然而吞吐量还不算太理想,这个时候我们就需要使用缓存了什么场景需要使用缓存呢?读模式下基本的流程伪代码及注意设置过期时间写模式下基本的流程这个我就不多说了,就是在写入数据库的同时把缓存也同时更新2.本地缓存与分布式缓存本地缓存适用于单机应用,比如map做本地缓存,就是如果是分布式情况下分布式本地缓存带来的问题1)缓存不共享在这种情况下,每个服务都有一个缓存,但是这个缓存并不原创 2021-02-04 15:39:54 · 352 阅读 · 0 评论