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 ...
随机推荐
- 音乐类产品——“网易云音乐”app交互原型模板(免费使用)
网易云音乐虽是一款音乐app,但有人说它也是社交界的一股清流以及一匹黑马.音乐带给人的感染,激发着很多人在这里表达着他们的情绪和心声.网易云音乐上的真实用户点评,不仅被印在地铁的广告牌上,还在朋友圈频 ...
- Visual Studio 独立 Shell 下载
https://visualstudio.microsoft.com/zh-hans/vs/older-downloads/isolated-shell/ SSMS 2017 安装问题 https:/ ...
- NetCore2.0下使用EF CodeFirst创建数据库
本文所使用的VS版本:VS2017 15.3.0 首先新建一个.net core项目 取名NetCoreTask 使用模型视图控制器方式 新建Model层 在Model层下新建一个user实体类 1 ...
- CentOS安装PHP7.*
安装 如之前安装过PHP,则先卸载 $ yum -y remove php* 由于linux的yum源不存在php7.x,所以我们要更改yum源 $ rpm -Uvh https://dl.fedor ...
- Python练习--普通函数与递归函数求阶乘
'''Created on 2018年10月28日递归函数示例:阶乘'''def my_fun_example1(n): ''' 非递归函数求阶乘示例 ''' result = ...
- Python记录wsgi
类实现wsgi app from wsgiref.util import setup_testing_defaults from wsgiref.simple_server import make_s ...
- OpenStack-Neutron-Fwaas-代码【二】
上一节从代码层面来讲解了fwaas的流程,这里通过具体查看iptables规则来说下应用规则的流程: 1.首先通过命令获取当前路由中的规则 #ip netns exec qrouter-[router ...
- 20165305 《网络对抗技术》 Kali安装
一.安装kali 在虚拟机中安装kali我参考了下面的网页,里面写的很全面,所以我就不重复了,我主要说一下kali里面的环境配置. 在虚拟机中安装kali linux 注意:输入用户和密码时,kali ...
- 高校表白APP-冲刺第三天
第三天,我们进行了第三次会议. 一.任务: 昨日任务:完成APP基本的登陆框架. 今日任务:完成登录界面修改界面注册界面,并解决闪退. 明日任务:完成界面跳转,并彻底解决闪退. 二.遇到的困难: 今天 ...
- 利用Python计算π的值,并显示进度条
利用Python计算π的值,并显示进度条 第一步:下载tqdm 第二步;编写代码 from math import * from tqdm import tqdm from time import ...