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问题的时候,而不是从库里去数据,直接返回一个默认值。
消息队列
主要解决:应用耦合、异步消息、流量消峰、日志处理等问题
消息的重发补偿解决思路
参考:
消息的幂等性解决思路
参考:
消息的堆积解决思路
参考:
Sun Java System Message Queue 3.7 UR1 管理指南
自己如何实现消息队列
参考:
如何保证消息的有序性
参考:
消息队列的exclusive consumer功能是如何保证消息有序和防止脑裂的
Java核心知识盘点(二)- 缓存使用的更多相关文章
- Java核心知识盘点(三)- 框架篇-Spring
Spring的两大核心特性:IOC.AOP IOC:控制反转.依赖注入,它并不是一种技术实现,而是一种思想.把一些相互依赖对象的创建.协调工作交给Spring容器来管理,每个对象只需要关注其自身的业务 ...
- Java核心知识盘点(一)- 数据存储
MySQL 索引使用的注意事项 1.索引的目的:在于提高查询效率,插入和更新的操作,数据库的操作是慢的,但是查询操作会非常快,索引可以对表中一个或多个字段进行加索引动作. 2.索引的类型: 1.唯一索 ...
- 分布式之redis核心知识盘点?
考虑到绝大部分写业务的程序员,在实际开发中使用redis的时候,只会setvalue和getvalue两个操作,对redis整体缺乏一个认知.又恰逢博主某个同事下周要去培训redis,所以博主斗胆以r ...
- 阿里 P8 高级架构师吐血总结的 《Java 核心知识整理&面试.pdf》| 免费分享
最近在网上发现一份非常棒的 PDF 资料,据说是阿里 P8 级高级架构师吐血总结的, 其中内容覆盖很广,包括 Java 核心基础.Java 多线程.高并发.Spring.微服务.Netty 与 RPC ...
- 阿里架构师花近十年时间整理出来的Java核心知识pdf(Java岗)
由于细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容! 整理了一份Java核心知识点.覆盖了JVM.锁.并发.Java反射.Spring原理.微服务.Zooke ...
- Java基础知识盘点(二)- 集合篇
List和Set区别 List和Set都是继承Collection接口 List特点:元素有放入顺序,元素可重复 Set特点:元素无放入顺序,元素不可重复 Set和List对比: Set:检索元素效率 ...
- Java基础知识(二)
一.基本概念 1. Java程序初始化的顺序是怎么样的 2. Java和C++的区别 3. 反射 先看一个知乎回答 什么是反射 主要用途 获得Class对象 4. 注解 什么是注解 为什么要用注解 基 ...
- Java基础知识盘点(三)- 线程篇
创建线程的方式及实现 一.继承Thread类创建线程类 1.定义Thread的子类,并重写run方法,因为该方法的方法体就是代表了线程要完成的任务,因此run方法又叫做执行体. 2.创建Thread子 ...
- Java核心知识体系3:异常机制详解
1 什么是异常 异常是指程序在运行过程中发生的,由于外部问题导致的运行异常事件,如:文件找不到.网络连接失败.空指针.非法参数等. 异常是一个事件,它发生在程序运行期间,且中断程序的运行. Java ...
随机推荐
- dataTable使用方法
using System; using System.Data; using System.Data.SqlClient; namespace App{ class MyClass{ public s ...
- Mysql8安装与配置
网上的教程有很多,基本上大同小异.但是安装软件有时就可能因为一个细节安装失败.我也是综合了很多个教程才安装好的,所以本教程可能也不是普遍适合的. 安装环境:win7 1.下载zip安装包: MySQL ...
- Vue父子组件及非父子组件如何通信
1.父组件传递数据给子组件 父组件数据如何传递给子组件呢?可以通过props属性来实现 父组件: 子组件通过props来接收数据: 方式1: 方式2 : 方式3: 这样呢,就实现了父组件向子组件传递数 ...
- The world is in my hands
Null项 其实我还是比较希望你能理解我的心情 无聊666回味
- 监听auduo标签播放
<audio id="audio" controls="controls" loop="loop" style="displ ...
- xpath详细讲解
什么是XML XML 指可扩展标记语言(EXtensible Markup Language) XML 是一种标记语言,很类似 HTML XML 的设计宗旨是传输数据,而非显示数据 XML 的标签需要 ...
- Python实现图像直方图均衡化算法
title: "Python实现图像直方图均衡化算法" date: 2018-06-12T17:10:48+08:00 tags: [""] categorie ...
- pygame 游戏舞台搭建典型应用
#两个文件要放在同一目录中,包括图片 一.搭建游戏舞台主程序 #!/usr/bin/env python3#_*_coding:utf-8_*_ author ==$ VACyp import sys ...
- Two (DP)
题意:求两串数字有多少个相同的子串,子串不要求连续. 思路:直接DP,dp[i][j] 代表A串长度为i.B串为j时满足条件的子串个数.转移dp[i][j] = dp[i -1][j] + dp[i] ...
- Angular4 管道