Java核心知识盘点(二)- 缓存使用

Redis有哪些数据类型

  String、Hash、List、Set、ZSet

  String:字符串

  Hash:哈希

  Set:集合

  List:列表

  ZSet:有序集合

 

Redis内部结构

  1、Redis是专用于存储数据的,它对于计算机的主要消耗在内存上。

  2、Redis是用于在线访问的,对于单个请求的响应时间要求很高。

  3、Redis的性能瓶颈不在于CPU资源,而在于内存访问和网络IO。

  4、Redis的重要基础数据结构:dict,是一个用于维护key和value映射关系的数据结构。

 

Redis 持久化

  两种持久化机制:Snapshotting(快照)、Aof()

  1、Snapshotting:快照是默认的持久化方式,这种方式就是以快照的方式写入到二进制文件中。默认的文件名为:dump.rdb

  2、在使用 aof 持久化方式时,redis 会将每一个收到的写命令都通过 write 函数追加到文件中(默认是 appendonly.aof)。当 redis 重启时会通过重新执行文件中保存的写命令来在内存中重建整个数据库的内容

 

Redis 集群方案与实现

  1、客户端分片:不使用第三方中间件,这种分片性能比代理式更好,缺点:不能平滑水平扩容,必须手动调整分片程序,出现故障不能自动转移。难以运维

  2、Twemproxy:运维成本低,业务方不用关心Redis实例,Proxy的逻辑和存储的逻辑是分离的。缺点:代理多了一次转发,性能所有损耗。出现故障不能自动转移,运维性差

  3、Redis Cluster:无中心节点,数据按照Slot存储分布在多个Redis实例上,平滑的进行扩容/缩容,自动故障转移降低运维成本。缺点:严重依赖外部Redis-Trib,缺乏管控管理。

  4、Proxy+Redis Cluster:减少了一层网络传输代理,效率比较高。提供一套Http Restful接口,隔离底层存储。

 

Redis为什么是单线程

  突出自己功能的灵活性。在单线程基础上任何原子操作都可以几乎无代价地实现,多么复杂的数据结构都可以轻松运用

 

缓存崩溃

  当服务器重启或程序异常崩溃时,Redis的数据就会全部丢失,就会出现缓存崩溃。

 

缓存降级

  服务降级的目的,是为了防止Redis服务故障,导致数据库跟着一起发生雪崩问题。因此对于不重要的缓存数据,当发生Redis问题的时候,而不是从库里去数据,直接返回一个默认值。

 

消息队列

  主要解决:应用耦合、异步消息、流量消峰、日志处理等问题

 

消息的重发补偿解决思路

参考:

JMS消息传送机制

消息的幂等性解决思路

参考:

MQ之如何做到消息幂等

消息的堆积解决思路

参考:

Sun Java System Message Queue 3.7 UR1 管理指南

自己如何实现消息队列

参考:

自己动手实现消息队列之JMS

如何保证消息的有序性

参考:

消息队列的exclusive consumer功能是如何保证消息有序和防止脑裂的

posted @ 2018-09-18 15:10  GᎭ•Cristin  阅读(144)  评论(0编辑  收藏  举报