摘要: Redis如何配置KEY的过期时间?他的实现原理是什么? redis设置key的过期时间:1.EXPIRE。2.SETNX。 实现原理: 定期删除:每隔一段时间,执行一次删除过期key的操作。 懒汉式删除:当使用get,getset等指令去获取数据时,判断key是否过期。过期后,就先把key删除,再 阅读全文
posted @ 2021-04-04 20:33 pangqianjin 阅读(650) 评论(0) 推荐(0)
摘要: 如何设计一个分布式锁?如何对锁性能进行优化? 分布式锁的本质:就是在所有进程都能访问到的一个地方(如数据库、zookeeper、Redis),设置一个锁资源,让这些进程都来竞争锁资源。通常对于分布式锁,会要求响应快、性能高、与业务无关。 Redis实现分布式锁: SETNX key value :N 阅读全文
posted @ 2021-04-04 20:19 pangqianjin 阅读(624) 评论(0) 推荐(0)
摘要: 如何保证Redis与数据库的数据一致? 当我们对数据进行修改的时候,到底是先删缓存,还是先写数据库? 1.如果是先删缓存,再写数据库:在高并发场景下,当第一个线程删了缓存,还没有来得及写数据库,第二个线程来读数据,会发现缓存中的数据为空, 那就会去读数据库中的数据(旧值/脏数据),读完之后,把读到的 阅读全文
posted @ 2021-04-04 19:28 pangqianjin 阅读(811) 评论(0) 推荐(0)
摘要: 什么是缓存穿透? 缓存穿透:缓存中查不到,数据库中也查不到。 解决方案: 对参数进行合法性校验 将数据库中没有查到结果的数据也写入到缓存。这时要注意为了防止Redis被无用的key占满,这一类缓存的有效期要设置得短一点。 引入布隆过滤器(BloomFilter),在访问Redis之前判断数据是否存在 阅读全文
posted @ 2021-04-04 19:01 pangqianjin 阅读(87) 评论(0) 推荐(0)
摘要: Go语言内在的RPC框架已经支持在HTTP协议上提供RPC服务。但是框架的HTTP服务同样采用了内置的Gob协议,并且没有提供采用其他协议的接口,因此从其他语言依然无法访问,在前面的例子中,我们已经实现了在TCP协议之上运行jsonrpc服务,并且通过nc命令行工具成功实现了RPC方法调用。现在我们 阅读全文
posted @ 2021-04-04 15:07 pangqianjin 阅读(111) 评论(0) 推荐(0)
摘要: 标准库的RPC默认采用Go语言特有的Gob编码,因此从其他语言调用Go语言实现的RPC服务将比较困难。在互联网的微服务时代,每个RPC以及服务的使用者都可能采用不同的编程语言,因此跨语言是互联网时代RPC的一个首要条件。得益于RPC的框架设计,Go语言的RPC其实也是很容易实现跨语言的。 Go语言的 阅读全文
posted @ 2021-04-04 14:41 pangqianjin 阅读(770) 评论(0) 推荐(0)
摘要: 在涉及RPC的应用中,作为开发人员一般至少有3种角色:首先是服务器端实现RPC方法的开发人员,其次是客户端调用RPC方法的人员,最后也是最重要的是制定服务器端和客户端RPC接口规范的设计人员。为了简化将以上几种角色的工作全部放到一起,虽然看似实现简单,但是不利于后期的维护和工作的切割。 如果要重构H 阅读全文
posted @ 2021-04-04 13:46 pangqianjin 阅读(454) 评论(0) 推荐(0)
摘要: Go语言的RPC包的路径为net/rpc,也就是放在了net包目录下面。因此我们可以猜测该RPC包是建立在net包的基础之上的 。 我们首先构造一个HelloService类型,其中的Hello()方法用于实现打印功能: 其中的Hello()方法必须满足Go语言的RPC规则 :方法只能有两个可序列化 阅读全文
posted @ 2021-04-04 13:01 pangqianjin 阅读(117) 评论(0) 推荐(0)