微服务的简单理解

  这里提供的是一种思路,假设现在有一个项目需要用到一个关于用户的日志模块来记录用户的操作,按照一个项目所有的模块都在一起的话,就要用同一个数据库,每次向数据库插入日志的时候还要占用一部分的数据库访问量和后台的性能 , 如果在这个时候我们新建一个数据库 和一个新的项目专门来处理这件事,是不是就可以提高一些性能,对原数据库也是一种优化。那么这两个项目之间要怎么联系起来呢?这个时候就轮到了Redis登场了,不过这里只是用Redis举了个例子。

首先先了解一下Jedis操作Redis的一些用到的语法:

语法描述
jedis.lpush(String key,String key1,...) 命令将一个或多个值插入到列表头部。 如果 key 不存在,一个空列表会被创建并执行 LPUSH 操作。 当 key 存在但不是列表类型时,返回一个错误。(可以理解为往左边追加一个或多个)
jedis.lrange(String key,int i,int j) 获取一个指定区间的的值,因为是有下标存在所以可以按正常的listl理解
jedis.rpop(String key) 命令用于移除列表的最后一个元素,返回值为移除的元素。
jedis.llen(String key) 根据key名获取list的长度
jedis.exists(String key) 如果列表 key 不存在,则 key 被解释为一个空列表,返回 0 。 如果 key 不是列表类型,返回一个错误。

  还有很多这里就不再一一描述了,感兴趣的话可以自己去了解一下。现在来说一下思路,首先操作日志部分的产生肯定还是要在原项目,但是我们这次不存数据库了,我们先在Redis中定义一个日志专用的key然后使用jedis.lpush(String key)不断的往这个key值里追加我们的日志信息,下面是一张数据的大概流程。

  ​ jedis.lpush(String key,String...)每次追加数据都会把上一条数据往右边顶一下,新数据代替原第一条数据,也就是说新数据永远是第一条下标也永远是是0。这样的话数据就会排着队,先进入的数据永远在右边。ok,到这里我们已经理清了关键的部分。这里我们有了新项目但是新项目它要怎么自己启动起来呢,这里我选择使用定时器每隔一段时间就去访问一下Redis,看到有新的数据我们就拿出来,没有的话我们这次就白跑呗,反正又不影响主项目的性能。对于定时器不是很明白的话可以去百度一下,估计一会就能搞明白。好了,现在到了日志项目访问Redis的时候了,先不要着急去直接拿数据,先用jedis.llen(String key)和jedis.exists(String key)做两个判断是不是有新的数据在等着我们和这个key存不存在。如果通过了,那我么就开始干活,首先是获取数据,还记得jedis.lrange(String key,int i,int j)吗,我们可以通过它获取我们想要的数量的数据,原理就是通过下标。jedis.llen(String key)可以让我们获取list的长度,通过加减法可以往前推一定数量的下标,然后jedis.lrange(String key,int i,int j)可以获取一个区间内的数据,这个时候我们就可以通过它们两个的组合想拿多少数据就拿多少数据了,但是要注意万一前面没有这么多数据怎么办,当然通过各种判断都是可以避免的,比如在获取长度的时候多加一个判断长度达标才允许通过。然后通过迭代来逐条插入到数据库中,删除的话也可以用jedis.rpop(String key)移除最后一条数据,获取多少条,循环多少次,移除出多少条应该是能对应上的,这里是我后来想出来的,所以没有去实践,感兴趣的可以自己试一试,如果出现问题可以回复我修正免得我误导了大家。

​   这里我使用的是逐条获取逐条插入的方式,操作起来是通过长度—1然后锁定jedis.lrange(String key,int i,int j)区间为最后一条,获取数据后插入数据库一条数据,右弹出最后一条数据,最后定时器启动继续获取数据,因为是一条一条的获取和插入所以定时器的间隔我定为了1秒。其实到这里大家就可以随心所欲的进行操作了,拿多少,多久拿一次,怎么插入都看大家怎么考虑了。因为这个是思路,操作起来难度也不是很大,代码的作用不大,所以就不在这里放代码了。

  ​ 其实这里就是一个简单的应用一下,为什么说是一个思路呢,其实很多时候项目想要的就是一些数据和结果的转换,这个时候如果我们新建立一个项目做处理,主项目给新项目一些数据让新项目进行处理,然后主项目去取结果或者是新项目把结果返回给主项目,同样也可以节省一部分性能。对Redis的访问也可以变为对接口的访问,按照这种思路的话就是所谓的微服务吧,不同的项目可以互相访问出现问题有互不影响,只是一小模块暂时不能运行,但是还有很多模块可以运行不会全崩。项目的维护也可以细致到具体的项目但是不影响其他项目运行,以上是我个人的一些简单的理解,如果有不对的地方欢迎指正,有更好的思路的话也欢迎来分享讨论。

 

posted @ 2021-12-12 23:45  奥特曼阿文  阅读(57)  评论(0)    收藏  举报