Redis
文章平均质量分 67
GZK.
这个作者很懒,什么都没留下…
展开
-
【Reids】分布式锁 --由浅入深实现Redis分布式锁
通过加锁可以解决在单机情况下的一人一单安全问题,但是在集群模式下就不行了。原创 2024-05-26 16:17:55 · 926 阅读 · 0 评论 -
【Redis】缓存实战解决方案--Part5 解决缓存击穿
思路分析:当用户开始查询redis时,判断是否命中,如果没有命中则直接返回空数据,不查询数据库,而一旦命中后,将value取出,判断value中的过期时间是否满足,如果没有过期,则直接返回redis中的数据,如果过期,则在开启独立线程后直接返回之前的数据,独立线程去重构数据,重构完成后释放互斥锁。如果获取到了锁的线程,再去进行查询,查询后将数据写入redis,再释放锁,返回数据,利用互斥锁就能保证只有一个线程去执行操作数据库的逻辑,防止缓存击穿。新建一个实体类,这个方案,对原来代码没有侵入性。原创 2024-05-21 11:02:39 · 298 阅读 · 0 评论 -
【Redis】缓存实战解决方案--Part4 缓存击穿问题及解决思路
假设线程1去查询缓存,然后从value中判断出来当前的数据已经过期了,此时线程1去获得互斥锁,那么其他线程会进行阻塞,获得了锁的线程他会开启一个 线程去进行 以前的重构数据的逻辑,直到新开的线程完成这个逻辑后,才释放锁, 而线程1直接进行返回,假设现在线程3过来访问,由于线程线程2持有着锁,所以线程3无法获得锁,线程3也直接返回数据,只有等到新开的线程2把重建数据构建完后,其他线程才能走返回正确的数据。这种方案巧妙在于,异步的构建缓存,缺点在于在构建完缓存之前,返回的都是脏数据。解决方案二、逻辑过期方案。原创 2024-05-21 10:59:44 · 447 阅读 · 0 评论 -
【Redis】缓存实战解决方案--Part3 缓存雪崩问题及解决思路
导致大量请求到达数据库,带来巨大压力。缓存雪崩是指在同一时段大量的缓存key。原创 2024-05-21 10:57:30 · 379 阅读 · 0 评论 -
【Redis】缓存实战解决方案--Part2 缓存穿透问题的解决思路
来解决这个问题,通过一个庞大的二进制数组,走哈希思想去判断当前这个要查询的这个数据是否存在,如果布隆过滤器判断存在,则放行,这个请求会去访问redis,哪怕此时redis中的数据过期了,但是数据库中一定存在这个数据,在数据库中查询出来这个数据后,再将其放入到redis中,,这样,下次用户过来访问这个不存在的数据,那么在redis中也能找到这个数据就不会进入到缓存了。原因在于:布隆过滤器走的是哈希思想,只要哈希思想,就可能存在。假设布隆过滤器判断这个数据不存在,则直接返回。布隆过滤:布隆过滤器其实采用的是。原创 2024-05-21 10:56:20 · 313 阅读 · 0 评论 -
【Redis】缓存实战解决方案--Part1 缓存更新策略
缓存更新是redis为了节约内存而设计出来的一个东西,主要是因为内存数据宝贵,当我们向redis插入太多数据,此时就可能会导致缓存中的数据过多,所以redis会对部分数据进行更新,或者把他叫为淘汰更合适。redis自动进行,当redis内存达到咱们设定的max-memery的时候,会自动触发淘汰机制,淘汰掉一些不重要的数据(可以自己设置策略方式)当我们给redis设置了过期时间ttl之后,redis会将超时的数据进行删除,方便咱们继续使用缓存。原创 2024-05-19 13:12:27 · 427 阅读 · 1 评论 -
【Redis】短信登录-Part4 基于Redis实现短信登录
在这个方案中,他确实可以使用对应路径的拦截,同时刷新登录token令牌的存活时间,但是现在这个拦截器他只是拦截需要被拦截的路径,假设当前用户访问了一些不需要拦截的路径,那么这个拦截器就不会生效,所以此时令牌刷新的动作实际上就不会执行,所以这个方案他是存在问题的。原创 2024-05-12 15:28:26 · 700 阅读 · 0 评论 -
【Redis】短信登录-Part3 隐藏用户敏感信息
通过浏览器观察到此时用户的全部信息都在,这样极为不靠谱,所以我们应当在返回用户信息之前,将用户的敏感信息进行隐藏,采用的核心思路就是书写一个UserDto对象,这个UserDto对象就没有敏感信息了,我们在返回前,将有用户敏感信息的User对象转化成没有敏感信息的UserDto对象,那么就能够避免这个的问题了。由于前期我们在用session实现登录的时候存的用户信息是user,原创 2024-05-12 15:15:12 · 293 阅读 · 0 评论 -
【Redis】短信登录-Part2 实现登录拦截功能
首先当用户发起请求时,会访问我们向tomcat注册的端口;sokcet都是成对出现的,用户通过socket向互相传递数据,当tomcat端的socket接收到数据后,此时监听线程会从tomcat的线程池中取出一个线程执行用户请求,在我们的服务部署到tomcat后,线程会找到用户想要访问的工程,然后用这个线程转发到工程中的controller,service,dao中,并且访问对应的DB,在用户执行完请求后,再统一返回,再找到tomcat端的socket,再将数据写回到用户端的socket,完成请求和响应。原创 2024-05-07 23:56:49 · 215 阅读 · 0 评论 -
【Redis】短信登录-Part1 如何基于Session实现短信登录
在tomcat支撑起并发流量后,我们如果让tomcat直接去访问Mysql,根据经验Mysql企业级服务器只要上点并发,一般是16或32 核心cpu,32 或64G内存,像企业级mysql加上固态硬盘能够支撑的并发,大概就是4000起~7000左右,上万并发, 瞬间就会让Mysql服务器的cpu,硬盘全部打满,容易崩溃,所以我们在高并发场景下,会选择使用mysql集群,同时为了进一步降低Mysql的压力,同时增加访问的性能,我们也会加入Redis,同时使用Redis集群使得Redis对外提供更好的服务。原创 2024-05-07 23:41:31 · 1088 阅读 · 2 评论