获得徽章 1
- #青训营笔记创作活动# day7 1月22日
微服务自2014年3月由Martin Fowler首次提出以
来,在Spring Cloud、Dubbo等各类微服务框架的帮助下,以燎原之势席卷了整个T技术界,成为了最主流的分布式应用解决方案。但仍然还有很多问题没有得到根本性的解决,比如技术门槛高、多语言支持不足、代码侵入性强等。如何应对这些挑战成为了下一代微服务首要回答的问题。直到服务网格(Service Mesh)被提出,这一切都有了答案。展开评论点赞 - #青训营笔记创作活动# 1月21日 day7
HTTP 协议里还有一把优缺点一体的双刃剑,就是明文传输。明文意思就是协议里的报文(准确地说是 header 部分)不使用二进制数据,而是用简单可阅读的文本形式。
对比 TCP、UDP 这样的二进制协议,它的优点显而易见,不需要借助任何外部工具,用浏览器、Wireshark 或者 tcpdump 抓包后,直接用肉眼就可以很容易地查看或者修改,为我们的开发调试工作带来极大的便利。
当然缺点也是显而易见的,就是不安全,可以被监听和被窥探。因为无法判断通信双方的身份,不能判断报文是否被更改过。展开评论点赞 - #青训营笔记创作活动# 1月20日 day6
怎么利用Redis实现数据的去重?
Redis的set:它可以去除重复元素,也可以快速判断某一个元素是否存在于集合中,如果元素很多(比如上亿的计数),消占用内存很大
Redis的bit:它可以用来实现比set内存高度压缩的计数,它通过一个bit设置为1或者0,表示存储某个元素是否存在信息。例如网站唯一访客计数,可以把user_id作为 bit 的偏移量 offset,如设置为1表示有访问,使用1 MB的空间就可以存放800多万用户的一天访问计数情况。
HyperLogLog:实现超大数据量精确的唯一计数都是比较困难的,HyperLogLog可以仅仅使用 12 k左右的内存,实现上亿的唯一计数,而且误差控制在百分之一左右。
bloomfilter布隆过滤器:布隆过滤器是一种占用空间很小的数据结构,它由一个很长的二进制向量和一组Hash映射函数组成,它用于检索一个元素是否在一个集合中展开赞过评论1 - #青训营笔记创作活动# 1月19日 day5
缓存雪崩 如何避免?
1:在缓存失效后,通过加锁或者队列来控制读数据库写缓存的线程数量。比如对某个key只允许一个线程查询数据和写缓存,其他线程等待。 2:做二级缓存,A1为原始缓存,A2为拷贝缓存,A1失效时,可以访问A2,A1缓存失效时间设置为短期,A2设置为长期 3:不同的key,设置不同的过期时间,让缓存失效的时间点尽量均匀展开赞过评论1 - #青训营笔记创作活动# 1月18日 day5
关于校验,可以建立一个公共模块,所有的微服务都依赖这个公共模块,这个公共模块中定义了一个拦截器,会拦截下来每一个请求,从请求头中取出用户 ID,然后从 Redis 中拿到具体的用户信息,存入到 ThreadLocal 中,这样在后续的方法调用中,如果需要判断用户是否具备某一个权限,就可以通过 ThreadLocal 去获取展开赞过评论1 - #青训营笔记创作活动# 1月17日 day4
怎么设计一个高并发系统?
1、横行扩展,分而治之。
2、微服务拆分,把一个个服务都拆分开
3、分库分表
4、池化技术
5、缓存
6、消息队列
7、主从分离
8、es
9、降级熔断
10、限流
12、异步处理,比如下单成功先h返回成功,后面订单表,支付表,帐户这些后面再搞,可以分开进行。不是同步的。一般放消息队列可以做到
展开赞过评论1 - #青训营笔记创作活动# 8月16日 day3
redis适合用的场景:
缓存会话
Redis 缓存会话比其他存储的优势在于:Redis 提供持久化。
排行榜、计数器:
Redis 在内存中对数字进行递增或递减的操作实现的非常好。集合和有序集合也使得我们在执行这些操作的时候变的非常简单,Redis 只是正好提供了这两种数据结构。展开赞过评论1 - #青训营笔记创作活动# 1月15日 day2 idea功能强大,插件丰富,学到好多,发现居然还能继承接口测试插件,以后都不用postman、apipost这类接口测试软件了。直接idea全部搞定,还有第一个快捷键提示插件,感觉也还可以。有机会去试试
赞过评论1 - #青训营笔记创作活动# 1月14号 redis的数据一致性问题:方式1:先更新数据库,再更新缓存
这种是常规的做法,但是如果更新缓存失败,将会导致缓存是旧数据,数据库是新数据
方式2:先删除缓存,再写入数据库,这种方式能够解决方式1的问题,但是仅限于低并发的场景,不然如果有新的请求在删完缓存之后,写数据库之前进来,那么缓存就会马上更新数据库更新之前数据,造成数据不一致的问题
方式3:延时双删策略,这种方式是先删除缓存,然后更新数据库,最后延迟个几百毫秒再删除缓存
方式4:直接操作缓存,定期写入数据库展开赞过评论1