微服务-使用Redis实现分布式缓存

在单体中对于key信息和用户信息是放在内存中放的,通过session进行管理。

微服务是要放在分布式缓存中,以实现服务的无状态化

  @Autowired
  private StringRedisTemplate redisTemplate;

  @Value("${file.prefix}")
  private String imgPrefix;

  /**
   * 1.首先通过缓存获取
   * 2.不存在将从通过数据库获取用户对象
   * 3.将用户对象写入缓存,设置缓存时间5分钟
   * 4.返回对象
   * @param id
   * @return
   */
  public User getUserById(Long id) {
    String key = "user:"+id;
    String json =  redisTemplate.opsForValue().get(key);
    User user = null;
    //如果为空则从数据库中查找
    if (Strings.isNullOrEmpty(json)) {
      user =  userMapper.selectById(id);
      user.setAvatar(imgPrefix + user.getAvatar());
      //反序列化成json存入缓存
      String string  = JSON.toJSONString(user);
      redisTemplate.opsForValue().set(key, string);
      redisTemplate.expire(key, 5, TimeUnit.MINUTES);
    }else {
    //不为空则将缓存中的json对象反序列化成user对象
      user = JSON.parseObject(json,User.class);
    }
    return user;
  }

原文地址:https://www.cnblogs.com/xiangkejin/p/9010572.html

时间: 2024-10-30 07:11:23

微服务-使用Redis实现分布式缓存的相关文章

Java 多线程 服务集群和分布式缓存系统架构

服务集群和分布式缓存系统架构见下图: 参考资料 Java企业级电商项目架构演进之路 Tomcat集群与Redis分布式 原文地址:https://www.cnblogs.com/WJQ2017/p/8442510.html

springboot+mybatis+redis实现分布式缓存

大家都知道springboot项目都是微服务部署,A服务和B服务分开部署,那么它们如何更新或者获取共有模块的缓存数据,或者给A服务做分布式集群负载,如何确保A服务的所有集群都能同步公共模块的缓存数据,这些都涉及到分布式系统缓存的实现. 前面其实我已经介绍了springboot+mybatis+ehcache实现缓存数据,但是ehcache的设计并不适合做分布式缓存,所以今天用redis来实现分布式缓存. 原理什么的,我就不多说了,直接上代码. pom依赖 <dependency> <gr

微服务架构下处理分布式事务,你必须知道的事儿

根据微服务架构的鼻祖 Martin Fowler 的忠告,微服务架构中应当尽量避免分布式事务.然而,在某些领域,分布式事务如同宿命中的对手无法避免. 在工程领域,分布式事务的讨论主要聚焦于强一致性和最终一致性的解决方案. 典型方案包括: 两阶段提交(2PC, Two-phase Commit)方案. eBay 事件队列方案. TCC 补偿模式. 缓存数据最终一致性. 一致性理论 分布式事务的目的是保障分库数据一致性,而跨库事务会遇到各种不可控制的问题,如个别节点永久性宕机,像单机事务一样的 AC

微服务架构下的分布式限流方案思考

1.微服务限流 随着微服务的流行,服务和服务之间的稳定性变得越来越重要.缓存.降级和限流是保护微服务系统运行稳定性的三大利器.缓存的目的是提升系统访问速度和增大系统能处理的容量,而降级是当服务出问题或者影响到核心流程的性能则需要暂时屏蔽掉,待高峰或者问题解决后再打开,而有些场景并不能用缓存和降级来解决,比如稀缺资源.数据库的写操作.频繁的复杂查询,因此需有一种手段来限制这些场景的请求量,即限流. 比如当我们设计了一个函数,准备上线,这时候这个函数会消耗一些资源,处理上限是1秒服务3000个QPS

如何用REDIS实现分布式缓存

摘要: 第一:Redis 是什么? Redis是基于内存.可持久化的日志型.Key-Value数据库 高性能存储系统,并提供多种语言的API. 第二:出现背景 数据结构(Data Structure)需求越来越多, 但memcache中没有, 影响开发效率 性能需求, 随着读操作的量的上升需要解决,经历的过程有: 第一:Redis 是什么? Redis是基于内存.可持久化的日志型.Key-Value数据库 高性能存储系统,并提供多种语言的API. 第二:出现背景 数据结构(Data Struct

用REDIS实现分布式缓存

第一:Redis 是什么? Redis是基于内存.可持久化的日志型.Key-Value数据库 高性能存储系统,并提供多种语言的API. 第二:出现背景 数据结构(Data Structure)需求越来越多, 但memcache中没有, 影响开发效率 性能需求, 随着读操作的量的上升需要解决,经历的过程有: 数据库读写分离(M/S)–>数据库使用多个Slave–>增加Cache (memcache)–>转到Redis 解决写的问题: 水平拆分,对表的拆分,将有的用户放在这个表,有的用户放在

跟着小程学微服务-自己动手扩展分布式调用链

一.说在前面 微服务是当下最火的词语,现在很多公司都在推广微服务,当服务越来越多的时候,我们是否会纠结以下几个问题: 面对一笔超时的订单,究竟是哪一步处理时间超长呢? 数据由于并发莫名篡改,到底都谁有重大嫌疑呢? 处理遗漏了一笔订单,曾经是哪个环节出错把它落下了? 系统莫名的报错,究竟是哪一个服务报的错误? 每个服务那么多实例服务器,如何快速定位到是哪一个实例服务器报错的呢? 现在很多系统都要求可用性达到99.9%以上,那么我们除了增加系统健壮性减少故障的同时,我们又如何在真正发生故障的时候,快

【分布式事务】微服务架构下的分布式事务问题

一.基本概念 ACID理论:关系型数据库的事务满足 ACID 的特性,具有 ACID 特性的数据库支持数据的强一致性,保证了数据本身不会出现不一致.适用于传统的单体架构. CAP理论:在分布式系统下, 包含三个要素:Consistency(一致性).Availability(可用性).Partition tolerance(分区容错性),并且三者不可兼得.分布式系统要求保证分区容错性,只能在数据强一致性(C)和可用性(A)之间做平衡,即选择CP或者AP.比如Zookeeper为CP系统保证强一致

(五)surging 微服务框架使用系列之缓存-reids

1.服务跟客户端初始化的时候需要添加缓存配置 1 var host = new ServiceHostBuilder() 2 .RegisterServices(builder => 3 { 4 builder.AddMicroService(option => 5 { 6 option .AddCache()//缓存初始化28 });29 }).Configure(build =>47 build.AddCacheFile("cacheSettings.json",