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功能是如何保证消息有序和防止脑裂的

Java核心知识盘点(二)- 缓存使用的更多相关文章

  1. Java核心知识盘点(三)- 框架篇-Spring

    Spring的两大核心特性:IOC.AOP IOC:控制反转.依赖注入,它并不是一种技术实现,而是一种思想.把一些相互依赖对象的创建.协调工作交给Spring容器来管理,每个对象只需要关注其自身的业务 ...

  2. Java核心知识盘点(一)- 数据存储

    MySQL 索引使用的注意事项 1.索引的目的:在于提高查询效率,插入和更新的操作,数据库的操作是慢的,但是查询操作会非常快,索引可以对表中一个或多个字段进行加索引动作. 2.索引的类型: 1.唯一索 ...

  3. 分布式之redis核心知识盘点?

    考虑到绝大部分写业务的程序员,在实际开发中使用redis的时候,只会setvalue和getvalue两个操作,对redis整体缺乏一个认知.又恰逢博主某个同事下周要去培训redis,所以博主斗胆以r ...

  4. 阿里 P8 高级架构师吐血总结的 《Java 核心知识整理&面试.pdf》| 免费分享

    最近在网上发现一份非常棒的 PDF 资料,据说是阿里 P8 级高级架构师吐血总结的, 其中内容覆盖很广,包括 Java 核心基础.Java 多线程.高并发.Spring.微服务.Netty 与 RPC ...

  5. 阿里架构师花近十年时间整理出来的Java核心知识pdf(Java岗)

    由于细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容! 整理了一份Java核心知识点.覆盖了JVM.锁.并发.Java反射.Spring原理.微服务.Zooke ...

  6. Java基础知识盘点(二)- 集合篇

    List和Set区别 List和Set都是继承Collection接口 List特点:元素有放入顺序,元素可重复 Set特点:元素无放入顺序,元素不可重复 Set和List对比: Set:检索元素效率 ...

  7. Java基础知识(二)

    一.基本概念 1. Java程序初始化的顺序是怎么样的 2. Java和C++的区别 3. 反射 先看一个知乎回答 什么是反射 主要用途 获得Class对象 4. 注解 什么是注解 为什么要用注解 基 ...

  8. Java基础知识盘点(三)- 线程篇

    创建线程的方式及实现 一.继承Thread类创建线程类 1.定义Thread的子类,并重写run方法,因为该方法的方法体就是代表了线程要完成的任务,因此run方法又叫做执行体. 2.创建Thread子 ...

  9. Java核心知识体系3:异常机制详解

    1 什么是异常 异常是指程序在运行过程中发生的,由于外部问题导致的运行异常事件,如:文件找不到.网络连接失败.空指针.非法参数等. 异常是一个事件,它发生在程序运行期间,且中断程序的运行. Java ...

随机推荐

  1. jeecg中excel导出字段判空处理

    我们清楚,jeecg 导出 excel 采用的是 easypoi,不知道是否遇到过这种情况: 我们以一个实体属性为例: @Excel(name="问题分类",dicCode=&qu ...

  2. docker+kibana+filebeat的安装

    安装filebeat服务(在需要收集日志的主机安装filebeat) 下载和安装key文件 rpm --import https://packages.elastic.co/GPG-KEY-elast ...

  3. NodeMan架构

    在上一篇文章中我们介绍了NodeMan的基本概念,介绍了这是一套利用NodeJs框架来管理Ubuntu服务器的解决方案,接下来我们会继续介绍关于这样一套解决方案更多细节的内容. 后台: 使用node作 ...

  4. Python学习笔记(Ⅱ)——循环/选择/函数

    一.循环结构 python中提供了for循环和while循环两种操作,没有do……while语句. 1.for循环: 与其他语言中for循环的常见的写法如for (int i=0;i<10;i+ ...

  5. git之commit

    面解释的话, 1.git commit -m用于提交暂存区的文件: 2.git commit -am用于提交跟踪过的文件. 要理解它们的区别,首先要明白git的文件状态变化周期,如下图所示 工作目录下 ...

  6. Java基础语法-Lambda表达式

    1.Lambda表达式主要用于简写接口的操作等出现匿名内部类的地方,如下:我这里先定义一个Swim接口,以及它所定义的swim()方法 interface Swim{ void swim(); } 2 ...

  7. Gem install Mysql2的问题

    运行 ‘bundle install’ 或者 ‘gem install mysql2′ 遇到如下错误 > gem install mysql2 ERROR: Error installing m ...

  8. css的扩展技术

    CSS的扩展技术 (在原来的CSS语言的基础上扩展了js,可以在里面写js ) 一.less 定义: @color:red; //定义颜色 @body-color:blue; @div-color:y ...

  9. web接口文档apidoc的使用

    1.安装 npm install apidoc -g 2.新建src文件夹,里面放2个文件,test.js和apidoc.json 3.test.js /** * @api {get} /query_ ...

  10. XPosed 示例

    https://blog.csdn.net/fmc088/article/details/80535894